内容发布更新时间 : 2024/12/24 1:14:16星期一 下面是文章的全部内容请认真阅读。
第二条指令是把立即数.2000,传送至数据段(BX的默认段)偏移量由BX规定的
字单元,地址为:21000H+1400H = 22400H。
3.16 使用堆钱操作指令时要注意什么问题?传送指令和交换指令在涉
及内存操作数时应该分别要注意什么问题?
解:使用堆栈指令可以把内存单元作为一个操作数(从内存到内存)。但堆栈固定在堆栈段且只能由SP指向。且堆栈操作要修改堆核指针。MOV指令不能实现内存单元间的数据传送。XCHG指令是交换,有一个操作数必须是寄存器。
3.17下面这些指令中哪些是正确的?哪些是错误的?若是错误的,请说明原因。
(1)XCHG CS, AX (2)MOV [BX], [1000] (3)XCHG BX, IP (4)PUSH CS (5)POP CS
16
(6)IN BX, DX (7)MOV BYTE[BX], 100O (8)MOV CS, [1000] 解:
(l)错误,CS不能交换。
(2)错误,MOV指令不能在内存间传送。 (3)错误,IP不能交换。
(4)错误,CS可以作为PUSH指令的操作数。 (5)错误,CS可以作为POP指令的操作数。 (6)错误,IN指令的目的操作数是累加器。 (7)错误,目的操作数是字节单元。
(8〉错误,CS不能作为MOV指令的目的操作数。
3.18 以下是格雷码的编码表,
O 0000 1 0001 2 0011
17
3 0010 4 0110 5 0111 6 0101 7 0100 8 1100
请用换码指令和其他指令设计一个程序段,以实现由格雷码向ASCII码的转换。 解:
MOV BX,TABLE MOV SI,ASCII_TAB MOV AL,0 MOV CX,10 TRAN: XLAT TABLE
MOV DL,AL ADD DL,30H MOV [SI],DL INC AL
18
LOOP TRAN
3.19 使用乘法指令时,特别要注意先判断是用有符号数乘法指令还是
用无符号数乘法指令,这是为什么?
解:因为有符号数和无符号数,其数的乘法是一样的。但结果的符号取决于两
个操作数的符号。
3.20 字节扩展指令和字扩展指令一般用在什么场合?举例说明。
解:主要用于字节相除和字相除之前,把被除数扩展为两倍宽度的操作数。
3.21 什么叫BCD码?什么叫组合的BCD码?什么叫非组合的BCD码?8086
汇编语言在对BCD码进行加、减、乘、除运算时,采用什么方法?
解:BCD码为十进制编码的二进制数。组合的BCD数是把两位BCD加在一个字节中,高位的在高4位。非组合的BCD码是把一位BCD数放在
19
一个字节的低4位,高4位为0。8086在BCD加、减和乘法运算以后用BCD调整指令把结果调整为正确的BCD数。在BCD除法之前先用BCD调整指令再做除法.
3.22 用普通运算指令执行BCD码运算时,为什么要进行十进制调整?具
体地讲,在进行BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?
解:因为8086指令把操作数作为二进制数进行二进制运算,要得到正确的BCD结果,需要进行调整。在加、减、乘法指令之后加上BCD调整指令,而在除法指令之前先用BCD调整指令再用除法指令。
第4章 作业答案
4.1 在下列程序运行后,给相应的寄存器及存储单元填入运行的结果:
MOV AL, 1OH MOV CX, 100OH MOV BX , 2000H MOV [CX],AL
20