微机原理与汇编语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DATA SEGMENT
D1DB10DUP(?);定义10个字节的空间后面存放余数
D2DB'please input ONE=$'
D3DB'out put=$'
D4DB'please input TWO=$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA DX,D2
MOV AH,09H
INT21H;输出D2字符串
MOV AH,01H
INT21H;输入第一个数的千位
SUB AL,30H;
MOV BL,10
MUL BL
MOV CX,AX;将十位保存在BX中
MOV AH,01H
INT21H;输入第一的数的十位
SUB AL,30H;将十位转换位十进制
MOV BL,10
MUL BL
MOV CX,AX;将十位保存在BX中
MOV AH,01H
INT21H;输入第一的数的十位
SUB AL,30H;将十位转换位十进制
MOV BL,10
MUL BL
MOV CX,AX;将十位保存在BX中
MOV AH,01H
INT21H
SUB AL,30H;输入个位放在AL中
CBW;把AL扩展到AH,这样十位才能加个位
ADD CX,AX
;输入的2位数放在CX中,第一个数输入完毕,重复上面操作输入第2个数,放AX中,如下
LEA DX,D4
MOV AH,09H
INT21H;输出D4字符串
MOV AH,01H
INT21H;输入第2个数的十位
SUB AL,30H;将十位转换位十进制
MOV BL,10
MUL BL
MOV BX,AX;将十位保存在BX中
MOV AH,01H
INT21H
SUB AL,30H;个位放在AL中
CBW
ADD AX,BX;第2次输入的2个数放在AX中
ADD AX,CX;2个数相加放在AX中,AX存放2个数的和
LEA SI,D1;将A1的地址给DI
XOR CX,CX
MOV BX,16;求16进制,要除16
;下面采用除16取余数,商为0时退出
ABC:
INC CL;记余数个数,为输出循环次数条件
CWD;将AX扩展到DX,除法要求被除数位数是除数的2倍
DIV BX
MOV[SI],DL;将余数保存在第一个存储单元中
CMP AX,0
JZ EXIT;判断商是否为0.为0则跳到EXIT处
INC SI;地址+1,指向下一个地址
JMP ABC;跳到RRR处
EXIT:MOV DL,10
MOV AH,02H
INT21H;输出换行
MOV DL,13
MOV AH,02H
INT21H;移动倒本行第一个字符
LEA DX,D3
MOV AH,09H
INT21H;输出D3字符串
RRR:CMP[SI],10
JB FFF;判断最后一个余数是否小于10,小于跳到FFF处
ADD[SI],7;10以上的数据要转化成ABCDEF,ABCDEF的ASCII码要比数字ASCII码大7,可以看书对照ASCII码表
FFF:MOV DL,[SI]
ADD DL,30H
MOV AH,02H
INT21H;倒着输出余数
DEC SI;地址减1,指向上一个地址,因为是倒记法
LOOP RRR;循环倒FFF处,循环次数由CL决定
MOV AH,4CH
INT21H;返回DOS调用
CODE ENDS
END START;有什么问题可以继续提下,我在程序里面加个换行和提示,这样输出好看些
DATAS SEGMENT;数据段
DATA1DB31H,32H,38H,34H,37H;定义DATA1为被加数
DATA2DB34H,35H,39H,37H,31H;定义DATA2为加数
DATAS ENDS
STACKS SEGMENT;堆栈段
STA DB64DUP(0);(伪指令)为STA预留64个字节的存储空间
SP_TOP DB0;定义SP_TOP单元的数值为0
STACKS ENDS
CODES SEGMENT;代码段
ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX;设置数据段
MOV AX,STACKS
MOV SS,AX;设置堆栈段
LEA SP,SP_TOP;设置栈顶指针
MOV SI,OFFSET DATA1;把DATA1偏移量地址赋予SI
MOV BX,05;
CALL DISPL;显示被加数
CALL CRLF;回车、换行
MOV SI,OFFSET DATA2;把DATA2偏移量地址赋予SI
MOV BX,05;
CALL DISPL;显示加数
CALL CRLF;回车、换行
MOV DI,OFFSET DATA1;把DATA1偏移量地址赋予DI
CALL ADDA;调用ADDA子程序,实行加法运算