微机原理习题答案3、4

微机原理习题答案3、4


2024年4月27日发(作者:)

3.1机器指令分为哪几部分?每部分的作用是什么?

【解】:每条机器指令由两部分组成:操作码字段和地址码字段。操作码字段:用来说

明该指令所要完成的操作。地址码字段:用来描述该指令的操作对象。一般是直接给出操作

数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址

的信息。

3.2指出下列MOV指令的源操作数的寻址方式。

MOV AX,1234H

MOV AX,BX

MOV AX,[BX]

MOV AX,TABLE;TABLE ;TABLE是一个变量名

MOV AX,[1234H]

MOV AX,[BX+1234H]

MOV AX,[BP][SI]

MOV AX,[BX+SI-1234H]

【解】:MOV AX,1234H

MOV AX,BX

MOV AX,[BX]

立即寻址

寄存器寻址

寄存器间接寻址

直接寻址方式

直接寻址方式

寄存器相对寻址

基址变址寻址

相对基址变址寻址

MOV AX,TABLE;TABLE是一个变量名

MOV AX,[1234H]

MOV AX,[BP][SI]

MOV AX,[BX+1234H]

MOV AX,[BX+SI-1234H]

3.3 设:(DS)=2000H,(BX)=0100H,(SS)=1000H,(BP)=0010H,TABLE的

物理地址为2000AH,(SI)=0002H。求下列每条指令源操作数的存储单元地址:

MOV

MOV

MOV

MOV

AX,[1234H]

AX,[BX]

AX,TABLE[BX]

AX,[BP]

MOV AX,[BP][SI]

【解】:源操作数存储单元地址:(DS)×10H + EA =2000H×10H+1234H=21234H

源操作数存储单元地址:(DS)×10H +(BX)=2000H×10H+0100H=20100H

源操作数存储单元地址:(DS)×10H+EA=2000H×10H+0100H+000AH=2010AH

源操作数存储单元地址:(SS)×10H+EA=1000H×10H+0010H=10010H

源操作数存储单元地址:(SS)×10H+EA=1000H×10H+0010H+0002H =10012H

3.4设ARRAY是字数组的首地址,写出将第5个字元素取出送AX寄存器的指令,要

求使用以下几种寻址方式:

⑴ 直接寻址 ⑵ 寄存器间接寻址 ⑶ 寄存器相对寻址 ⑷ 基址变址寻址

【解】:⑴ 直接寻址 ⑵ 寄存器间接寻址 ⑶ 寄存器相对寻址 ⑷ 基址变址寻址

MOV AX, ARRAY+8 MOV BX, ARRAY+8 MOV BX, 8 LEA BX, ARRAY

MOV AX, [BX] MOV AX, ARRAY[BX] MOV SI, 8

MOV AX,[BX+SI]

3.5 设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在当前代码段偏移地址为0100H

