微机原理课后习题标准答案 下载本文

第3章寻址方式及指令系统

1、指令是CPU可以理解并执行的操作命令,指令由操作码和操作数两部分组成,指令有两个级别,即机器级和汇编级。 2、请画出程序执行流程示意图。

3、指令主要有哪些分类方式及其主要类别是什么? 答:指令分类有不同的方式。按操作数的个数将指令分为零地址指令(无操作数)、一地址指令(只有一个操作数)、二地址指令(有两个操作数)、多地址指令(多于两个操作数);按指令级别分为机器指令和汇编指令:按是否转移分为转移指令和顺序指令;按功能分为七大类:传送类、算术运算类、位操作类、I/O类、串操作类、CPU控制类、转移类;按指令长度(即指令占用的字节数)分为l字节指令、2字节指令等,8086/8088指令长度是不同的,叫变字长,不同的指令有不同的指令长度,从1~6字节均有;按指令执行期间取操作数是否需要与总线打交道分为内部指令(不需)和外部指令(需要),类似功能的指令内部指令比外部指令执行速度快,所以在编程时尽量采用内部指令即多用寄存器优化程序。 4、操作数的寻址方式有哪些?并举例说明其主要特点。

答:操作数寻址方式主要有立即寻址方式、寄存器寻地址、存储器寻址方式、端口寻址方式4类。

(1)立即寻址方式:操作对象是这个操作数本身,MOVAL,5 (2)寄存器寻地址:操作对象是寄存器中的内容MOVAX,BX

(3)存储器寻址方式:操作对象是内存地址所对应的存储单元中的内容,MOV AX [2000H]

(4)端口寻址方式:操作数是指明端口的地址、端口地址所对应的端口中的内容是操作对象IN AX,46直接寻址。

5、内存寻址中段寄存器与段内偏移地址对应关系如何?

5 / 29

6、设CS=1000H,DS=2000H,ES=3000H,SS=4000H,IP=100H,SP=200H,BX=300H,BP=400H,SI=500H,则①下一条待执行指令的物理地址为多少?②当前栈顶的物理地址为多少?③[BX]代表的存储单元的物理地址为多少?④[BP]代表的存储单元的物理地址为多少?⑤ES:[BX+SI]代表的存储单元的物理地址为多少?

答:①下一条待执行指令的物理地址=CS×16+IP=1000H×16+IOOH=10100H。 ②当前栈顶的物理地址=SS×16+SP=4000H×16+200H=40200H。 ③[BX]代表的存储单元物理地址=DS×16+BX=2000H X l6+300H=20300H。 ④[BP]代表的存储单元物理地址=SS X l6+BP=4000H×16+400H-----40400H。

⑤ES:[BX+SI]代表的存储单元物理地址=ES×16+BX+SI=3000H×16+300H+500H=30800H

7、试根据以下要求,分别写出相应的汇编语言指令。

(1)以寄存器BX和DI作为基址变址寻址方式把存储器中的一个字送到DX寄存器。

答:MOV DX,[BX+DI]

(2)以寄存器BX和偏移量VALUE作为寄存器相对寻址方式把存储器中的一个字和AX相加,把结果送回到那个字单元。 答:ADD VALUE[BX],AX

(3)将1字节的立即数0B6H与以SI作为寄存器间接寻址方式的字节单元相比较。 答:CMP BYTE PTR[SI],0B6H (4)将BH的高4位与低4位互换。 答:MOV CL,4

ROR BH,CL;或者ROL BH,CL

(5)测试BX的第3、7、9、12、13位是否同时为0。 答:TEST BX,3288H;0011001010001000B

(6)将存放了0~9数值的DL寄存器中的内容转化为相应的‘0’~‘9’的字符。 答:ADD DL,30H;或者OR DL,30H

(7)将存放了‘A’~‘F’字符的AL寄存器中的内容转化为相应的数值。 答:SUB AL,37H

8、写出清除AX寄存器的多种方法并比较(要求单指令实现)。 答:

(1)ANDAX,0;可以对AX清零,还可以清除进位位和影响到SF、ZF、

6 / 29

PF标志位。

(2)MOVAX,0;此条指令占用3个字节。

(3)SUBAX,AX;减法指令,该条指令只占用2个字节。 (4)XORAX,AX

9、分别用存储器的5种寻址方式实现将以A为首址的第5个字(注意:从第0个算起)送AX的指令序列。

10、指出下列指令错误的原因。

答:(1)MOV CL,300 ;300超过字节数据表示范围 (2)MOV CS,AX ;CS不能作为目的操作数 (3)MOV BX,DL ;数据类型不匹配

