简单的8086汇编程序(已加入详细注释)一位数加减乘除运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单的8086汇编程序(已加入详细注释)一位数加减乘除运

;波波安注释
;注意分支结构,理清程序思路,一般出现CMP、JE等的地方都是分支。

;字体设置不同可能会出现编排结构混乱,我使用的字体是Times New Roman,常规,小二,大写
DISPC MACRO CHAR;宏定义
MOV DL,CHAR
MOV AH,2
INT 21H
ENDM
DATA SEGMENT;数据段
S DB 'Please input data:$'
X DB 0
Y DB 0
C DB 0
Z DB 0,0
DATA ENDS
CODE SEGMENT;代码段
ASSUME CS:CODE,DS:DATA,SS:DATA;说明
;代码段开始
START: MOV AX,DATA
MOV DS,AX
;输入第一个数
L1: LEA DX,S;传送字符串的偏移地址
MOV AH,9;显示字符串
INT 21H
CALL INPUT;调用子函数
MOV X,AL;第一个数据输入成功,存入X
;输入运算符
L2: MOV AH,1
INT 21H ;键盘输入并回显
;分支
CMP AL,'+'
JE L3;相等,则跳转。

即若输入为“+”则跳转CMP AL,'-'
JE L3
CMP AL,'*'
JE L3
CMP AL,'/'
JE L3
DISPC 8;输入错误,执行错误处理
DISPC 20H
DISPC 8
JMP L2;跳转回L2继续输入
L3: MOV C,AL;运算符存入C
CALL INPUT;接着输入第二个数
MOV Y,AL;第二个数存入Y
DISPC '=';显示“=”
;运算符判断
;分支
CMP C,'+';判断是否为“+”
JNE L4;不等,则跳转。

即不为“+”则跳转L4
MOV AL,X;为“+”,则执行加法操作。

算术运算中目的操作数一般为寄存器(AX)。

ADD AL,Y
MOV Z,AL;结果存入Z
JMP L9;转到L9,显示结果
L4: CMP C,'-';判断是否为“-”
JNE L6;不等,则跳转,继续判断
MOV AL,X;为“-”,则执行减法操作
SUB AL,Y
MOV Z,AL;结果存入Z
CMP Z,0;比较结果是否小于0
JGE L5;不小于0,转到L9,直接显示。

;结果小于0,为负数,把负数转换成正数,显示时加上“-”。

NEG Z;NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数。

DISPC '-';负数,先显示“-”
L5: JMP L9
L6: CMP C,'*';判断是否为“*”
JNE L7;不等,则跳转,继续判断
MOV AL,X;为“*”,则执行乘法操作。

被乘数放入AL中
MUL Y;AL/Y--->AL
MOV Z,AL;结果存入Z
JMP L9;显示结果
L7: MOV AL,X;运算符为“/”,执行除法操作
MOV AH,0;除法中,AL存商,AH中存余数
DIV Y
OR AX,3030H;转换为ASCII码
PUSH AX;压栈,保存结果,以免被破坏
DISPC AL;显示除法结果的商
POP AX;出栈,取出结果
CMP AH,'0';判断余数是否为0
JE L11;余数为0,转L11,回车换行
PUSH AX;余数不为0,保存结果免被破坏。

MOV CX,6;循环6次,显示“......”
L8: DISPC '.'
LOOP L8
POP AX;取出结果,显示余数
DISPC AH
JMP L11;显示完毕,回车换行
;结果处理并显示
L9: MOV AL,Z
AAM;调整为非压缩BCD码,即把十位和个位拆开,以便显示
OR AX,3030H;转换为ASCII码
CMP AH,'0';乘法结果可能
为两位,这里要单独处理
JE L10;结果高位为0,则跳转到L10,只显示低位。

PUSH AX;判断,结果为两位以上,处理高位并显示
DISPC AH
POP AX
L10: DISPC AL
;注意(程序执行到此处,程序并没有结束,因为这里并不是调用的子函数。

还要接着执行下面的L11和EXIT直至退出)
L11: DISPC 0DH;回车换行
DISPC 0AH
JMP L1
EXIT: MOV AH,4CH;结束退出
INT 21H
;数据输入子函数
INPUT PROC;?
I1: MOV AH,1
INT 21H;键盘输入并回显,输入存入AL中
CMP AL,0DH;0DH回车
JE EXIT;若ZF=1,则跳转到EXIT处,即判断输入是否为回车,若为回车则退出
CMP AL,'0'
JAE I3;不小于0,则跳转I3继续判断,若小于0,则执行错误处理
I2: DISPC 8;8H退格,宏定义(输入错误处理)
DISPC 20H;20H,空格
DISPC 8
JMP I1;转回I1继续输入
I3: CMP AL,'9'
JA I2;大于9,输入错误,跳转I2
AND AL,0FH;输入无误,进行数据处理,屏蔽高四位,把ASCII 码转换为相应的数值
RET;子程序结束
INPUT ENDP;子函数结束
CODE ENDS;代码段结束
END START;程序结束。

相关文档
最新文档