处,(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=30H,数据段定义的字变量ARRAY

的内容为1000H,试写出下列转移指令的目标转移地址。

⑴ JMP

⑵ JMP

NEAR PTR

BX

⑶ JMP WORD PTR ARRAY

【解】:⑴ JMP NEAR PTR 此转移指令的目标转移地址为:20100H

⑵ JMP BX 此转移指令的目标转移地址为:21000H

⑶ JMP WORD PTR ARRAY 此转移指令的目标转移地址为:23000H

3.6设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在3000H:1000H处。当前

(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=03H,(11002H)=00H,(11003H)=30H,

数据段定义的字变量ARRAY的内容为0300H,(ARRAY+2)=3000H,试写出下列转移指令

的目标转移地址。

⑴ JMP FAR PTR NEXT

⑵ JMP DWORD

【解】:⑴ JMP FAR

⑵ JMP

ARRAY

PTR NEXT 此转移指令的目标转移地址为:31000H

DWORD ARRAY 此转移指令的目标转移地址为:30300H

3.7下列每组指令有何区别?

⑴ MOV

MOV

AX,1234H

AX,[1234H]

AX,TABLE

AX,TALBE

⑵ MOV

MOV

AX,TABLE

AX,[TABLE]

AX,BX

AX,[BX]

⑶ MOV

LEA

⑷ MOV

MOV

【解】:⑴ 第一条指令中,1234H就是源操作数,直接送入AX中,第二条指令中,1234H

是源操作数的地址,该指令是把1234H所指示的地址单元的值送入AX中。

⑵ 两条指令都是直接寻址方式,都是把TABLE指示的地址单元的值送入AX中。

⑶ 第一条指令中,TABLE为一地址单元的地址,该条指令是把TABLE所指示的地址

单元的值送入AX中,第二条指令是把源操作数的偏移地址送入AX中。

⑷ 第一条指令为寄存器寻址方式,BX中的值为源操作数,该条指令是把BX中的值送

入AX中,第二条指令是寄存器间接寻址方式,BX中的值为源操作数的地址,该条指令是

把BX所指示的地址单元的值送入AX中。

3.8 MOV CS,AX指令正确吗?

【解】:MOV CS,AX指令不正确。因为CS是指令寄存器,由系统自动改变,不能由指

令进行更改。

3.9写一指令序列将3456H装入DS寄存器。

【解】:MOV AX 3456H

MOV DS AX

3.10若正在访问堆栈中的03600H单元,则SS和SP的值各是多少?

【解】:若正在访问堆栈中03600H单元,则SS和SP的值会有好多组合,其中可以有

SS是0300H,SP是0600H。

3.11 若(SS)=2000H,(SP)=000AH,先执行将字数据1234H和5678H压入堆栈的操作,

再执行弹出一个字数据的操作,试画出堆栈区及SP的内容变化过程示意图(标出存储单元的

物理地址)。

【解】:物理地址=(SS)×10H+SP

SP→2000AH

SP→20008H 34H

20009H 12H

2000AH

SP→20006H

20007H

20008H

20009H

2000AH

78H

56H

34H

12H

3.12 解释XLAT指令是怎样转换AL寄存器中的内容的,并编写一段程序用XLAT

指令将BCD码0~9转换成对应的ASCII码,并将ASCII码存入ARRAY中。

【解】:XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换。使

用此指令前,先在数据段建立一个表格,表格首地址存入BX寄存器,欲取代码的表内位移

量存入AL寄存器中。XLAT指令将(AL)值扩展成16位,与(BX)相加形成一个段偏移地址,

段地址取(DS),据此读出代码送入AL寄存器。

程序如下:TABLE DB 30H, 31H, ┅, 39H

ARRAY DB 1O DUP(?)

MOV CL, 10

MOV SI, 0

MOV BX, OFFSET TABLE

XOR AL, AL

AGAIN: XLAT

MOV [SI], AL

INC SI

INC AL

LOOP AGAIN

3.13能用ADD指令将BX内容加到ES中去吗?

解】:不可以。ADD指令不允许使用段寄存器。

3.14 INC [BX]指令正确吗?

解】:正确。操作数在BX所指示的地址单元中。

3.15若(AX)=0001H,(BX)=0FFFFH,执行ADD AX,BX之后,标志位ZF、SF、

CF、OF各是什么?

解】:(AX)= 0001H = 0000 0000 0000 0001 B

+ (BX)=0FFFFH = 1111 1111 1111 1111 B

(AX)= 0001H = 1 0000 0000 0000 0000 B 则:ZF=1、SF=0、CF=1、OF=0

3.16 写一指令序列完成将BL中的数据除以CL中的数据,再将其结果乘以2,并将最

后为16位数的结果存入DX寄存器中。

解】:MOV AL BL

DIV CL

MOV CL 1

SAL AL CL

SAL AH CL

MOV DX AX

3.17写一指令序列,完成将AX寄存器的最低4位置1,最高3位清0,第7、8、9位

取反,其余位不变的操作。

【解】: OR AX, 000FH (OR AX, 0000 0000 0000 1111 B)

AND AX, 1FFFH (AND AX, 0001 1111 1111 1111 B)

XOR AX, 01C0H (XOR AX, 0000 0001 1100 0000 B)

3.18 试写出执行下列指令序列后AX寄存器的内容。执行前(AX)=1234H。

MOV CL,7

SHL BX,CL

【解】:(AX) = 1234H = 0001 0010 0011 0100 B

执行后:(AX) = 0 0011 0100 0000 000 B = 0001 1010 0000 0000 B = 1A00H

3.19 写一指令序列把DX与AX中的双字左移三位。

解】: MOV CL 3

SAL DX CL

SAL AX CL

第4章 汇编语言程序设计

4.1假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是

非法的?它们的错误是什么?

⑴ MOV BP,AL ⑵ MOV WORD_OP[BX+4*3][DI],SP

⑶ MOV WORD_OP1,WORD_OP2 ⑷ MOV AX,WORD_OP1[DX]

⑸ MOV SAVE WORD,DS ⑹ MOV SP,SS:DATA_WORD[BX][SI]

⑺ MOV [BX][SI],2 ⑻ MOV AX,WORD_OP1+WORD_OP2

⑼ MOV AX,WORD_OP1-WORD_OP2+100 ⑽ MOV WORD_OP1,WORD_OP1-WORD_OP2

【解】:⑴ MOV BP,AL 两个操作数不匹配

⑵ MOV WORD_OP[BX+4*3][DI],SP

⑶ MOV WORD_OP1,WORD_OP2 两个内存单元之间不能直接传送数据

⑷ MOV AX,WORD_OP1[DX]

⑸ MOV SAVE WORD,DS

⑹ MOV SP,SS:DATA_WORD[BX][SI] 当基址为BX时,选取DS寄存器

⑺ MOV [BX][SI],2

⑻ MOV AX,WORD_OP1+WORD_OP2

⑼ MOV AX,WORD_OP1-WORD_OP2+100

⑽ MOV WORD_OP1,WORD_OP1-WORD_OP2

4.2假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处:

⑴ ADD VAR1,VAR2 ⑵ SUB AL,VAR1

⑶ JMP LAB[SI] ⑷ JNZ VAR1

⑸ JMP NEAR LAB

【解】:⑴ ADD VAR1,VAR2

ADD两个操作数不能同时为存储单元,

MOV AX, VAR1

ADD AX, VAR2

⑵ SUB AL, VAR1

两个操作数不匹配

SUB AX, VAR1

⑶ JMP LAB[SI]

LAB与[SI]不能相加

JMP WORD, PTR [SI]

⑷ JNZ VAR1

JNZ后面应是标号,不应是变量

JNZ LAB

⑸ JMP NEAR LAB

缺少PTR运算符

JMP NEAR PTR LAB

4.3画图说明下列语句所分配的存储空间及初始化的数据值。

⑴ BYTE_VAR DB ‘BYTE’,12,-12H,3 DUP(0,?,2 DUP(1,2),?)

⑵ WORD_VAR DW 5 DUP(0,1,2),?,-5,‘BY’,‘TE’,256H

【解】:(1)

BYTE_VAR

41H

59H

54H

45H

0CH

F4H

00H

01H

02H

01H

B

Y

T

E

12

-12H

0

1

2

1

2

WORD_VAR

00H

00H

01H

00H

02H

00H

00H

00H

01H

00H

02H

00H

0

1

2

30个字节

0

1

2

02H

00H

01H

02H

01H

02H

00H

01H

02H

01H

02H

0

1

2

1

2

0

1

2

1

2

2

FBH

FFH

41H

00H

59H

00H

54H

00H

45H

00H

56H

02H

-5

B

Y

T

E

256H

4.4写出将首地址为BLOCK的字数组的第6个字送到CX寄存器的指令序列,要求分

别使用以下几种寻址方式:

⑴ 以BX的寄存器间接寻址

⑵ 以BX的寄存器相对寻址

⑶ 以BX、SI的基址变址寻址

【解】不同的寻址方式可以有不同的指令组合。

⑴ 以BX的寄存器间接寻址

LEA BX,BLOCK+10 ;将第6个字的有效地址存入BX

NOV CX,[BX] ;以BX的寄存器间接寻址方式,将第6个字送入CX寄存器

⑵ 以BX的寄存器相对寻址

MOV BX,10 ;将第6个字的地址偏移量存入BX

MOV CX,BLOCK[BX] ;以BX的寄存器相对寻址方式,将第6个字送入CX寄存器

⑶ 以BX、SI的基址变址寻址

LEA BX,BLOCK ;取首地址BLOCK存入BX

MOV SI,10 ;将第6个字的地址偏移量存入SI

MOV CX,[BX+SI] ;以BX、SI的基址变址寻址方式,将第6个字送入CX寄存器

4.5假设程序中的数据定义如下:

PARTNO DW ?

PNAME DB 16 DUP (?)

COUNT DD ?

PLENTH EQU $-PARTNO

问PLENTH的值为多少? 它表示什么意义?

【解】:PLENTH的值为22,它表示数据的个数。

4.6有符号定义语句如下:

BUFF DB 1,2,3,‘123’

EBUFF DB 0

L EQU EBUFF-BUFF

问L的值是多少?

【解】:PLENTH的值为6。

4.7 假设程序中的数据定义如下:

LNAME DB 30 DUP(?)

ADDRESS DB 30 DUP(?)

CITY DB 15 DUP(?)

CODE-LIST DB 1,7,8,3,2

⑴ 用一条MOV指令将LNAME的偏移地址放入AX。

⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。

⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。

【解】: ⑴ 用一条MOV指令将LNAME的偏移地址放入AX。

MOV AX, OFFSET LANME

⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。

MOV SI, WORD PTR CODE_LSIT

⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。

CODE_LENGHT EQU CITY-CODE_LIST

4.8试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,

2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能

为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。

【解】:参考程序如下:

DATA_SEG SEGMENT

DB1 DB 5

DATA_LIST DB -1, 0, 2, 5, 4, 5 DUP(?)

COUNT DB 5

MAX DB ?

MIN DB ?

DATA_SEG ENDS

CODE_SEG SEGMENT

ASSUME CS:CODE_SEG, DS:DATA_SEG

START PROC FAR

PUSH DS

MOV AX, 0

PUSH AX

MOV AX, DATA_SEG

MOV DS, AX

LEA BX, DATA_LIST

MOV CX, COUNT-1

MOV AL, [BX]

MOV AH, [BX+1]

LOOP1: INC BX

CMP AH, AL

JAE LOOP1

XCHG AH, AL

LOOP2 INC BX

CMP AH, [BX]

JAE LIS

XCHG AH, [BX]

JMP LOP2

LIS: CMP AL , [BX]

JBE LOP2

XCHG AL, [BX]

LOOP2

MOV MAX, AH

MOV MIN, AL

RET

START ENDP

CODE_SEG ENDS

END START

4.9给出等值语句如下:

ALPHA

BETA

GAMMA

EQU

EQU

EQU

100

25

2

下列表达式的值是多少?

⑴ ALPHA*100+BETA

⑵ ALPHA MOD GAMMA+BETA

⑷ (BETA/3) MOD 5

⑹ ALPHA GE GAMMA

⑻ GAMMA OR 3

⑶ (ALPHA+2)*BETA-2

⑸ (ALPHA+3)*(BETA MOD GAMMA)

⑺ BETA AND 7

【解】: ⑴ ALPHA*100+BETA 100×10025=10025

⑵ ALPHA MOD GAMMA+BETA 100/(25+2)=19

⑶ (ALPHA+2)*BETA-2 (100+2)*25=2548

⑷ (BETA/3) MOD 5 (25/3) MOD 5=3

⑸ (ALPHA+3)*(BETA MOD GAMMA) (100+3)*(25 MOD 2)=103

⑹ ALPHA GE GAMMA 100 GZ GAMMA=0FFFFH

⑺ BETA AND 7 25 AND 7=1

⑻ GAMMA OR 3 2 OR 3=3

4.10对于下面的数据定义,三条MOV指令分别汇编成什么?(可用立即数方式表示)

TABLEA DW

TABLEB DB

TABLEC DB

MOV

MOV

MOV

AX,LENGTH TABLEA

BL,LENGTH TABLEB

CL,LENGTH TABLEC

MOV AX, OOOAH

MOV BL, 0AH

MOV CL, O1H

10 DUP(?)

10 DUP(?)

’1234’

【解】: MOV AX,LENGTH TABLEA

MOV BL,LENGTH TABLEB

MOV CL,LENGTH TABLEC

4.11对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?

FLDB

TABLEA

TABLEB

DB

DW

DB

?

20 DUP(?)

‘ABCD’

⑵ MOV AX,TYPE ⑴ MOV AX,TYPE FLDB

TABLEA

⑶ MOV CX,LENGTH TABLEA ⑷ MOV DX,SIZE TABLEA

⑸ MOV CX,LENGTH TABLEB

(1) MOV AX,TYPE FLDB 【解】:

(2) MOV AX,TYPE TABLEA

(3) MOV CX,LENGTH TABLEA

(4) MOV DX,SIZE TABLEA

(5) MOV CX,LENGTH TABLEB

(AX)= 1

(AX)= 2

(CX)= 20

(DX)= 40

(CX)= 1

4.12编写在屏幕上显示字符串‘THIS IS TEXT DISPLAY PROGRAM.’的程序。

【解】:分析:只需将欲显示字符串的ASCII码存放到字节变量数据区(字节变量数据区


发布者:admin,转转请注明出处:http://www.yc00.com/web/1714183443a2397735.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信