(4)MOV ES,1000H :立即数不能送给段寄存器 (5)INC [BX] ;数据类型不明确 ’ (6)ADD AX,DS :段寄存器不能参加运算

(7)TEST BX,[CX];存储器间接寻址只能使用BX、Sl、Dl、BP四个之一 (8)SUB [BX],[BP+SI] ;加减两个操作数不能同时为存储操作数 (9)JC [SI] ;条件转移只有短转移寻址方式

(10)SHL BX ;少给一个表明移位次数的操作数,l或CL 11、(1)CS=(1000)IP=(0155) (2)CS=(1000)IP=(176F) (3)CS=(1000)IP=(17C6) (4)CS=(2000)IP=(0146) (5)CS=(1000)IP=(1770) (6)CS=(2000)IP=(0146)

12、分别说明下列各组指令中的两条指令的区别。 答:(1)MOV AX,TABLELEA AX,TABLE

假设TABLE为字变量名,则:左为将TABLE单元的内容送AX,右为将TABLE单元的偏移地址送AX。

假设TABLE为字节变量名,则:左为错误指令,右为将TABLE单元的偏移地址送AX

假设TABLE为常量名,则:左为将TABLE的内容送AX,右为错误指令 (2)AND BL,0FHOR BL,0FH

左为将BL的高4位清0,右为将BL的低4位置1

(3)JMP SHORTLl JMP NEA RPTR Ll

左为短转移,2字节的指令,转移范围为一l28~+127

右为近转移,l字节的指令,转移范围为--32 768+32 767 (4)MOV AX,BXMOV AX,[BX] 左为将BX的值送AX

右为将BX的值作为相对DS段的内存单元偏移地址,取出字单元值送AX (5)SUB DX,CXCMP DX,CX

左为减法,并将DX-CX的值存入DX中

右为比较,做减法,但不会将DX-CX的值存入DX中

(6)MOV [BP][SI],CL MOV DS:[BPIESI],CL 左边第~操作数默认为相对于SS段偏移的存储器操作数

7 / 29

右边第一操作数采用段超越,指定为相对于DS段偏移的存储器操作数 13、写出判断AL为正为负的程序段(请至少用三种方法)。

答:方法一:CMP AL,80H ;而后用JAE代表负数转移,JB代表正数转移 方法二:CMP AL,00H ;而后用JGE代表正数转移,JL代表负数转移 方法三:TEST AL,80H ;而后用JNZ代表负数转移,JZ代表正数转移 方法四:OR AL,AL ;而后用JNS代表负数转移,JS代表正数转移 方法五:AND AL,AL ;而后用JNS代表负数转移,JS代表正数转移 方法六:SUB AL,00H ;而后用JGE代表正数转移,JL代表负数转移 方法七:TEST AL,80H :而后用JNS代表正数转移,JS代表负数转移 14、思考题:试比较以下几条指令的功能。 答:MOV BX,SI;将SI的值送给BX

MOV BX,[SI];将SI的值作为偏移地址找到对应的内存单元中的值送给BX

MOV BX,OFFSET[SI] ;将Sl的值作为偏移地址找到对应内存单元的偏移地址送给BX,即SI的值送给BX

LEA BX,[SI];将Sl的值作为偏移地址找到对应内存单元的偏移地址送给BX,即Sl的值送给BX

LDS BX,[SI];将Sl值作为偏移地址找到对应内存单元中的第一个字值送给BX,第二个字值送DS

LES BX,[SI] :将SI值作为偏移地址找到对应内存单元中的第一个字值送给BX,第二个字值送ES

15、设B、D为字节变量,A、C为字变量,且A除B可能会溢出,试编写无符号数或有符号数A/B商送C,余数送D。 答:可能会溢出则要考虑扩展数据表示能力。

;无符号数除法.;有符号数除法

MOV AL,B MOV AL,B XOR AH,AH CBW

MOV BX,AX MOV BX,AX MOV AX,A MOV AX,A XOR DX,DX;无符号扩展CWD ;有符号扩展 DIV BX IDIV BX

MOV C,AX MOV C,AX MOV D,DL MOV D,DL 16、编写程序段实现DX、AX中32位二进制数*l0(设不溢出)。 答:;X*10=X*8+X*2,用移位指令实现

SHL AX,1

RCL DX,1 :DX,AX=(DX,AX)*2 MOV BX,DX

MOV BP,AX;BX,BP转存2倍值 SHL AX,l

RCL DX,l ;再乘2 SHL AX,l

RCL DX,1 :再乘2 ADD AX,BP

8 / 29