中国石油大学微机原理期末考试微机编程题总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1已知在数据段中定义变量VAL1,其中装入了100个字节的数据;VAL2为数据段中定义的可以存储100个字节的变量。要求将VAL1中的内容取负(即,正数变负数,负数变正数,零不变)后传送到VAL2中。画出程序流程图,并编写完整的8086汇编程序。数据段可采用以下定义形式:
DATA SEGMENT
VAL1DB100 DUP(?)
VAL2DB 100 DUP(?)
DATA ENDS
答:流程图:(2分)
程序(4分):结构1分,初始化1分,循环体1分,DOS接口1分。每部分可按0.5分进行得扣分。
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV ES,AX
CLD
MOV SI,OFFSET VAL1;LEA SI,VAL1
MOV DI,OFFSET VAL2;LEA DI,VAL2
MOV CX,100
LP:N EG[SI]
MOVSB
LOOP LP
MOV AH,4CH
INT21H
CODE ENDS
END START
注:循环体内也可以使用减法指令、MOV指令、INC指令等。只要完成取负及数据传送即可。与DOS接口也可采用子程序结构。
2设在内存缓冲区中有一数据块STRDATA,存放着30 个字节型补码数据。要求画出程序流程框图,编写完整的汇编语言源程序,找出其中的最大数,存入RESULT 单元中,并在关键语句后加适当注释。
答:
DSEG SEGMENT
STRDATA DB 30 DUP(?) ;定义数据串
RESULT DB DUP(?)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX, OFFSET STRDATA ;数据串首址→BX
MOV AL, [BX]
MOV CX, 29 ;数据长度→CX
L1: INC BX ;地址指针加1
CMP AL, [BX] ;和当前数比较
JGE L2 ;当前数大
MOV AL, [BX] ;当前数为最大数
L2: DEC CX ;数据串长度减1
JNZ L1 ;串未完,继续
MOV RESULT, AL ;保存最大数在RESULT
MOV AH,4CH
INT 21H
CSEG ENDS
END START
三、(10 分)设在内存缓冲区中有一数据块BLOCK,存放着50 个字节型数据。要求画出程序流程框图,编写完整的汇编语言源程序,统计出其中偶数的个数,结果存入RESULT 单元中。【答案】
程序流程框图(4分);完整程序(6 分);
DATA SEGMENT
BLOCK DB 50 DUP(?)
RESULT DB ?
DATA ENDS (1 分)
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX, OFFSET BLOCK
MOV CX, 50
MOV AH,0 (1 分)
L1: MOV AL, [BX]
TEST AL,01H (1 分)
JNZ L2
INC AH
L2: INC BX
DEC CX
JNZ L1 (1 分)
MOV RESULT, AH (1 分)
MOV AH,4CH
INT 21H
CODE ENDS
END START (1 分)
四、(10分)设在内存缓冲区中有一数据块DATA,存放着20个带符号的字节型数据,对这20个数据进行以下处理:去掉其中的最大值,然后对剩余的19个数求和,并将和送入SUM 单元。要求画出程序流程框图,编写完整的汇编语言源程序。注:不考虑求和是否溢出。
DATA SEGMENT
DATA DB
20 DUP(?)
SUM DB 0 DATA
ENDS (1分) CODE SEGMENT
ASSUME CS:CODE, DS:DATA START:
MOV AX,DATA
MOV DS,AX MOV BX, OFFSET DATA
MOV CX, 20
MOV AL, [BX] (1分) MOV AH,0 L1: ADD AH,[BX] (1分)
CMP AL,[BX] JG L2 (或JGE L2) (1分) MOV AL,[BX]
L2: INC BX
DEC C X JNZ
L1 (1分)
SUB AH,AL
MOV SUM,AH (1分)
MOV AH,4CH
INT 21H
CODE ENDS ENDSTART
结束
数据块DATA 定义 [BX]→AL 数据块首地址→BX 数据块长度→CX 初值0送SUM [BX]→AL
BX+1→BX
SUM=SUM-AL
AL>[BX]?
20个数判断完了?
N
Y
N
Y
开始
SUM=SUM+[BX]