(汇编语言)编写一个程序,实现两个三字节无符号数DATA1和DATA2的相加,结果送四字节变量ANS。

 我来答
女人扶树干
2011-03-29 · TA获得超过405个赞
知道答主
回答量:167
采纳率:0%
帮助的人:227万
展开全部
assume cs:code,ds:data
data segment
data1 db 12h,34h,56h ;按照高高低低的顺序保存在内存中的,所以是563412h,下同
data2 db 0abh,0cdh,0efh
ans dd ?
data ends
code segment
start:
mov ax,data
mov ds,ax
mov bx,offset ans
mov di,offset data1
mov si,offset data2
mov ax,[di]
add ax,[si]
mov [bx],ax
mov ax,[di+1]
adc ax,[si+1] ;用adc带进位加法就能算高位的值了
mov [bx+1],ax
mov ax,[di+2]
adc ax,[si+2]
mov [bx+2],ax
mov ax,0
adc ax,0 ;3字节的值加上有进位,所以要算第4字节的
mov [bx+3],ax
mov ah,4ch
int 21h
code ends
end start

计算的是563412h+efceabh的值,结果是14602bdh,结果无误。可以自己用debug试试
追问
mov [bx],ax 中的bx为什么要加中括号呢?
追答
意思是将ax寄存器中的值保存到DS:[BX]内存位置,中括号表示是存储器:内存,而不是寄存器
夜隐霜华
2011-04-03 · TA获得超过3922个赞
知道小有建树答主
回答量:656
采纳率:100%
帮助的人:288万
展开全部
楼上:
ans定义不合题意,最好为:ans db 4dup(?)
也可以用循环来做:
data segment
data1 db 0ah,78h,31h
data2 db 45h,9ch,11h
ans db 4dup(?)
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bx,offset ans
mov di,offset data1
mov si,offset data2
mov cx,3
xor ax,ax
lop:mov ax,[di]
adc ax,[si]
mov [bx],ax
inc di
inc si
inc bx
loop lop
mov ax,0
adc ax,0
mov [bx],ax
mov ah,4ch
int 21h
code ends
end start
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式