检测点3.1
本帖最后由 就是要努力呀 于 2020-4-2 12:27 编辑1:
0000:0000 70 80 f0 30 ef 60 30 e2-00 80 80 12 66 20 22 60
0000:0010 62 26 e6 d6 cc 2e 3c 3b-ab ba 00 00 26 06 66 88
mov ax, 1
mov ds, ax ds = 0001
起初我也纠结为什么段地址是0001,偏移地址是0000却可以索引到0000:0010的内存地址,百度后明白了,8086cpu的外部总线是20条,内存地址就是是20位的物理地址,而8086cpu得到物理地址的办法是 段地址*16 + 偏移地址 将值代入进去发现 0000:0010 和 0001:0000得到的物理地址是同一个地址 00010
mov ax, ax = 2662
mov bx, bx = e626
mov ax, bx ax = e626
mov ax, ax = 2662
mov bx, bx = d6e6
add ax, bx ax = fd48
add ax, ax = 2c14
mov ax, 0 ax = 0000
mov al, al = 00e6
mov bx, 0 bx = 0000
mov bl, bl = 0026
add al, bl al = 000c
2:
mov ax, 6622h cs:ip = 2000:0000 20000 ax = 6622
ip + 3
jmp 0ff0:0100 cs:ip = 0ff0:0100 10000
mov ax, 2000h cs:ip = 0ff0:0100 10000 ax = 2000
ip + 3
mov ds, ax cs:ip = 0ff0:0103 10003 ds = 2000
ip + 2
mov ax, cs:ip = 0ff0:0105 10005 ax = c389
ip + 3
mov ax, cs:ip = 0ff0:0108 10008 ax = ea66
没有区别,二者在机器中都是以二进制的形式存在
ds指向的是数据段
cs:ip指向的是代码段 可以,懂了
请问第一题第二个空bx为什嘛不是e626? secsin 发表于 2020-4-2 10:33
请问第一题第二个空bx为什嘛不是e626?
不好意思看走眼了就是e626{:10_266:} 就是要努力呀 发表于 2020-4-2 12:28
不好意思看走眼了就是e626
多谢!!! 给大神抱个拳 mov ax,1
mov ds,ax
这两个指令执行后,段地址应该死0010(也就是*10H左移4位)而不是0001,再加上偏移地址才是真正的物理内存地址。
而0010:0000 和 0000:0000是完全不同的两个地址段,ds访问不到0000:0000,数据怎么读取? 本帖最后由 Byte2020 于 2020-4-18 16:20 编辑
(1)、
AX=2662
BX=E626
AX=E626
AX=2662
BX=D6E6
AX=FD48
AX=2C14
AX=0
AX=00E6
BX=0
BX=0026
AX=000C
2、
mov ax,6622H ;CS:IP=2000:0003DS=1000H ,AX=6622H ,BX=0
jmp 0ff0:0100 ;CS:IP=0FF0:0100DS=1000H ,AX=6622H ,BX=0
mov ax,2000H ;CS:IP=0FF0:0103DS=1000H ,AX=2000H ,BX=0
mov ds,ax ;CS:IP=0FF0:0105DS=2000H ,AX=2000 ,BX=0
mov ax, ;CS:IP=0FF0:0108DS=2000H ,AX=C389 ,BX=0
mov ax, ;CS:IP=0FF0:010BDS=2000H ,AX=EA66 ,BX=0
没有区别都是二进制的形式存在,哪些是程序哪些是数据由程序员指定 adamhex 发表于 2020-4-15 11:33
mov ax,1
mov ds,ax
这两个指令执行后,段地址应该死0010(也就是*10H左移4位)而不是0001,再加上偏移地 ...
0000:0000的数据段是出题老师用于迷惑大家的,本题不用访问 {:10_269:} 第二题那个最后一行为什么是mov ax, 而不是mov bx,ax呢?
这个ds不是已经变成了2000H了嘛,那偏移是,那指向的不就是20008嘛 我花屏了
{:5_100:} 为什么我的debug
–d 0:01f
得到的结果和书上的不一样 请问 jmp 0ff0:0100 怎么判断来的啊? JMP不是无条件跳转吗 0ff0:0100 怎么等于10000的? 想知道倒数第二个,物理地址为001c怎么看出他是对应26的 起初我也纠结为什么段地址是0001,偏移地址是0000却可以索引到0000:0010的内存地址,百度后明白了,8086cpu的外部总线是20条,内存地址就是是20位的物理地址,
而8086cpu得到物理地址的办法是 段地址*16 + 偏移地址 将值代入进去发现 0000:0010 和 0001:0000得到的物理地址是同一个地址 00010
谢了 咸鱼小明 发表于 2020-6-11 20:25
为什么我的debug
–d 0:01f
得到的结果和书上的不一样
这些是要手动输入的 z5257z 发表于 2020-6-18 15:38
请问 jmp 0ff0:0100 怎么判断来的啊? JMP不是无条件跳转吗 0ff0:0100 怎么等于10000的?
段地址0ff0*16+偏移地址0100=10000H 今晚要早睡 发表于 2020-5-31 21:42
第二题那个最后一行为什么是mov ax, 而不是mov bx,ax呢?
这个ds不是已经变成了2000H了嘛,那偏移 ...
ds是数据段寄存器,cs才是代码段寄存器,它只是读取了对应内存中的数据。 我想知道为什么0000:0000那一行内存单元物理地址是00000H-00010H,但是内存有16(15?中间那个带横杠的两个两位十六进制数算吗?应该是不算的)个两位十六进制数,而且中间那个带横杠的是什么啊?
页:
[1]
2