微机原理与汇编语言

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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子程序,实行加法运算

相关文档
最新文档