wawa 发表于 2012-12-19 11:12:23

检测点16.1关于 add b,ax 是否合法

检测点16.1assume cs:code
code segment
       a dw 1,2,3,4,5,6,7,8
       b dd 0
start: mov si,0
         mov cx,8
   s: mov ax,a
      add b,ax
      adc b,0
      add si,2
      loop s
......
这里的代码第八行 "add b,ax"b是双字符,ax是单字符 不会出现编译错误吗
为什么书上第288页 add b,al 会出现编译错误 b为字符数据

小新110 发表于 2012-12-19 11:12:24

16.1
mov ax,a
add word ptr b,ax
adc word ptr b,0
add si,2

小新110 发表于 2012-12-19 13:07:53

al是单字符,ax是双字

lukelqz 发表于 2012-12-19 13:19:00

两个都不行哦,数据不匹配撒。

小新110 发表于 2012-12-19 13:24:58

b是双字啊,肯定不能和ax相加

小新110 发表于 2012-12-19 13:31:54

可能开始没说清楚,al是一个字节,8个bit,ax是一个字,两个字节,16个bit,b是双字,四个字节,32个bit

wawa 发表于 2012-12-19 14:51:55

lukelqz 发表于 2012-12-19 13:19 static/image/common/back.gif
两个都不行哦,数据不匹配撒。

我自己找的网上的答案,没有进行编译,现在知道答案就是错的,自己也编译了一下知道错在那里了,谢谢

wawa 发表于 2012-12-19 14:55:36

小新110 发表于 2012-12-19 11:12 static/image/common/back.gif
16.1
mov ax,a
add word ptr b,ax


谢谢,知道自己错在那里了,word ptr 我感觉像C语言里的类型强制转换,不知道我理解的对不对,本来b是双字符,前面加 word ptr 强制b转为word类型

小新110 发表于 2012-12-19 16:04:09

理解的对的

落叶无痕 发表于 2013-4-24 18:21:39

路过看看呵呵

sos2356 发表于 2021-2-19 18:51:35

wawa 发表于 2012-12-19 14:55
谢谢,知道自己错在那里了,word ptr 我感觉像C语言里的类型强制转换,不知道我理解的对不对,本来b是双 ...

可以这么理解,实质上是ax是占2个字节,但是b是双字节的, 把2个字节放入双字节就出现了不匹配的问题,加上word ptr就相当于告诉ax放入b的2个字节的空间内,大家都是双字节,大小就匹配了
页: [1]
查看完整版本: 检测点16.1关于 add b,ax 是否合法