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

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

微机原理软件实验

实验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

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

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

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:

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)

实验2 两个数相乘的实验(无符号数相乘)

实验内容:实现十进制数的乘法。要求被乘数和乘数均以ASCII码形式各自顺序存放在内存中,乘积在屏幕上显示出来。完整代码如下:

DATAS SEGMENT

;此处输入数据段代码

STRING1 DB'the output is:','$'

DATA1 DB 31H,32H,33H

DATA2 DB 35H,36H

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

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

MOV AX,DATAS

MOV DS,AX

;此处输入代码段代码

MOV DL,10

MOV AL,DATA1[0];AL=31H

SUB AL,30H ;AL=01H

MUL DL;乘10 ;AL=10

ADD AL,DATA1[1];AL=10 +32H

SUB AL,30H ;AL=10 +32H-30H=12

MUL DL ;AL=120

ADD AL,DATA1[2];AL=120+33H

SUB AL,30H ;AL=120+33H-30H=123

MOV BL,AL ;BL=AL

;

MOV AL,DATA2[0];AL=35H

SUB AL,30H ;AL=5

MUL DL;乘10 ;AL=50

ADD AL,DATA2[1];AL=50+36H

SUB AL,30H ;AL=50+36H-30H=56

MUL BL ;AX=123x56=6888

SUB DX,DX;DX清零

MOV BX,1000

DIV BX;(DX,AX)/1000,商6在AX中,余数888在DX中PUSH DX

MOV DL,AL

ADD DL,30H

MOV AH,02 ;打印最高位6

INT 21H

POP DX

相关文档
最新文档