回 帖 发 新 帖 刷新版面

主题:超级急!!大家帮忙看看!谢谢

大侠:
您好!麻烦看看下面。
data segment
augend dd 99251
sum dd ?
data ends
data1 segment
addend dd -15961
data1 ends
code segment
assume ds:data,cs:code,es:data1
start: mov bx,data
mov ds,bx
mov ax,0
cwd
mov ax,augend
add ax,addend
end start
code ends
请问一下,为什么mov ax,augend
add ax,addend这两条总是出错。我不是将AX扩到DX了吗?谢谢。 



回复列表 (共7个回复)

沙发

即便扩到DX了,也要你自己把数据MOV到DX

比如:
     mov ax,word ptr [augend]
     mov dx,word ptr [augend+2]

板凳

你可以用扩展加法的方法来完成
或者用32位的汇编

3 楼

.model small
.386
data segment
augend dd 99251
sum dd ?
data ends
data1 segment
addend dd -15961
data1 ends
code segment
assume ds:data,cs:code,es:data1
start: mov bx,data
mov ds,bx
mov eax,0
mov eax,augend
add eax,addend
mov sum,eax
code ends
end start

4 楼


谢谢指教
先说明一点,如果我是在8086的环境下呢,好像EAX不能使用吧.再者,乘法运算可以自动将运算扩展到DX, 那加法为什么要自己扩展呢?

5 楼

32位的要分两次送吧

6 楼

[quote]即便扩到DX了,也要你自己把数据MOV到DX

比如:
     mov ax,word ptr [augend]
     mov dx,word ptr [augend+2][/quote]

可以解释下为什么吗??是规定还是怎么的??@@

7 楼

指令的功能就是这样

我来回复

您尚未登录,请登录后再回复。点此登录或注册