试编写汇编语言程序完成两个1位十进制数的加法功能

如题所述

; 下面的程序是16位汇编,编译通过,运行正确。

; Program Name: Addition.ASM

Addition SEGMENT
ASSUME CS:Addition,DS:Addition
ORG 100H

Start: JMP Begin

First_Num DB 'The first number:$'
Second_Num DB 'The second number:$'

Addi_Sum DB 'The sum is '
SumASCII DB 2 DUP('0'),'$' ; 两数之和的2位ASCII数字

Exit_Mark DB 0

; Subroutine
GLOBAL Get_Num:NEAR ;从键盘接受一个1位数
Get_Num Proc Near
MOV AH,9
INT 21H
InputChr: MOV AH,1
INT 21H
CMP AL,27 ;Esc?
JZ Set_Exit
CMP AL,'0'
JB InputChr
CMP AL,'9'
JG InputChr
AND AL,0FH
RET
Set_Exit: INC Exit_Mark ;置退出标志
Ret
Get_Num EndP

Begin: MOV AX,3
INT 10H ;设置视频显示方式为80x25 16色文本方式
LEA DX,First_Num ;提示输入第一个1位数字符串地址
Call Get_Num ;从键盘接受一个1位数
CMP Exit_Mark,1
JZ Exit_Proc ;若退出标志置位,则结束程序
MOV SumASCII,AL ;保存第一个1位数
MOV AH,3
XOR BH,BH
INT 10H ;取光标位置
INC DH ;行号增1
XOR DL,DL ;列号置零
XOR BH,BH
MOV AH,2
INT 10H ;置光标位置为下行首列
LEA DX,Second_Num ;提示输入第二个1位数字符串地址
Call Get_Num ;从键盘接受第二个1位数
ADD AL,SumASCII ;两个1位数相加
CBW
MOV BL,10
DIV BL ;和除以10,商数存于AL,余数存于AH
OR AX,3030H ;把商数和余数转换成ASCII码
CMP AL,'0'
JG Disp_Sum ;若商>0,显示两数之和
MOV AL,' ' ;若商=0,十位置空格
Disp_Sum:
MOV WORD PTR SumASCII,AX
MOV AH,3
XOR BH,BH
INT 10H ;取光标位置
INC DH ;行号增1
INC DH ;行号增1
XOR DL,DL ;列号置零
XOR BH,BH
MOV AH,2
INT 10H ;置光标位置为下行首列
LEA DX,Addi_Sum ;显示两数之和
MOV AH,9
INT 21H

Exit_Proc:MOV AX,4C00H ;结束程序
INT 21H

Addition ENDS
END Start
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-10
已知两个一位十进制数存放在20H,30H单元中
程序:MOV A,20H
ADD A,30H
MOV 50H,A
结果存放50H单元中
第2个回答  2009-04-08
假设R11中存放加数9(十六进制09H),R2中存放被加数8(08H)
R1,R2中最大存放数为:256无符号十进制数据
MOV A,R1
ADD A,R2(和大于256时使用ADDC查看C看有无溢出)
A中存放的便是结果了
第3个回答  2009-04-08
code segment
assume cs:code
start:mov ah,1
int 21h
mov bl,al
mov dl,'+'
mov ah,2
int 21h
mov ah,1
int 21h
mov dl,'='
add bl,al
mov dl,bl
mov ah,2
int 21h
mov dl,bl
int 21h
;;;;;;;
mov ah,4ch
int 21h
code ends
end start
相似回答