微机软件实验习题与答案(完整版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理软件实验
实验1两个多位十进制数相加的实验
实验内容:将两个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA必首的5个内存单元中(低位在前),结果送回DATA 攸t。完整代码如下:
DATAS SEGMENT
;此处输入数据段代码
STRING1 DB 'input the first number:' ,'$'
STRING2 DB 13,10,nput the second number:' ,'$'
STRING3 DB 13,10the output is:' ,'$'
DATA1 DB 6 DUP(00H),'$'
DATA2 DB 6 DUP(00H)'$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
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
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
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 ;加法调整指令,可使两个ASCIB直接相加
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
g DCsOa sr *『4 Zpu ipe^A. WDU W K Ffsk*
0.
实验2两个数相乘的实验(无符号数相乘)
实验内容:实现十进制数的乘法。要求被乘数和乘数均以ASCII码形式各自顺序存放在内存中,乘积在屏幕上显示出来。完整代码如下:
DATAS SEGMENT
;此处输入数据段代码
STRING1 DB 'the output is:' ,'$'
DATA1 DB 31H,32H,33H
DATA2 DB 35H,36H
DATAS ENDS
;此处输入堆栈段代码
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
J
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