涉及到寄存器DS的汇编指令:mov al,[0] 与mov ax,[0](DS=0000)
mov bx,0mov ds,bx
mov al,
即将0000:0地址中的数据move到al中,都为一字节,没有问题
而我在做王爽老师《汇编语言》第三版P55 检测点3.1时
原文如下:
(1)在Debug中,用“d 0:0 1f”查看内存,结果如下。
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
下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完成后相关寄存器中的值。
mov ax,1
mov ds,ax
mov ax, '此处答案给出AX=2662H
…………
mov ax, AX为什么是读取了一个字而不是一个字节?
AX为什么不等于0062H?
本人对汇编理解并不透彻,如问题有什么让人问中生问的地方请指出,如因为我粗心看书漏掉了某个重要知识点,因我已经根据前面的知识进行了相关分析并没有得到结果,请各位大神指明!
感谢!
你对寄存器理解不到位
AX寄存器分为AL和AH,一个是低字节一个是高字节,寄存器AX就是个16位寄存器,可以整体用,也可以分成两部分用
当你写mov al,时,就是读一个字节到AL,
当你写mov ax,时,就是读一个字到AX 其实没有什么为什么,编译器就是这样去解释代码的
mov ax,
你写成这样,汇编语言编译器(汇编器)就认为是读取一个字
mov al,
你写成这样,汇编器就认为是读取一个字节
本帖最后由 jkluoling1992 于 2020-4-22 06:59 编辑
0000代表读取16位,按长度读取吧 jkluoling1992 发表于 2020-4-22 06:55
0000代表读取16位,按长度读取吧
不懂请不要胡乱猜测。0000是地址,地址的长度是由存储空间整体大小来决定的,与读取一个字节两个字节没有任何关系。。。。 sunrise085 发表于 2020-4-22 09:14
不懂请不要胡乱猜测。0000是地址,地址的长度是由存储空间整体大小来决定的,与读取一个字节两个字节没有 ...
那地址为啥是16位长度呢,16位寄存器难道读取的长度不是16位?,这里寄存器就是一个完整的寄存器, jkluoling1992 发表于 2020-4-22 09:25
那地址为啥是16位长度呢,16位寄存器难道读取的长度不是16位?,这里寄存器就是一个完整的寄存器,
16位的寄存器读取的当然是16位啦~~
mov al,也是可以的,难道这个也是读取16位??
地址16位只是说明存储空间有2^16个字节单元
但是具体读多少,与指令和寄存器大小有关 sunrise085 发表于 2020-4-22 09:44
16位的寄存器读取的当然是16位啦~~
mov al,也是可以的,难道这个也是读取16位??
地址16位只是 ...
{:10_257:}这种情况的话,ah里面有值嘛 jkluoling1992 发表于 2020-4-22 10:09
这种情况的话,ah里面有值嘛
ah的值不受影响,原来是什么,就还是什么 sunrise085 发表于 2020-4-22 10:16
ah的值不受影响,原来是什么,就还是什么
搜噶{:10_245:} 噢力给
页:
[1]