微机原理课后习题参考答案

LOOP NEXT NI: DEC DI

MOV DI,20H JMP NEXT

3.16在使用条件转移指令时,要特别注意它们均匀为相对转移指令,请解释“相对转移”的

含义。如果要向较远的地方进行条件转移,那么,程序中应该怎样设置?

【解】相对转移即为相对于指令指针的转移,通常偏移量是8位数,这是短(short)转移;它可以规定16位偏移量,这就是段内(near)转移。

3.17用寄存器间接寻址方式时,BX、BP、SI、DI分别针对什么情况来使用?这四个寄存器组合间接寻址时,地址时怎样计算的?举例进行说明。

【解】在寄存器间接寻址方式下,BX和BP作为间接寄存器使用,而SI、DI作为变址寄存器使用。除BP间接默认的段为堆栈段,其他的都默认为数据段。它们都可以单独使用,或加上偏移量后组合使用。如:

[BX+n][BP+n][SI+n][DI+n]

[BX+SI+n][BX+DI+n][BP+SI+n][BP+DI+n]

3.18 下面这些指令中哪些是正确的?哪些是错误的?如果是错误的,请说明原因。

(1)XCHG CS,AX (3)XCHG BX,IP (4)PUSH CS (5)POP CS

(2)MOV [BX],[1000]

(6)IN BX,DX

(7)MOV BYTE[BX],1000 (8)MOV CS,[1000]

【解】(1)错误,CS不能交换。 (3)错误,IP不能交换。

(2)错误,MOV指令不能在内存间传送。

(4)错误,CS可以作为PUSH指令的操作数。 (5)错误,CS可以作为POP指令的操作数。 (6)错误,IN指令的目的操作数是累加器。 (7)错误,目的操作数是字节单元。

3.19 字节扩展指令和字扩展指令用在什么场合?

(8)错误,CS不能作为MOV指令的目的操作数。

【解】主要用于字节相除和字相除之前,把被除数扩展为两倍宽度的操作数。

3.20使用堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内存操作数时分别要

注意什么问题?

【解】使用堆栈指令可以把内存单元作为一个操作数(从内存到内存)。但堆栈固定在堆栈段

且只能由SP指向。且堆栈操作要修改堆栈指针。MOV指令不能实现内存单元间的数据传送。

XCHG指令是交换,有一个操作数必须是寄存器。

3.21在执行中断指令时,堆栈的内容有什么变化?中断处理子程序的入口地址是怎样得的?

【解】在执行中断指令后,处理器先推入标志寄存器,在推入断点后的指令指针和CS值。中断处理器的入口地址是由中断向量和中断向量表(描述符)表得到的。

3.22在执行中断返回指令IRET和普通子程序返回指令RET时,具体操作内容有什么不同?

【解】IFET除了弹出中断要返回的指令的地址(CS和IP)外,还要恢复中断前的标志寄存器。

3.23 什么叫BCD码?什么叫组合的BCD码?什么叫非组合的BCD码?8086汇编语言在对BCD码的加、减、乘、除运算时,采用什么方法?

【解】BCD码为十进制编码的二进制数。组合的BCD数是把两位BCD加在一个字节中,高位的在高4位。非组合的BCD码是把一位BCD数放在一个字节的低4位高4位为0。8086在BCD加、减和乘法运算以后用BCD调整指令把结果调整为正确的BCD数。在BCD除法之前先用BCD调整指令再做除法。

3.24 用普通运算指令执行BCD码运算时,为什么要进行十进制调整?具体讲,在进行BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?

【解】因为8086指令把操作数作为二进制数进行二进制运算,要得到正确的BCD结果,需要进行调整。在加、减、乘法指令之后加上BCD调整指令,而在除法指令之前先用BCD调整指令再用除法指令。

第4四部分 汇编语言程序设计

4.1 在下列程序运行后,给相应的寄存器及存储单元填入运行的结果:

MOV AL,10H

MOV CX,1000HMOV BX,2000HMOV [CX],ALXCHG CX,BXMOV DL,01H

XCHG CX,BXHLT

MOV [BX],DL

【解】寄存器及存储单元的内容如下:

AL=10HBL=00HBH=20HCL=00HCH=10HDL=01HDH=10H

(1000H)=10H(2000H)=01H

4.2 自1000单元开始有一个100个数的数据块,若要把它传送到自2000H开始的存储区中

去,可以采用以下3种方法实现,试分别编制程序以实现数据块的传送。

(1)不用数据块传送指令;

(2)用单个传送的数据块传送指令;(3)用数据块成组传送指令。【解】

(1) LEA SI,1000H LEA DI,2000H MOV CX,100

L1 : MOV AX,[SI] MOV [DI],AX LOOP L1

联系客服:779662525#qq.com(#替换为@)