《80X86/Pentium微型计算机原理及应用》教材课后习题参
第三章
3-5
(1)MOV SI, 2100H 源:立即数;目标:寄存器
(2)MOV CX, DISP[BX] 源:基址,EA=BX+DISP,PA=DS×16+BX+DISP;目标:寄存器
(3)源:寄存器;目标:寄存器间接寻址 EA=SI,PA=DS×16+SI
(4)源:基址加变址,EA=BX+SI,PA=DS×16+BX+SI;目标:寄存器
(5)源:寄存器;目标:寄存器
(6)源:基址,EA=BX+10H,PA= DS×16+BX+10H;目标:寄存器
(7)源:寄存器间接,EA=BX,PA= ES×16+BX;目标:寄存器
(8)源:带位移量的基址加变址,EA=BX+SI+20H,PA= DS×16+BX+SI+20H;目标:寄存器
(9)源:寄存器;目标:寄存器间接,EA=BP,PA= SS×16+BP
(10)源:寄存器;目标:存储器,EA=SP-2,PA= SS×16+SP-2
3-7
(1)源操作数错,基址+基址不能用在存储器寻址方式中,只能基址+变量,改成MOV AX, [BX+SI]
(2)错,VALUE1和VALUE2一般为自己定义的变量名称,则此两操作数的组合形式为存储器和存储器,ADD指令无此组合形式
(3)错,立即数不能直接传给段寄存器
(4)错,CS不能作为目标操作数
(5)错,立即数不能作为目标操作数,两个操作数互换位置即可
(6)如果VALUE1是用DW定义的WORD型变量,则此题正确,否则错误
(7)错,段寄存器不能直接传给段寄存器
(8)错,移位次数超过1时,应该先将移位次数送给CL,改成MOV CL, 3; ROL [BX][DI],CL
(9)错,NOT操作符只有一个操作数
(10)对,CS不能作为目标操作数,但可以作为源操作数
(11)错,不能直接将立即数压入堆栈
(12)错,两处错误,1:IN指令应该AL在前,端口地址在后;2:端口地址100H超过8位数能表示的范围,应该先将100H送给DX,改成MOV DX, 100H; IN AL, DX
(13)错,LEA指令的第二操作数必需为存储器寻址方式
(14)错,CX不能作为寄存器间接寻址方式,应将CX改成BX/BP/SI/DI之一
3-8
(1)AX=3355H, SP=1FFEH
(2)AX=3355H, DX=4466H, SP=1FFCH
3-9 BX=4154H, [2F246H]=6F30H
3-10 BX=139EH
3-11 SI=0180H, DS=2000H
3-12
(1) CL=F6H
(2) [1E4F6H]=5678H
(3) BX=9226H, AX=1E40H
(4) SI=9226H, [SI]=[1E4F6]=0024H
(5) AX=5678H, [09226H]=1234H
3-13 AF=0, CF=1, OF=1, SF=0, ZF=0
3-14
(1) MOV AX, 0 XOR AX, AX SUB AX, AX
(2) MOV CL, 4
ROL BL,CL (或ROR BL, CL)
(3) 题中没规定N1和N2是8位还是16位数,现假定都8位数(也可假定是16位数,程序不一样)
MOV AH, 0
MOV AL, N1
IDIV N2
MOV M1, AL
MOV M2, AH
(4) 题目的意思即使BX的b4,b6,b11位清零
AND BX, 0F7AFH
(5) XOR AX, 4020H
(6) TEST DX, 0201H
(7) TEST CL, 1
JNZ NEXT
INC CL (或DEC CL)
NEXT:
3-15 假设题目的意思理解为编号从1开始
(1) LEA BX, BLOCK+(6-1)*2
MOV AX, [BX]
(2) LEA BX, BLOCK
MOV AX, 10[BX]
(3) LEA BX, BLOCK
MOV SI, 0
MOV AX, 10[BX][SI]
(4) MOV AX, BLOCK+10
3-16
(1) 结果存在地址是580H端口中,[580H]=60H
(2) 结果存在地址是580H端口中,[580H]=8060H(即[580H]=60H, [581H]=80H)
(3) 结果存在AL中,AL=[40H]=4FH
(4) 结果存在AX中,AL=[40H]=4FH, AH=[41H](题目中没有给出端口41H中的值)
(5) 结果存在地址是45H端口中,[45H]=60H
(6) 结果存在地址是45H端口中,[45H]=8060H(即[45H]=60H,[46H]=80H)
3-17 假定每小题中NUM1和NUM2都是和题中指定的操作数等长,即(1)中NUM1和NUM2为字变量,(2)(3)中为字节变量,(4)中为双字变量
(1) MOV AX, NUM2
ADD NUM1, AX
(2) MOV CX, 4
LEA BX, NUM1
XOR AL, AL ; AL清零
L1: ADD AL, [BX]
INC BX
LOOP L1
MOV RES, AL
(3) MOV CX, 8
LEA BX, NUM1
XOR AX, AX
L1: ADD AL, [BX]
JNC L2
INC AH
L2: INC BX
LOOP L1
MOV AX, WORD PTR RES
(4) MOV AX, WORD PTR NUM1
ADD WORD PTR NUM2, AX
MOV AX, WORD PTR NUM1+1
ADC WORD PTR NUM2+1, AX ; (MOV指令不影响CF标志位,否则不能这么写)
3-18
(1) MOV CX, 8
LEA BX, NUM1
XOR AX, AX
L1: ADD AL, [BX]
DAA
JNC L2
INC AH
L2: INC BX
LOOP L1
MOV AX, WORD PTR RES
(2) MOV AL, NUM1
SUB AL, NUM2
DAS
MOV RES, AL
差=90H, CF=1
3-19
(1) MOV AL, NUM1
MUL NUM2 ; 8位乘8位
MOV WORD PTR RES, AX
(2) MOV AX, NUM1
IMUL NUM2 ;16位乘16位
MOV WORD PTR RES, AX
MOV WORD PTR RES+2, DX
(3)MOV AL, NUM1
MOV BL, 46
CBW
DIV BL
MOV WORD PTR RES, AX
(4) MOV AX, NUM1
CWD
IDIV NUM2 (或DIV NUM2)
MOV WORD PTR RES, AX
MOV WORD PTR RES+2, DX
3-20
(1)53乘以2
MOV AL, 53
SHL AL, 1
结果106
(2) -49乘以2
MOV AL, -49 ; -49补码为CFH
SHL AL, 1 ;AL=9EH, 真值即为-98
结果-98
除以2类似
3-21
(1) BX=009AH
(2) BX=15CH
(3) BX=8071H
(4) BX=10F7H
(5) BX=FF1CH
3-22
(1) DX=[20506]=0006H BX=0004H
(2) SP=1FFEH, [SP]=CX=FFFEH
(3) CX=BX=0004H
(4) AX=8094H, CF=0
(5) AL=[20508H]=87H
(6) AL=94H+37H+1=CCH, CF=0, AL=32H
(7) SI=9
(8) DI=9
(9) [DI]=[2050A]=AL=94H
(10) AX=17C6H, DX=8094H
(11) AH=84H, BL=4
(12) IP=DX=17C6H
3-23
(1) 将存储器中以FIRST为起始地址连续10个字节复制到以SECOND为起始地址的地方
(2) 将存储器中数据段中以偏移地址0404H为起始地址,连续80H个字节的空间清零
3-24
MOV BX, 5
MUL BX
MOV BX, 2
DIV BX
3-26 MOV BX, 0A80H
MOV AL, 5
XLAT
3-27
(1) IP=1256
(2) IP=3280H
(3) IP=2450H
3-28 IP=009A, CS=2000, [SP]=8F, [SP+1]=3DH, [SP+2]=50H, [SP+3]=40H
3-29
CMP AL, 1
JNZ LAB1
CMP AL, 2
JNZ LAB2
CMP AL,4
JNZ LAB3
最后一个条件(若位0至位2都是0,则顺序执行),相当于没有,因为不管符不符合这个条件,程序都会按顺序执行。
3-31
MOV AX, X
CMP AX, 50
JG N_HIGH
SUB AX, Y
JO OVERFLOW
JNS NEXT
NEG AX
NEXT: MOV RESULT, AX
3-32
(1) MOV AX, Z
ADD AX, X
SUB W, AX
MOV AX, W
MOV Z, AX
(2) MOV AX, X
ADD AX, 6
ADD AX, W
ADD R, 9
SUB AX, R
(3) MOV AX, W
MUL X
ADD Y, 6
DIV Y
MOV Z, AX
MOV R, DX