是关于16位能否与8位相加的问题
今天看着视频,好纠结啊,这里不懂因此我分别在debug和编辑器里试了一下
debug:
可以add啊
在编辑器写也是可以的
那为什么老师说不可以呢
本帖最后由 LinuxDeepin 于 2013-10-2 14:20 编辑
你确定你相加的数值8位的吗?
add ax,
由于ax寄存器是十六位的,那么ds:所指向的内存单元数据也是十六位的
例如:
ds:000001 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00
此时 add ax,
那么 相当于 ax 加 4201H
LinuxDeepin 发表于 2013-10-2 14:17 static/image/common/back.gif
你确定你相加的数值8位的吗?
add ax,
由于ax寄存器是十六位的,那么ds:所指向的内存单元数据也是十六位的 ...
一个内存单元不是8位的吗 LinuxDeepin 发表于 2013-10-2 14:17 static/image/common/back.gif
你确定你相加的数值8位的吗?
add ax,
由于ax寄存器是十六位的,那么ds:所指向的内存单元数据也是十六位的 ...
还有,小甲鱼的程序也是这么写的:mov al, Sen哥 发表于 2013-10-2 14:36 static/image/common/back.gif
一个内存单元不是8位的吗
一个内存单元是一个字节,八位
但 ax 寄存器是十六位寄存器,add ax, 会自动拉上高位字节补充的。
也就是 会拉多一个字节,两个字节组成十六位 Sen哥 发表于 2013-10-2 14:37 static/image/common/back.gif
还有,小甲鱼的程序也是这么写的:mov al,
ax 寄存器是十六位的,但是为了程序兼容性。
可以分为两个八位的寄存器,分别是 ah 高八位寄存器,al 低八位寄存器
mov al, 由于al 是低八位寄存器,八位为一个字节,那么就只会读取一个字节 LinuxDeepin 发表于 2013-10-2 14:49 static/image/common/back.gif
ax 寄存器是十六位的,但是为了程序兼容性。
可以分为两个八位的寄存器,分别是 ah 高八位寄存器,al 低 ...
en,那16位+8位会有什么后果呢,我试的时候好想没什么影响 本帖最后由 LinuxDeepin 于 2013-10-2 16:07 编辑
Sen哥 发表于 2013-10-2 15:53 static/image/common/back.gif
en,那16位+8位会有什么后果呢,我试的时候好想没什么影响
例子:
add ax,ds:
假设,ax 为 1111,ds:
你理想中的ds: 所指向的内存单元字节数值为 : 11
而内存单元中存储的数据如下:
ds:0000 11 00 11 00 00 44 44 44 22 22 E6 EA 00 00 00 00
那么此时的运算结果如下:
1111H+0011H=1122H
答案是正确的。
如果内存单元存储数据如下:
ds:0000 11 AC 11 00 00 44 44 44 22 22 E6 EA 00 00 00 00
那么此时的运算结果如下:
1111H+AC11H=BD22H
结果就不是你所想要的了 LinuxDeepin 发表于 2013-10-2 16:05 static/image/common/back.gif
例子:
add ax,ds:
假设,ax 为 1111,ds:
谢谢你,那ds:指向的不是以字节为单位的吗??ds:不是只会等于11吗?? 你在多看看吧。。。 Sen哥 发表于 2013-10-2 18:18 static/image/common/back.gif
谢谢你,那ds:指向的不是以字节为单位的吗??ds:不是只会等于11吗??
ds: 并不是决定单位的要素
ax 才是决定单位的要素,ax 是十六位的,那么ds: 就是以字为单位的
al 是八位寄存器,那么 ds: 就是以字节为单位的 不可以的,想想也知道啊 呵呵,慢慢来,,多思考。
页:
[1]