微机软件实验习题与答案(完整版)

更新时间:2023-09-30 19:16:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

微机原理软件实验

实验1 两个多位十进制数相加的实验

实验内容:将两个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。完整代码如下: DATAS SEGMENT ;此处输入数据段代码

STRING1 DB 'input the first number:','$' STRING2 DB 13,10,'input the second number:','$' STRING3 DB 13,10,'the output is:','$' DATA1 DB 6 DUP(00H),'$' DATA2 DB 6 DUP(00H),'$' DATAS ENDS

STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS

CODES SEGMENT

1

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX

;此处输入代码段代码 LEA SI,DATA1 LEA DI,DATA2 L0:

LEA DX,STRING1;打印字符串STRING1 MOV AH,09 INT 21H

INPUT1: ;输入第一个数 MOV AH,01;输入字符至AL中 INT 21H CMP AL,'/' JE L1 MOV [SI],AL INC SI

2

JMP INPUT1 L1:

LEA DX,STRING2;打印字符串STRING2 MOV AH,09 INT 21H

INPUT2: ;输入第二个数 MOV AH,01;输入字符至AL INT 21H CMP AL,'/' JE L2 MOV [DI],AL INC DI JMP INPUT2 L2:

MOV SI,0

CLC;清空进位标志位CF MOV CX,6

3

PLUSE: ;相加 ;SUB DATA1[SI],30H ;SUB DATA2[SI],30H

;这里不能使用这两条指令,因为如果DATA1[5]=00H,00H-30H需要借位相减,使CF=1

MOV AL,DATA1[SI] ADC AL,DATA2[SI]

AAA ;加法调整指令,可使两个ASCII数直接相加 MOV DATA1[SI],AL;和赋给DATA1[SI] INC SI LOOP PLUSE L3:

LEA DX,STRING3;打印字符串STRING3 MOV AH,09 INT 21H MOV CX,6 MOV SI,6 SHOW:

4

DEC SI

CMP DATA1[SI],00H JE SHOW SHOW2:

MOV DL,DATA1[SI] ADD DL,30H MOV AH,02 INT 21H CMP SI,0 JE L4 DEC SI

JMP SHOW2

L4: MOV AH,4CH INT 21H CODES ENDS END START

运行结果如下:输入为低位在前,即输入1234和99999相加实际上是4321和99999相加(即:4321+99999=104320)

5

本文来源:https://www.bwwdw.com/article/gc2d.html

Top