微机原理:顺序、分支、循环、子程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[公司名称]
实验二
顺序、分支、循环、子程序设计微机原理上机实验
[作者姓名]
[日期]
预习报告
零、相关知识
1,LEA指令和MOV指令的区别
一、顺序结构
计算m*n-w,最终结果保存在AX
其中m=12, n=12, w=4
最终结果为AX=008CH=140D
name "sequence strcture"
org 100h
MOV AX, 1000H
MOV DS, AX
MOV SI, 1000H
MOV [SI], 12
MOV [SI+1], 12
MOV [SI+2], 4
MOV AL, [SI]
MOV BL, [SI+1]
MUL BL
MOV BX, 0
MOV BL, [SI+2]
SUB AX, BX
HLT
二、分支结构
在DS数据段偏移地址为DATA开始的顺序80个单元中,存放着某班80个同学的微机原理考试成绩。现欲编程序统计>=90、89~70、69~60和<60分的人数,并将统计的结果存放在当前数据段偏移地址为BUFFER的顺序单元中
name “branch structure”
START:
MOV DX, 0000H
MOV BX, 0000H
MOV CX, 80
LEA SI, DATA
LEA DI, BUFFER
GOON:
MOV AL, [SI]
CMP AL, 90
JC NEXT3
INC DH
JMP STOR
NEXT3:
CMP AL, 70
JC NEXT5
INC DL
JMP STOR
NEXT5:
CMP AL, 60
JC NEXT7
INC BH
JMP STOR
NEXT7:
INC BL
STOR:
INC SI
LOOP GOON
MOV [DI], DH
MOV [DI+1], DL
MOV [DI+2], BH
MOV [DI+3], BL
HLT
三、循环结构
在DS所决定的数据段,从偏移地址BUFFER开始顺序存放100个无符号16位数。现欲编程序将这100个数按大小顺序排序(以下程序使用的是快速排序算法,也可以使用冒泡排序,嵌套两层循环)
name “circle structure”
LEA DI, BUFFER
MOV BL, 99
NEXT0:
MOV SI, DI
MOV CL, BL
NEXT3:
MOV AX, [SI]
ADD, SI, 2
CMP AX, [SI]
JNC NEXT 5
MOV DX, [SI]
MOV [SI-2], DX
MOV [SI], AX
NEXT5:
DEC CL
JNZ NEXT3
DEC BL
JNZ NEXT0
HLT
四、子程序
编写程序,完成将一组BCD数转换成16位二进制数。(BCD数转换成16位二进制数用子程序实现)
下面提供三种方案,分别用寄存器、储存器和堆栈传递参数
①使用寄存器传递参数
name "text subprogram using register"
STACK SEGMENT STACK
DB 256 DUP(?)
STACK ENDS
DATA SEGMENT
BCD1 DB 07H, 06H, 07H, 02H, 03H
LENG1 DB 5
RESULT DW ?
DATA ENDS
CODEM SEGMENT
ASSUME CS:CODEM, DS:DATA, SS:STACK
START:
MOV AX, DATA
MOV DS, AX
LEA SI, BCD1
MOV CX, LENG1
CALL FAR PTR BCD-16B
MOV RESULT, DX
MOV AH, 4CH
INT 21H
CODEM ENDS
CODES SEGMENT
ASSUME CS:CODES
;the part of subprogram
BCD-16B PROC FAR
PUSH BX
PUSH AX
ADD SI, CX
MOV DX, 0
BCDL:
DEC SI
PUSH CX
MOV AL, [SI]
AND AL, 0FH
CBW
MOV BX, AX
MOV AX, DX
MOV CX, 10
MUL CX
MOV DX, AX
ADD DX, BX
POP CX
LOOP BCDL
POP AX
POP BX
RET
BCD-16B ENDP
CODES ENDS
END START
②使用储存器传递参数
name "text subprogram using store" STACK SEGMENT STACK
DB 256 DUP(?)
STACK ENDS
DATA SEGMENT
BCD1 DB 07H, 06H, 07H, 02H, 03H
ADSEG DW ?
ADOFST DW ?
LENG1 DW ?
RESULT DW ?