一道汇编问题 麻烦大家看看对不对

来源:百度知道 编辑:UC知道 时间:2024/05/29 00:45:25
两个无符号双字长相加 结果存sum 不知道这样有没有错
emu8086运行貌似不正确。谢谢啦

dseg segment
MEM1 DD 11223344H
MEM2 DD 55667788H
SUM DD 1 DUP(?)
dseg ends
cseg segment
assume cs:cseg,ds:dseg
start:
MOV AX,WORD PTR MEM1
MOV BX,WORD PTR MEM2
ADD AX,BX
mov sum,ax
MOV aX,WORD PTR MEM1+1
MOV bX,WORD PTR MEM2+1
adc ax,bx
mov word ptr sum+1,ax

cseg ends
end start

作为一个完整的程序,一有漏项,二有错误。请参照我修改过的程序,看看漏在何处、错在何处。

dseg segment
MEM1 DD 11223344H
MEM2 DD 55667788H
SUM DD 1 DUP(?)
dseg ends
cseg segment
assume cs:cseg,ds:dseg
start:
; ========================================================
mov ax,dseg
mov ds,ax ;给数据段寄存器ds赋值
缺少这两条指令,下面的所有操作结果都不会正确的。
; ========================================================
clc ;清进位标志,保证执行adc指令,能够得到正确的结果
MOV AX,WORD PTR MEM1
ADD AX,WORD PTR MEM2
mov WORD PTR sum,ax
MOV AX,WORD PTR MEM1[2] ;一个字,两个字节嘛,MEM2+1,怎么能对呢?
adc ax,WORD PTR MEM2[2]
mov word ptr sum[2],ax
; ========================================================
mov ah,4ch ;该做的工作都做完之后,不要忘了结束程序,返回操作系统,否则,容易产生不可预料的结果或者死机。
int 21h
; ========================================================
cseg ends
end start

mov sum,ax ;类型不符,AX是字,SUM是双字
双字相加,要预留进位位 DB 0

;11223344H+55667788H=6688AACCH