微机原理及接口第四章习题答案

2019-08-31 23:51

“微机系统原理与接口技术”第四章习题解答

1. 判断以下说法是否正确,如有错,请说明原因并改正。

(1)伪指令在汇编过程中不会产生二进制代码。

(2)宏和过程的相同之处是都可用于简化源程序书写、精简目标代码。 (3)在计算机中,高级语言通常需要转换为汇编语言后才能执行。 (4)汇编语言程序上机一般包括编辑、汇编、链接和调试几个步骤。 答:(1)正确。

(2)错误。宏不能精简目标代码。

(3)错误。高级语言程序经编译或解释后直接转换为目标代码。

(4)正确。

2. 已知数据和符号定义

A1 DB

A2 DB 8 K1 EQU 100

判断下列指令的正误,并说明错误指令的原因。

(1)MOV (2)MOV (3)MOV

MOV (4)CMP (5)K1

K1,AX A2,AH BX,K1 [BX],DX A1,A2 EQU 200

答:(1)错误。K1是符号常数,在此处相当于立即数100,故不能做目的操作数。

(2)正确。

(3)正确。

(4)错误。A1、A2都是字节变量,相当于两个存储器单元,故不能同时出现在一条指令中直接进行比较。

(5)错误。用EQU定义的符号不能重新赋值,除非已用PURGE解除了原值。

3. 若数据段中有定义

NUM1 EQU

23H

NUM2 DW 0

则指令MOV NUM2,NUM1 的源、目操作数的寻址方式以及指令执行后NUM2+1单元的内容分别是什么?

答:指令MOV NUM2,NUM1的源操作数使用立即数寻址,目的操作数使用直接寻址。指令执行后NUM2+1单元的内容是0。

4. 设DS=6000H,BX=8432H,SS=5000H,SP=3258H,内存69632H~69635H单元的内容依次是00H、11H、22H、33H。 4字节指令 CALL DWORD PTR [BX+1200H] 本身位于2000H:3250H处的双字单元中。当8086执行该指令后转移至子程序入口时,CS、IP、SS、SP各寄存器以及栈顶2个字单元的内容分别是多少?

答:执行结果为CS=3322H,IP=1100H,SS=5000H,SP=3254H,栈顶的两个字即

断点地址,为2000H:3254H。

5. 已知某数据段从物理地址03000H处开始,定义如下:

DSEG SEGMENT ORG 2000H A1 DD 2 DUP(7,1,?) A2 DB 10 DUP(0,4,3 DUP(2),5)

CNT A3

EQU DW

20H

100 DUP(?)

?? 09H 00H 11H 00H ? ? ? ? ‘4’ ‘6’ 0FFH ARA1(0006H) ARA2(000AH) ARA3(0010H) ARA4(0016H) VAR2(0024H) DSEG ENDS

请分别用分析运算符SEG、OFFSET、LENGTH、SIZE、TYPE求出 A1、A2、A3的段基址、偏移量、类型及它们的LENGTH、SIZE。

答:(SEG A1)=0300H,(OFFSET A1)=2000H,(TYPE A1)=4,

(LENGTH A1)=2,(SIZE A1)=2×4=8;

(SEG A2)=0300H,(OFFSET A2)=2018H,(TYPE A2)=1, (LENGTH A2)=10,(SIZE A2)=10×1=60; (SEG A3)=0300H,(OFFSET A3)=2054H,(TYPE A3)=2, (LENGTH A3)=100,(SIZE A3)=100×2=200

6. 已知符号定义语句如下:

ALPHA

EQU

100

BETA EQU 25 GAMMA EQU 2

分别求下列各表达式的值。

(1)ALPHA*4 GT BETA = 100*4 GT 25 = 0FFFFH (2)ALPHA MOD GAMMA+BETA = 100 MOD 2+25 = 25 (3)(BETA / 3)LE 5 =(25 / 3)LE 5 = 0 (4)ALPHA AND BETA = 100 AND 25 = 64H & 19H = 0

(5)GAMMA XOR(BETA EQ 25)= 2?(25 EQ 25) = 0FFFDH

7. 已知数据段定义如下:

DSEG SEGMENT ORG ARA1 ARA2

6 DD DW

110009H

2 DUP(?),‘64’ $-ARA2

ARA2 -ARA1

CONT1 DUP(0FFH)

2 DUP (?, CONT2 DUP (5), ’$’ ) 569AH

0FFH 0FFH 0FFH 0FFH 0FFH ? 05H 05H 05H 05H ‘$’ ? 05H 05H 05H 05H ‘$’ 9AH 56H 41H(‘A’) CONT1 EQU COUT2 EQU ARA3 DB ARA4 DB ORG VAR2

$+2 DW

DB ‘AB’ DSEG ENDS

