微机原理课后答案7

  • 格式:doc
  • 大小:82.00 KB
  • 文档页数:7

微机部分习题参考答案

2/22/2022 1 第七章部分习题解答

1、指出:(1) MOV AX,VAR;

(2) LEA AX,VAR;

(3) MOV AX,OFFSET VAR

三条指令之间的异同(VAR为数据段的一个变量名称)

解: (1)将VAR的一个字送AX,相当于MOV AX, [VAR]

(2) 将VAR的偏移地址送AX

(3) 将VAR的段内偏移地址送AX,功能与(2)相同。

2、若程序中多次使用某一程序段,问将该程序段设计成子程序和定义成宏指令各有何优缺点?

答:设计成子程序在整个程序占用内存少,但执行时间长;定义成宏指令程序汇编后占用内存多,但执行时间短。

3、下面列出的是一个汇编源程序中的一个程序段。试以图形表示出DATA段中各变量在存储器中的存储位置(标明偏移地址及有关单元的内容,地址与存储单元内容均用十六进制表示);写出CODE段内汇编后的可执行指令。 TABL

DATA SEGMENT

TABL DB‘ABCD’2 DUP(2 DUP(1,2),3)

VAR DW 4 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

ORG 100H

LEB1: LEA SI,TABL

MOV BX,OFFSET VAR

MOV AX,LENGTH VAR

MOV AX,TYPE VAR

MOV AL,SIZE VAR

MOV AH,SIZE TABL

MOV CX,(OFFSET VAR-(OFFSET TABL) VAR

LEA DX,LEB1

解: DATA段各变量的存储情况如右图所示,对CODE段可执行指令注释如下:

LEB1: LEA SI,TABL ;将TABL的偏移地址送SI

MOV BX,OFFSET VAR ;将VAR的偏移地址送BX

MOV AX,LENGTH VAR ;将VAR的项数(4)的送AX

MOV AX,TYPE VAR ;将VAR的符号名类型值02送AX

MOV AL,SIZE VAR ;将为VAR分配的字节(08)送AL

MOV AH,SIZE TABL ; 将为TABL分配的字节(0EH)送AL

MOV CX,(OFFSET VAR)-(OFFSET TABL) ;将OEH送CX

LEA DX,LEB1 将LEB1(100H)送DX。

4、试编写一个程序,将一个包括有20个字的数组中的正负数分开,正、负数个数分别‘A’

‘B’

‘C’

‘D’

1

2

1

2

3

1

2

1

2

3

?

?

?

?

?

?

?

? 微机部分习题参考答案

2/22/2022 1 存放在MM和NN单元中,正、负数分别存放在MM和NN后面的单元中。

解: 设20个字的数组是放在数据段偏移地址为ABC开始的单元中,汇编语言程序如下:

DATA SEGMENT

ABC DW 0A12H,8022H,┅,4000H;(20个数)

MM DW 0, 20 DUP ( ? )

NN DW 0, 20 DUP ( ? )

DATA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DATA, ES: DATA

START: MOV AX, DATA

MOV DS, AX

MOV SI, [ABC] ;SI指向数据区

MOV DI, [MM+1] ;DI指向正数区

MOV BX, [NN+1] ;BX指向负数区

MOV CX, 14H ;数据字个数送CX

KSHQF: MOV AX, [SI]; ;[SI]送AX,

TEST AX, 8000H ;最高位为1转移,否则继续执行

JNZ FSHQ

MOV [DI], AX ; AX 送 [DI], (将AX内容送正数缓冲区)

INC [MM]

JMP GXFL

FSHQ: MOV AX, [BX] ;AX 送 [BX],

INC [NN]

GXFL: INC SI ;修改指针

INC SI

INC DI

INC DI

INC BX

INC BX

LOOP KSHQF

MOV AH, 4CH

INT 21H

CODE ENDS

END START

6、比较两个一字节无符号数X1和X2的大小,把大数存入MAX单元。

解:设两个无符号数是80H和A0H,汇编语言程序如下:

DATA SEGMENT

X1 DB 80H

X2 DB A0H

MAX DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DATA, 微机部分习题参考答案

2/22/2022 1 START: MOV AX, DATA ;为数据段寄存器赋值

MOV DS, AX

MOV AL,X1 ;取数

MOV BL,X2

CMP AL, BL ;比较两数

JC DSH

MOV [MAX],AL ;大数送MAX

JMP JSH

DSH:MOV [MAX],BL ;大数送MAX

JSH:MOV AH,4CH

INT 21H ;返回DOS

CODE ENDS

END START

7、在一个字符串中查找特定的字符‘$’,找到时,将‘$’字符所在单元的地址(偏移地址)存储在一个内存单元DYD中;否则,将‘0’存储在单元DYD中。

解: 分析 把要查找的关键字放到AL寄存器中,DI中存放字符串存储区首址PTRN,CX中存放字符串的字符个数,利用不相等则重复查找指令REPNE SCASB查找

源程序如下:

DATA SEGMENT

CHAR EQU ′$′ ;定义CHAR为`$`字符

PTRN DB ′THIS IS A EXAMPLE $′ ;定义字符串存储区

DYD DW ? ;定义所查找字符的地址存储单元

COUNT EQU 15 ;定义COUNT为字符串字符个数

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV DI,[PTRN] ;字符串存储区首址赋于DI

MOV AL,CHAR ;AL←′$′

MOV CX,COUNT ;CX赋计数器初值

CLD ;DF=0 清除方向标志

REPNE SCASB ;执行重复搜索查找

JZ PASTPR ;找到,转PASTPR

MOV DI,1 ;未找到,使DI=1

PASTPR: DEC DI ;退到 ′$′ 的所在地址

MOV CHRADDR,DI, ;保存地址

MOV AH,4CH

INT 21H

CODE ENDS

END START

8、试编写求两个数和的绝对值的程序。 微机部分习题参考答案

2/22/2022 1 解:设两个数分别为89H和50H,其符号地址分别为ABC1和ABC2,和的绝对值放ABC。源程序如下(该程序适用于求任意两个8位有符号和的绝对值):

DATA SEGMENT

ABC1 DB 85H

ABC2 DB 50H

ABC DB ( ? )

DATA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DATA,

START: MOV AX, DATA ;为数据段寄存器赋值

MOV DS, AX

MOV AL, ABC1

ADD AL, ABC2

TEST AL, 80H

JNZ QB ;和的最高位为1转移(求补)

MOV [ABC], AL

JMP FH

QB: NEG AL

AND AL, 7FH

MOV [ABC], AL

FH: MOV AH, 4CH

INT 21H

CODE ENDS

END START

9、编写完整的程序,比较以存储变量D1和D2表示的两个有符号字数据的大小,并将其中较大的数据存放在BX寄存器中。(设两数分别为-123H和-120H)