鱼C论坛

 找回密码
 立即注册
查看: 5776|回复: 10

[已解决]涉及到寄存器DS的汇编指令:mov al,[0] 与mov ax,[0](DS=0000)

[复制链接]
发表于 2020-4-21 22:12:01 | 显示全部楼层 |阅读模式
10鱼币
mov bx,0
mov ds,bx
mov al,[0]
即将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,[0000] '此处答案给出AX=2662H
…………
mov ax,[0000] AX为什么是读取了一个字而不是一个字节?
AX为什么不等于0062H?


本人对汇编理解并不透彻,如问题有什么让人问中生问的地方请指出,如因为我粗心看书漏掉了某个重要知识点,因我已经根据前面的知识进行了相关分析并没有得到结果,请各位大神指明!
感谢!
最佳答案
2020-4-21 22:12:02
你对寄存器理解不到位
AX寄存器分为AL和AH,一个是低字节一个是高字节,寄存器AX就是个16位寄存器,可以整体用,也可以分成两部分用
当你写mov al,[0]时,就是读一个字节到AL,
当你写mov ax,[0000]时,就是读一个字到AX

最佳答案

查看完整内容

你对寄存器理解不到位 AX寄存器分为AL和AH,一个是低字节一个是高字节,寄存器AX就是个16位寄存器,可以整体用,也可以分成两部分用 当你写mov al,[0]时,就是读一个字节到AL, 当你写mov ax,[0000]时,就是读一个字到AX
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-21 22:12:02 | 显示全部楼层    本楼为最佳答案   
你对寄存器理解不到位
AX寄存器分为AL和AH,一个是低字节一个是高字节,寄存器AX就是个16位寄存器,可以整体用,也可以分成两部分用
当你写mov al,[0]时,就是读一个字节到AL,
当你写mov ax,[0000]时,就是读一个字到AX
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-22 02:20:24 | 显示全部楼层
其实没有什么为什么,编译器就是这样去解释代码的

mov ax,[0000]
你写成这样,汇编语言编译器(汇编器)就认为是读取一个字

mov al,[0000]
你写成这样,汇编器就认为是读取一个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-22 06:55:54 | 显示全部楼层
本帖最后由 jkluoling1992 于 2020-4-22 06:59 编辑

0000代表读取16位,按长度读取吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-22 09:14:46 | 显示全部楼层
jkluoling1992 发表于 2020-4-22 06:55
0000代表读取16位,按长度读取吧

不懂请不要胡乱猜测。0000是地址,地址的长度是由存储空间整体大小来决定的,与读取一个字节两个字节没有任何关系。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-22 09:25:27 | 显示全部楼层
sunrise085 发表于 2020-4-22 09:14
不懂请不要胡乱猜测。0000是地址,地址的长度是由存储空间整体大小来决定的,与读取一个字节两个字节没有 ...

那地址为啥是16位长度呢,16位寄存器难道读取的长度不是16位?,这里寄存器就是一个完整的寄存器,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-22 09:44:24 | 显示全部楼层
jkluoling1992 发表于 2020-4-22 09:25
那地址为啥是16位长度呢,16位寄存器难道读取的长度不是16位?,这里寄存器就是一个完整的寄存器,

16位的寄存器读取的当然是16位啦~~
mov al,[0000]也是可以的,难道这个也是读取16位??
地址16位只是说明存储空间有2^16个字节单元
但是具体读多少,与指令和寄存器大小有关
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-22 10:09:08 From FishC Mobile | 显示全部楼层
sunrise085 发表于 2020-4-22 09:44
16位的寄存器读取的当然是16位啦~~
mov al,[0000]也是可以的,难道这个也是读取16位??
地址16位只是 ...

这种情况的话,ah里面有值嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-22 10:16:18 | 显示全部楼层
jkluoling1992 发表于 2020-4-22 10:09
这种情况的话,ah里面有值嘛

ah的值不受影响,原来是什么,就还是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-22 10:26:04 From FishC Mobile | 显示全部楼层
sunrise085 发表于 2020-4-22 10:16
ah的值不受影响,原来是什么,就还是什么

搜噶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-22 12:04:22 | 显示全部楼层
噢力给
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 03:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表