用示意图说明该数据段的存贮单元分配情况。

42H(‘B’) 题 4-7 图

答:有关存储单元的内容如右图所示。

8. 下列程序是否有错?如有错,请改正。该程序完成什么功能?。

DATA SEGMENT INBUF DW 100 DUP(?)

OUTBUF

ENDS

DW 100 DUP(?)

DATA

CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC MOV

MOV

INIT: MOV LEA

MOV REP

FAR

AX,DATA DS,AX

SI,OFFSET INBUF DI,OUTBUF CX,100 MOVSB

MAIN ENDP CODE ENDS END MAIN

答:改正之后的源程序清单如下(下划波浪线的语句是原来没有的或有错之处):

DATA

DATA CODE

MAIN

SEGMENT INBUF ENDS SEGMENT

ASSUME CS:CODE,DS:DATA, ES:DATA ;原ASSUME语句未说明ES PROC PUSH XOR PUSH MOV MOV MOV MOV LEA MOV CLD RET ENDP ENDS END MAIN

FAR DS AX,AX AX AX,DATA DS,AX ES,AX DI,OUTBUF CX,100

; 从首址开始传送,应使DF=0 ; 应传送的是100个字而非字节 ; 程序结束,返回DOS

; MOVS指令以ES:DI为目的串指针,故应对ES赋值

SI,OFFSET INBUF

; 补充的三条指令为主程序返回提供正确的地址

DW 100 DUP(?) DW 100 DUP(?)

OUTBUF

INIT:

REP MOVSW MAIN CODE

该程序完成的功能是:将INBUF表内的10个字数据复制到以OUTPUT开始的连续的内存单元中。

9. 读下面程序,在其中的空处添上适当内容。该程序完成了什么功能?程序运行后,变量RS的值是多少?

DATA

SEGMENT

BUF DB CNT RS

DB DB

0

-13,24,5,-62,77,20,-7,145,0

$ -BUF

DATA ENDS

STACK SEGMENT PARA STACK‘STACK’

DB

256 DUP(?)

STACK CODE START

ENDS

SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE PROC FAR PUSH MOV PUSH MOV MOV LEA MOV MOV MOV TEST JE

DS AX,0 AX

AX,DATA DS,AX BX,BUF CH,0 CL, AL,[BX] AL,80H CONT RS BX LP

LP:

INC CONT:INC LOOP RET START ENDP

CODE ENDS END START

答:程序空处可填CNT,字节变量RS的最后结果是04H。该程序实现的功能是:统计数据段中以BUF为首址的带符号字节数据表中负数的个数,CNT为表中所有数据的个数,即表的长度。需要注意的是:十进制数据“145”在以二进制带符号字节数据形式存放时相当于“-111”。 10. 编写一个完整的源程序,将数据35、-27、-13、6、-47、52、9、-3中的正数放入以BUFFER为首址的数据缓冲区中。

答:一种可能的程序如下实现:

DATA

SEGMENT

35,-27,-13,6,-47,52,9,-3 $-BLOCK

COUNT DUP(?)

BLOCK DB COUNT EQU BUFFER DB

DATA STACK

STACK CODE

ENDS

SEGMENT PARA STACK‘STACK’ DW ENDS SEGMENT

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

AX,DATA DS,AX ES,AX CX,COUNT SI,BLOCK

;源数据区指针 ;正数存放区指针 ;自动增量

;取源数据,并修改SI ;取符号位,不影响AL ;符号位=1,是负数,不存 ;存正数并修改DI ;退出循环,返回DOS

DI,BUFFER

;需用STOS串操作指令

MOV MOV MOV LEA LEA CLD TEST JS

STOSB LOOP MOV INT ENDS END BEGIN

40 DUP(?)

BEGIN: MOV

AGAIN: LODSB

AL,80H GO

AGAIN AH,4CH 21H

GO:

CODE

11. 已知有一个长100个字的数据块,存放在以3DA0H:1000H开始的存储区域内。试编写一个完整的汇编语言程序,将该数据块复制到以3DA0H:1008H开始的存储区内。

答:一种可能的程序如下实现:

DATA

SEGMENT AT 3DA0H ORG 1000H

104 DUP(?)

ENDS

SEGMENT PARA STACK‘SSEG’ DB ENDS SEGMENT

ASSUME CS:CODE,SS:SSEG,DS:DATA,ES:DATA PROC PUSH MOV PUSH MOV MOV MOV MOV LEA

FAR DS AX,0 AX

AX,SEG BLOCK DS,AX ES,AX CX,200 SI,BLOCK

;重复次数

100 DUP(?)

BLOCK DW DATA SSEG

SSEG CODE

MAIN


微机原理及接口第四章习题答案.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:18规范办园 科学保教 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: