汇编语言习题以及答案

  • 格式:doc
  • 大小:49.00 KB
  • 文档页数:6

下载文档原格式

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

习题

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开始的缓冲区中。

解: