
; 下面的程序是16位汇编,编译通过,运行正确。
; Program Name: AdditionASM
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
输入格式必须是A +或 - 或/或 B =
;按Enter年底计算数(0255)
DATAS段
所述DB 20 dup的(?)
DB'CHU痤勒','$'
DATAS ENDS
CODES分部
ASSUME <CS:CODES过,DS的人:DATAS START如下:
MOV AX,DATAS
MOV DS,AX
。JMPA
KAISHI:
;回车换行符
MOV DL,0DH MOV的AH,02H INT 21H
MOV DL,0AH
INT 21H
的LEA SI中,X
SUB AX的,AX
SUB的BX,BX
SUB CX,CX
SUB DX,DX
;输入数字
- 答:MOV AH,01H
INT 21H
CMP AL,0DH
> JZ
的CMP AL,30H
JBB
的CMP AL,3AH
JNB F
SUB AL,30H
MOV CH,AL的
> MOV AL,BL
MOV BL,0AH
的MUL BL
ADD AL,CH
MOV BL,AL的
。JMP
;的判断+ - / =
B:的CMP AL,2BH
JNZ MOV X [SI],BL
INC的SI
MOV CL,0H
AND BL, 0
JMPA
K:的CMP AL,2DH
JNZe
MOV X [SI],BL
INC的SI
MOV CL,01H
title>和BL,0 JMPA
D:的CMP AL,2AH
JNZê
MOV X [SI],BL
INC SI
MOV CL,02H
AND BL,0
JMPA
E:的CMP AL,2FH
JNZ
MOV X [的SI],BL
INC的SI
,03H MOV CL
和BL,0
JMPá
;计算
F:MOV [SI],BL
CMP AL,3DH BR /> JNZ
的LEA SI中,X
MOV的AL中,X [SI]
INC的SI
MOV BL中,X [SI]
CMP CL,0 BR /> JNZ
ADD AL,BL
JMP
G:的CMP CL,01H
JNZ SUB AL,BL
JMP J BR /> H:的CMP CL,02H
JNZ我
AND AH,0
的MUL BL
JMP
我:AND AH,0
CMP CL,03H
DIV BL
;输出
J:和AH,0
的CMP AL,100
JB ER
MOV的BL,100
> DIV BL
MOV CL,AH
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
MOV AL,CL BR /> ER“:●CMP AL,10个
JB毅
MOV BL,10
AND AH,0
DIV BL
ADD AL,30H
MOV DL,AL
MOV CL,AH
MOV的AH,02H
INT 21H
MOV AL,CL
YI“:ADD AL,30H
MOV DL的, AL
MOV的AH,02H
INT 21H
JMP KAISHI
T:LEA的DX,Y。 MOV AH,09H
INT 21H
JMP KAISHI
L:MOV的AH,4CH的
INT 21H
CODES ENDS ”END START“
嘿嘿 八位二进制数相加的程序 应该设计成一个子程序ADD8:
程序入口为2个: 累加器A(存放被加数)
寄存器R5(存放加数)
程序出口1个: ( R3)(R4)=加法的和(高8 位)、(低8 位)
楼上的老兄设计的八位二进制数相加的程序,是存在错误的,没有考虑进位(即2个数相加超过256的情况)
ADD8: ADD A,R5
MOV R4,A
ADDC A,#0
MOV R3,A
RET
呵呵 满意 就选满意回答
以上就是关于试编写汇编语言程序完成两个1位十进制数的加法功能全部的内容,包括:试编写汇编语言程序完成两个1位十进制数的加法功能、如何用汇编语言编一个计算加法的程序、单片机 八位二进制数相加的程序 汇编语言等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)