Sen哥 发表于 2013-10-2 13:44:28

是关于16位能否与8位相加的问题

今天看着视频,好纠结啊,这里不懂

因此我分别在debug和编辑器里试了一下


debug:




可以add啊

在编辑器写也是可以的


那为什么老师说不可以呢

LinuxDeepin 发表于 2013-10-2 14:17:58

本帖最后由 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

Sen哥 发表于 2013-10-2 14:36:37

LinuxDeepin 发表于 2013-10-2 14:17 static/image/common/back.gif
你确定你相加的数值8位的吗?
add ax,
由于ax寄存器是十六位的,那么ds:所指向的内存单元数据也是十六位的 ...

一个内存单元不是8位的吗

Sen哥 发表于 2013-10-2 14:37:52

LinuxDeepin 发表于 2013-10-2 14:17 static/image/common/back.gif
你确定你相加的数值8位的吗?
add ax,
由于ax寄存器是十六位的,那么ds:所指向的内存单元数据也是十六位的 ...

还有,小甲鱼的程序也是这么写的:mov al,

LinuxDeepin 发表于 2013-10-2 14:47:47

Sen哥 发表于 2013-10-2 14:36 static/image/common/back.gif
一个内存单元不是8位的吗

一个内存单元是一个字节,八位

但 ax 寄存器是十六位寄存器,add ax, 会自动拉上高位字节补充的。
也就是 会拉多一个字节,两个字节组成十六位

LinuxDeepin 发表于 2013-10-2 14:49:41

Sen哥 发表于 2013-10-2 14:37 static/image/common/back.gif
还有,小甲鱼的程序也是这么写的:mov al,

ax 寄存器是十六位的,但是为了程序兼容性。
可以分为两个八位的寄存器,分别是 ah 高八位寄存器,al 低八位寄存器

mov al, 由于al 是低八位寄存器,八位为一个字节,那么就只会读取一个字节

Sen哥 发表于 2013-10-2 15:53:58

LinuxDeepin 发表于 2013-10-2 14:49 static/image/common/back.gif
ax 寄存器是十六位的,但是为了程序兼容性。
可以分为两个八位的寄存器,分别是 ah 高八位寄存器,al 低 ...

en,那16位+8位会有什么后果呢,我试的时候好想没什么影响

LinuxDeepin 发表于 2013-10-2 16:05:56

本帖最后由 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
结果就不是你所想要的了

Sen哥 发表于 2013-10-2 18:18:43

LinuxDeepin 发表于 2013-10-2 16:05 static/image/common/back.gif
例子:
add ax,ds:
假设,ax 为 1111,ds:


谢谢你,那ds:指向的不是以字节为单位的吗??ds:不是只会等于11吗??

baby520 发表于 2013-10-2 18:50:54

你在多看看吧。。。

LinuxDeepin 发表于 2013-10-2 19:47:51

Sen哥 发表于 2013-10-2 18:18 static/image/common/back.gif
谢谢你,那ds:指向的不是以字节为单位的吗??ds:不是只会等于11吗??

ds: 并不是决定单位的要素
ax 才是决定单位的要素,ax 是十六位的,那么ds: 就是以字为单位的
al 是八位寄存器,那么 ds: 就是以字节为单位的

trek600 发表于 2013-10-2 23:41:33

不可以的,想想也知道啊

alvinlotus 发表于 2013-10-3 05:17:07

呵呵,慢慢来,,多思考。
页: [1]
查看完整版本: 是关于16位能否与8位相加的问题