冷se-系¥ 发表于 2013-9-17 21:20:44

课本(王爽)103页 程序5.3

课本(王爽)103页 程序5.3
也就是这个
assume cs:code
code segment
    mov ax,0ffffH
mov ds,ax
mov bx,6

mov al,
mov ah,0
mov dx,0

mov cx,3
s:add dx,ax
    loop s

mov ax,4c00H
int 21H

code ends
end
小甲鱼说,把mov al, mov ah,0 改成mov ax,【bx】
我试了一下两个的区别,首先不说ax原本第一句付了值ffff直接mov ax,【bx】不符合题意,但是书上不是说ffff:0006单元是一个字节单元,为什么按照小甲鱼这么写ax会被附上2f35,也就是说他把一个字的数据都给了ax,这是为什么呢,我还特意查了查ffff:0006 内存的值如下图,,,他里面的的值也确实是352f   但是书上不是说ffff:0006单元是一个字节单元,懂我意思是把,望德高望重者给予指点

machine1 发表于 2013-9-19 17:29:46

sorry,没看明白。。。
我看了下书,书上103页,问题5.3不是计算123*246吗?

冷se-系¥ 发表于 2013-9-19 22:17:04

是程序5.3,我的意思是FFFF:0006不是字节单元么。为什么会把一个字的数据给ax,对,就是这个意思

tsembrace 发表于 2013-9-20 09:46:34

书上程序5.3的要求是计算ffff:0006内存单元的数乘以3的结果
因为求值的对象是字节单元,所以应该用mov al,来传递数值,又因为要考虑到加三次后可能产生的进位,所以用mov ah,0使得整个(ax)的数值等于该字节单元数值,进位也可以在ah中反映。
如果mov ax,这样的话,求的就是ffff:0006和ffff:0007组成的字型数据乘以3的结果了,而且这样进位也会丢失。

冷se-系¥ 发表于 2013-9-20 10:44:05

tsembrace 发表于 2013-9-20 09:46 static/image/common/back.gif
书上程序5.3的要求是计算ffff:0006内存单元的数乘以3的结果
因为求值的对象是字节单元,所以应该用mov al, ...

那就是说,mov ax, 所要移(附)的值是根据ax的大小或是字型来决定从后面来取值,而不是因为ffff:0006是字节单元而只附ffff:0006中的数据,不附ffff:0007 的数据,是这样么?谢谢

tsembrace 发表于 2013-9-20 22:09:33

冷se-系¥ 发表于 2013-9-20 10:44 static/image/common/back.gif
那就是说,mov ax, 所要移(附)的值是根据ax的大小或是字型来决定从后面来取值,而不是因为ffff:0006是 ...

是的
mov ax,
实际上等同于:mov al,和mov ah,

baby520 发表于 2013-9-22 20:29:05

多多学习。。没有错的。

冷se-系¥ 发表于 2013-9-22 20:41:26

tsembrace 发表于 2013-9-20 22:09 static/image/common/back.gif
是的
mov ax,
实际上等同于:mov al,和mov ah,

谢谢




页: [1]
查看完整版本: 课本(王爽)103页 程序5.3