8086有16位数据线,但它的地址线时20位的。
所以寻址时采用了段 + 偏移方式,实际上就是用2个16位的地址合成一个20位的地址。拗嘴
具体做法就是把段寄存器地址左移4位(就是*16)然后加上偏移地址,就等于线性地址了。
所以:
0001 * 16 = 00010
00010
+ 0000
------
00010
你可以这样做一下试验: debug
-d 0:0
0000:0000
68 10 A7 00 8B 01 70 00-16 00 C8 03 8B 01 70 00
h.....p.......p.
0000:0010
8B 01 70 00 B9 06 1B 02-40 07 1B 02 FF 03 1B 02
..p.....@.......
0000:0020
46 07 1B 02 0A 04 1B 02-3A 00 C8 03 54 00 C8 03
F.......:...T...
0000:0030
6E 00 C8 03 88 00 C8 03-A2 00 C8 03 FF 03 1B 02
n...............
0000:0040
A9 08 1B 02 A4 09 1B 02-AA 09 1B 02 5D 04 1B 02
............]...
0000:0050
B0 09 1B 02 0D 02 EA 02-C4 09 1B 02 8B 05 1B 02
................
0000:0060
0E 0C 1B 02 14 0C 1B 02-1F 0C 1B 02 AD 06 1B 02
................
0000:0070
AD 06 1B 02 A4 F0 00 F0-37 05 1B 02 11 75 00 C0
........7....u..
-d 1:0
0001:0000
8B 01 70 00 B9 06 1B 02-40 07 1B 02 FF 03 1B 02
..p.....@.......
0001:0010
46 07 1B 02 0A 04 1B 02-3A 00 C8 03 54 00 C8 03
F.......:...T...
0001:0020
6E 00 C8 03 88 00 C8 03-A2 00 C8 03 FF 03 1B 02
n...............
0001:0030
A9 08 1B 02 A4 09 1B 02-AA 09 1B 02 5D 04 1B 02
............]...
0001:0040
B0 09 1B 02 0D 02 EA 02-C4 09 1B 02 8B 05 1B 02
................
0001:0050
0E 0C 1B 02 14 0C 1B 02-1F 0C 1B 02 AD 06 1B 02
................
0001:0060
AD 06 1B 02 A4 F0 00 F0-37 05 1B 02 11 75 00 C0
........7....u..
0001:0070
72 10 A7 00 7C 10 A7 00-4F 03 B5 05 8A 03 B5 05
r...|...O.......
看到了吗?1:0000 = 0000:00010
=====================================
顺便说一句:你一点都不白,你很黑好不好!
[
本帖最后由 东海一鱼 于 2009-8-13 17:16 编辑 ]