汇编语言的高手请进

求编写下列程序
两个16位无符号数的相加,设他们分别存放在DATA1和DATA2中,结果存放在DATA3中。并且要求可以显示结果于屏幕上。请写明各个语句的意义或者作用,非常感谢!
要求加法的结果要显示于屏幕上。

第1个回答  2011-01-04
.MODEL SMALL
.STACK 64
;
.DATA 数据段
MESSAGE DB'This is a test','$' ;定义字符串
;
.CODE 程序段
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX ;初始化

CALL CLEAR
CALL CURSOR
CALL DISPLAY ;依次调用三个子程序,实现在特定位置显示字符串的功能
MOV AH,4CH ;结束语句
INT 21H
MAIN ENDP
;
CLEAR PROC ;该子程序用BOIS 的INT 10H功能实现清屏功能 INT 10H有很多功能
MOV AX,0600H ;AH用于说明所要实现的功能是什么AH=06H说明进行清屏 AL=00H说明全屏清屏
MOV BH,07 ;指定特定的属性等 不一定要
MOV CX,0000 ;设置开始清屏的位置
MOV DX,184FH ;设置结束位置
INT 10H ;中断请求
RET ;中断响应结束 返回主程序
CLEAR ENDP
;
CURSOR PROC ;用INT 10H的02号功能
MOV AH,02 ;设置功能号
MOV BH,00 ;设置光标所在页
MOV DH,12 ;光标所在行
MOV DL,39 ;列
INT 10H
RET
CURSOR ENDP
;
DISPLAY PROC ;用DOS提供的 INT 21H中断功能
MOV AH,09 ;与INT 10H一样 AH用于设定功能号 AH=09H 用于在当前光标位置显示字符串
MOV DX,OFFSET MESSAGE ;显示的字符串位于DS:DX中,所以这里把要显示的字符串的首地址赋值给DX 依次显示字符知道遇到 '$',这也就说明了为什么在程序开始处定义字符串时后加 一个'$'
INT 21H ;中断响应
RET
DISPLAY ENDP
END MAIN
第2个回答  2011-01-03
datarea segment
data1 dw 0000001100111100b
data2 dw 0000001000100111b
data3 dw 0
datarea ends
prognam segment
;---------------------------------------------
main proc far
assume cs:prognam,ds:datarea
start:
push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax

mov ax,data1
mov bx,data2
add bx,ax
mov data3,bx
;call input2
call output2

ret
main endp
;----------------------------------------------
;二进制显示,rol把BX中第一位放到CF,判断若CF是1则输出1,是0输出0
output2 proc near
mov cx,16
again3:
rol bx,1
jnc zero

mov dl,'1'
mov ah,02h
int 21h
loop again3
call crlf
ret
zero:
mov dl,'0'
mov ah,02h
int 21h
loop again3
call crlf
ret

output2 endp
;--------------------------------------------------
;回车换行
crlf proc near
mov dl,0ah
mov ah,2
int 21h

mov dl,0dh
mov ah,2
int 21h

ret
crlf endp
;---------------------------------------------------
prognam ends
end start本回答被网友采纳
第3个回答  2011-01-04
我觉得你问题的关键是要打印结果:
我也刚开始学汇编,这是把数字转为字符串后打印到屏幕的代码
http://hi.baidu.com/二月鸟t/blog/item/0af813d2c63b992a9b50272e.html
相似回答