微机原理习题答案3、4

2019-01-19 16:51

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 AX,[1234H] MOV AX,[BX]

MOV AX,TABLE[BX] MOV 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

ARRAY

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

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

3.7下列每组指令有何区别? ⑴ MOV AX,1234H ⑵ MOV AX,TABLE MOV AX,[1234H] MOV AX,[TABLE] ⑶ MOV AX,TABLE ⑷ MOV AX,BX

LEA AX,TALBE MOV AX,[BX] 【解】:⑴ 第一条指令中,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 02H 00H - 01H 02H 01H 02H 00H - 01H 02H 01H 02H B Y T E 12 -12H 0 1 2 1 2 0 1 2 1 2 0 1 2 1 2 WORD_VAR 00H 00H 01H 00H 02H 00H … 00H 00H 01H 00H 02H 00H - - FBH FFH 41H 00H 59H 00H 54H 00H 45H 00H 56H 02H 0 1 2 30个字节 0 1 2 2 -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 ?


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

下一篇:南开 15春学期《计算机科学导论》在线作业 答案

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

马上注册会员

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