大家看看我们编的汇编语言为什么不对啊?
题目是这样子的:编写程序实现将十进制数59与27相加.我们系几乎所有的人都是这样写的:
MOV AX,59
ADD AX,27
而老师说不对,应该这样写:
MOV AX,59H
MOV BX,27H
ADD BX,AX
DAA
不知道为什么?请哪位高手解释一下啊
楼上是南大的?景仰一下.
我不知道这个老师的原题是什么样子的,但我觉得
MOV AX,59
ADD AX,27
这两行代码就够了,也没有必要进行DAA
可以试试下面的代码(masm5下汇编通过)
data segment
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov al,59
add al,27
mov dl,al
mov ah,2
int 21h
mov ah,7
int 21h
mov ah,4ch
int 21h
code ends
end start
汇编 连接运行后的输出结果是一个大写的字母V(ASCII=86=59+27)所以我上面说要是有把数字转换
为ascii的宏或者过程,输出结果就更明白了.大家练习起来就很容易了.这也是大学里汇编教学不好的
地方,总是纸上谈兵.
我认为老师的意思是输出的结果也应该是十进制,这是问题的关键。
十进制数和十六进制数在内存中的表示是不同的。
比如,MOV AX,27 ;AX中存的是1BH,也就是00011011。
而 MOV AX,27H;AX中存的是27H,也就是00100111。
要想加法得出组合的十进制数,一定要用MOV AX,27H才行。
我也说不大清楚了。