汇编语言习题以及答案
- 格式:doc
- 大小:49.00 KB
- 文档页数:6
习题
4-4.试编程序将内存从50000H到5FFFFH的每个单元均写入数55H,并再逐个单元读出比较,看写入的与读出的是否一致。若全对,则将AL置0;只要有错,则将AL置0FFH。
解:
START:MOV AX,5000H
MOV DS,AX
MOV SI,0
MOV CX, 0FFFFH
LOOP1: MOV BYTE PTR [SI], 55H
MOV AL, [SI]
CMP AL, 55H
…
JNZ LOOPERR
LOOP2: INC SI
LOOP LOOP1
MOV BYTE PTR [SI], 55H ;最后一个单元
MOV AL, [SI]
CMP AL, 55H
JNZ LOOPERR
MOV AL, 0 ;全对
JMP LOOPOUT
LOOPERR: MOV AL, 0FFH
>
LOOPOUT: NOP
4-5.编写一个子程序,对AL中的ASCII字符添加偶校验位(bit7),即:使AL中的“1”的个数为偶数。
解:
ADDPARITY PROC NEAR
AND AL, 7FH
JP ADDEXIT
OR AL, 80H
ADDEXIT: RET
&
ADDPARITY ENDP
4-6.利用上题的子程序,编程对内存物理地址10000H开始的1024个单元的ASCII字符加上偶校验位。
解:
START:MOV AX,1000H
MOV DS,AX
MOV SI,0
MOV CX, 1024
LOOP1: MOV AL, [SI]
CALL ADDPARITY
[
MOV [SI], AL
INC SI
LOOP LOOP1
4-7、试写一子程序,完成对一个8位无符号数乘6的操作。要求:(1)只能用传送、加法及移位指令;(2)入口参数(即8位无符号数)放于AL中,出口参数(即乘6后的结果)放于AX。
解:
MULTI6 PROC NEAR
PUSH BX
MOV AH, 0
]
SHL AX, 1 ;乘2
MOV BX, AX
SHL AX, 1 ;乘4
ADD AX, BX ;乘6
POP BX
RET
MULTI6 ENDP
4-8.给定如下程序片段:
\
START: MOV AX, 1000H,
MOV SS, AX
MOV SP, 000FH
MOV AX, 1000H
PUSH AX
MOV BX, 5439H
PUSH BX
CALL NEAR PTR SUBRT
POP AX
STOP0: HLT
]
SUBRT: PUSH BP
MOV BP, SP
VAAX:MOV AX, [BP+4]
ADD AX, 456AH
MOV [BP+4], AX
POP BP
RET 4
问:(1)程序执行到标号为SUBRT处的指令时,SP = (2)执行完标号为VAAX的MOV指令后,AX = (3)执行到标号为STOP0处的指令时:SP = AX = BX = CF= SF= OF=
解:
(1)程序执行完标号为SUBRT处的“PUSH BP”指令后,SP=0007H
(2)[
(3)执行完标号为VAAX的MOV指令后,AX =5439H
(4)程序执行到标号为STOP0处的指令时(实际执行“HLT”指令之前):SP = 0011H
AX = 99A3H
BX = 5439H
以及以下标志寄存器的内容:
CF = 0
SF = 1
OF = 1
[
4-9.自符号地址为MARK开始的内存缓冲区中,存有100个学生的某门课的考试成绩。试找出成绩不低于80分以及成绩低于60分的学生个数,同时求出最高的成绩分及最低的成绩分数,并将它们分别存于符号地址为PST、FST、MAXMK及MINMK的四个单元中。要求写出完整的数据段及代码段。
解:
DATA SEGMENT
MARK DB 100 DUP()
PST DW 0
FST DW 0
MAXMK DB 0
MINMK DB 100
/
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV CX, 100
MOV BX, OFFSET MARK
AGAIN: MOV AL, [BX]
CMP AL, MAXMK
`
JC HIGHL
MOV MAXMK, AL ; update highest mark
HIGHL: CMP AL, MINMK
JNC MKCHK
MOV MINMK, AL ; update lowest mark
MKCHK: CMP AL, 60
JNC HIGHMK
INC FST ; increase the no. of students whose mark < 60
JMP CHKFH
HIGHMK: CMP AL, 80
]
JC CHKFH
INC PST ; increase the no. of students whose mark >= 80
CHKFH: INC BX
LOOP AGAIN
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
]
4-10.编写一段程序,接收从键盘输入的10个数(输入回车符后结束),然后将这些数按位取反后存于BUFF开始的缓冲区中。
解: