微计算机原理(第2版)第四章课后习题答案 潘名莲 马争 丁庆生 编著讲解

更新时间:2023-04-29 03:30:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第四章 汇编语言程序设计

4-1 汇编语言程序设计的几个步骤是: 解:编写汇编语言程序的过程基本上与编写高级语言程序的过程是相同的。 (1)从实际问题抽象出数学模型;

(2)确定解决该数学模型的方法,选择最佳算法;

(3)画出流程图,根据算法把解决问题的思路和方法用图形表示出来; (4)分配内存工作单元和寄存器; (5)根据流程图编制程序; (6)上机调试,检测 和排错。

4-2 计算下列表达式的值(A1=50H ,B1=20,G1=2)。 (1)A1*100+B1 (2)A1 MOD G1+B1 (3)(A1+2)*B1-2 (4)B1/3 MOD 5 (2)(5)(A1+3 )*(B1 MOD G1) (6)A1 GT G1 (7)B1 AND 7 (8)B1 SHL 2+G1 SHR 1 解:(1)5020 (2)20 (3)1038 (4)1 (5)0 (6)0FFFFH (7)04H (8)51H

4-3 已知数据段定义如下,设该段从03000H 开始。 DSEG SEGMENT

ARRAY1 DB 2 DUP (0, 1,?) ARRAY2 DW 100 DUP (?) FHZ EQU 20H

ARRAY3 DB 10 DUP (0, 1, 4 DUP(2), 5) DSEG ENDS

试用分析运算符OFFSET 、SEG 、LENGTH 、TYPE 、SIZE 求出ARRY1、ARRY2、ARRY3的段、偏移量和类型,以及它们的 LENGTH 和SIZE 解:

4-4 (略)

4-5 以下语句汇编后,变量CON1,CON2和CON3的内容分别是多少? N1=10 N2=5 N3=3 CON1 DB (N1 AND N2 OR N3) GE 0FH CON2 DW (N2 AND N1 XOR N3) LE 0FH CON3 DB (N1 MOD N3) LT (N2 SHR1) 解:如图所示

4-6 设有一个已定义的数据段如下:

DA TA SEGMENT

V AR1 DB ?, ?

V AR2 DB ?, ?

ADR DW V AR1,V AR2

DA TA ENDS

若要使ADR+2的字单元中存放内容为“0022H”,上述空白处应填入什么语句?

解:ORG 0020H

4-7 下述程序段执行后,寄存器CX,SI的内容是多少?

ARRY DW 20 DUP (5)

XOR AX, AX

MOV CX, LENGTH ARRY

MOV SI, SIZE ARRY-TYPE

解:(CX)=14H (SI)=26H

4-8 试定义一个结构,它应包括一个学生的下列信息:姓名、学号、及3门课程的成绩。然后给出3条机构预置语句,将3个学生的情况送入3个结构变量中。

解:

STUD STRUC ;定义一个结构,结构名为STUD NAME1 DB ‘’;姓名字段

NUM DB ? ;学号字段

SCOR DB 3 DUP (?) ;三门课程成绩字段

STUD ENDS

DA TA SEGMENT ;在数据段中通过三个结构变量引用,并赋值STUD1 STUD <’ZHU MEING’, 3, 88, 79, 91> ;结构变量名STUD1

STUD2 STUD <’ZHANG XING’, 15, 78, 83, 77> ;结构变量名STUD2

STUD3 STUD <’W ANG Y AN’, 12, 91, 92, 93> ;结构变量名STUD3

DA TA ENDS

4-9 试定义一条宏指令,它可以实现任一数据块的传送(假设无地址重叠),其源地址、目的地址和块长度作为参数处理。

解:

根据要求,子程序的入口参数有:源数据区和目的数据区的首址以及数据块的大小(包含的字节数)。假设参数传递采用固定内存单元传递方式。

SADR——源数据区首地址;

DADR——目的数据区首地址;

SLENG——数据块长度。

程序如下:

SMOVE MACRO SADR, DADR, SLENG

ASSUME CS; CODE

LDS SI, SADR

LES DI, DADR

MOV CX, SLENG

CLD

CMP SI, DI

JA MOVE

STD

ADD SI, CX

DEC SI

ADD DI, CX

DEC DI

MOVE: MOVSB

LOOP MOVE

RET

ENDM

4-10 设V AR1和V AR2为字变量,LAB为标号,试判断下列指令的正误,并改正:(1)ADD V AR1 V A2 (2)JNZ V AR1 (3)SUB AL, V AR1

(4)JMP NEAR LAB (5)JMP LAB[SI] (6)MOV AL, VAR2

解:

(1)错,ADD的两个操作数不能同时为存储单元。

改:MOV AX, V AR1

ADD AX, V AR2

(2)错,JCC后面应该是标号,不应该是变量

改:JNZ LAB

(3)错,两个操作数不匹配

改:SUB AX, V AR1

(4)错,缺少PTR运算符

改:JMP NEAR PTR LAB

(5) 错,LAB与[SI]不能相加

改:JMP FAR PTR LAB 或者JMP WORD PTR [SI]

(6) 错,操作数类型不匹配

改:MOV AX, V AR2

4-11 已知数据定义如下,问L1和L298等于多少?

B1 DB 1,2,3,‘123’

B2 DB 0

L1 EQU $—B1

L2 EQU B2—B1

解:L1=$—B1=7—0=7,L2=B2—B1=6—0=6

4-12 对于下列数据定义,指出以下指令的错误。

A1 DB ?

A2 DB 10

K1 EQU 1024

(1) MOV K1,AX

(2) MOV A1,AX

(3) MOV BX, A1

MOV [BX], 1000

(4) CMP A1,A2

(5) K1 EQU 2048

解:

(1)K1为名称,表示一立即数,不能做为目的操作数。

(2)A1为字节型,类型不匹配

(3)类型不匹配

(4)源和目的操作数不能同为存储器操作数

(5)对已经被EQU定义的K1,在本程序段不能二次定义

4-13 试编程计算Z=5X+3Y+10.已知X,Y均放在数据段,其值由编程者自定。结果Z仍放在数据段。

解:

DA TA SEGMENT

X DB 10

Y DB 5

Z DW ?

DA TA ENDS

STACK SEGMENT PARA STACK ‘STACK’

DW 20H DUP (0)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS: STACK

MAIN PROC FAR

PUSH DS

MOV AX, 0

PUSH AX

START: MOV AX, DA TA

MOV DS, AX

MOV AL, X

MOV BL, Y

MUL BL ;X*5

MOV DX, AX ;转存至DX

MOV AL, Y

MOV BL, 3

MUL BL ;Y*3,积在AX中

ADD AL, 0AH

ADD AX, DX

MOV Z, AX ;结果仍放数据段

RET

MAIN ENDP

CODE ENDS

END START

4-14 (略)

4-15 用查表法将存放于数据段中一个有序的十六进制数串(范围:0~FH)翻译成ASSII码表仍放于数据段中.

解:

DA TA SEGMENT

TAB DB 30H, 31H, 32H, …,36H, 37H

DB 38H, 39H, 41H, …,45H, 46H

HEX DB 6

ASC DB ?

DA TA ENDS

STACK1 SEGMENT PARA ‘ATACK’

DW 20H DUP (0)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DA TA, SS: STACK1

BEGIN: MOV AX, DATA

MOV DS, AX

MOV BX, OFFSET TAB ;设置ASCII码表的基地址在BX中

XOR AX, AX

MOV AL, HEX ;要查找的一位十六进制数在AL中

ADD BX, AX ;基址+偏移置即可计算出该十六进制数ASCII码存放地址MOV AL, [BX] ;该地址单元的内容即为要查找的ASCII码

MOV ASC, AL ;存放ASCII码至ASC字节单元

MOV AH, 4CH

INT 21H

CODE ENDS

END BEGIN

4-16 试编写一程序,把X和Y中的大者存入BIG单元。若X=Y,则把其中之一存入BIG 单元。

解:

DA TA SEGMENT

X DW 1028

Y DW 1446

BIG DW ?

DA TA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DA TA

START: MOV AX, DA TA

MOV DS, AX

MOV AX, X ;取字数据X至AX

MOV BX, Y ;取字数据Y至BX

CMP AX, BX ;比较(AX)和(BX)

JGE STORE ;若(AX)≧(BX),则转STORE处执行

XCHG AX, BX ;若(AX)<(BX),则(AX )(BX)

STORE: MOV BIG, AX ;存结果至BIG字单元

MOV AH, 4CH

INT 21H

CODE ENDS

END START

4-17 试编制一程序,比较STRING1和STRING2所含字符是否完全相同,若相同显示“MA TCH”,反之,则显示“NO MA TCH”。试编写该程序。

解:

DA TA SEGMENT

STR1 DB ‘COMPUT’

STR2 DB ‘CONPUT’

MYES DB ‘MATCH’, 0DH, 0AH, ‘$’

DA TA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DATA

START: MOV AX, DA TA

MOV DS, AX

MOV CX, 6

MOV SI, OFFSET STR1 ;设置字符串STR1的地址指针SI

MOV DI, OFFSET STR2 ;设置字符串STR2 的地址指针DI

CLD

REPE CMPSB ;字符串一致时,重复比较,在两字串中找不相同字符

JNE NO_SAME ;若有不相同字符,则转至NO_SAME处执行,否则顺序执行SAME: MOV DX, OFFSET MYES

MOV AH, 09H ;显示字符串“MA TCH”

INT 21H

JMP END0

NO_SAME: MOV DX,OFFSET MNO

MOV AH, 09H ;显示字符串“NO MATCH”

INT 21H

END0:MOV AH, 4CH

INT 21H

CODE ENDS

END START

4-18 设数据段中有3个变量单元A、B和C中存放有3个数,若3个数都不为0,则求出

此3个数之和存入SUM单元;若有一个数为0,则将其他两个单元也清零。试编写此程序。解:

DA TA SEGMENT

A D

B 5

B DB 4

C DB 3

SUM DW ?

DA TA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DATA

BEGIN: MOV AX, DATA

MOV DS, AX

CMP A, 0

JE OK1

CMP B, 0

JE OK1

CMP C, 0

JNE OK2

OK1:MOV A,0

MOV B, 0

MOV C, 0

JMP OK3

OK2:MOV AH, 0

MOV AL, A

ADD AL, B

ADD AL, C

MOV SUM, AX

OK3:MOV AH, 4CH

INT 21H

CODE ENDS

END BEGIN

4-19 假设已编制好5个乐曲程序,它们的入口地址(含段首址和偏移地址)存放在数据段中的跳跃表MUSICTAB中。试编写一个管理程序,其功能是:根据键盘输入的乐曲编号00~04转到所点乐曲的入口,执行此乐曲程序。

解:

DA TA SEGMENT

MUTAB DW MUSICO, MUSCI1,…,MUSIC4

DA TA ENDS

STACK SEGMENT PARA STACK ‘STACK’

DW 20H DUP (?)

STACK ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DATA

START: PUSH DS

MOV AX, 0

PUSH AX

MOV AX, DATA

MOV DS, AX

LEA BX, MUTAB

NEXT: MOV AH, 1

INT 21H

CMP AL, 30H

JB NEXT

CMP AL, 34H

JA NEXT

SUB AL, 30H

MOV AH, 0

SHL AX, 1

ADD BX, AX

JMP WORD PTR[BX]

MUSIC0:…

MUSIC1:…

MUSIC4:…

RET

MAIN ENDP

CODE ENDS

END START

4-20 试编写一个能循环显示十条新闻标题的控制程序,每条新闻的标题为NEW1、NEW2、…、NEW10,及其入口地址转换表NEWTAB放在数据区中。

解:

DA TA SEGMENT

NEW1 DB ‘NEWS0’, 0DH, 0AH, ‘$’

NEW2 DB ‘NEWS1’, 0DH, 0AH, ‘$’

NEW3 DB ‘NEWS2’, 0DH, 0AH, ‘$’

NEW10 DB ‘NEWS9’, 0DH, 0AH, ‘$’

NEWTAB DW NEW1,NEW2,NEW3,…, NEW10

DA TA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DA TA

MAIN PROC FAR

本文来源:https://www.bwwdw.com/article/2c3q.html

Top