XCHG AL, [BX+3] MOV [BX], AL MOV AL,[BX+1] XCHG AL, [BX+2] MOV [BX+1], AL
13.将 AX 寄存器清零有 4 种方法,试写出这 4 条指令。 答案:MOV AX, 00H SUB AX, AX AND AX, 00H XOR AX, AX
14.使用一条逻辑运算指令实现下列要求: (1)使 AL 高 4 位不变,低 4 位为 0。 (2)使 AL 最高位置 1,后 7 位不变。 (3)使 AL 中的 bit3、bit4 变反,其余位不变。 (4)测试判断 CL 中的 bit2、bit5、bit7 是否都为 1。 答案: (1) AND AL, 0F0H (2)OR AL, 80H (3)XOR AL 18H (4)TEST AL, 0A4H
15.试分析下面的程序段完成什么功能。 MOV CL, 4 SHL AX, CL SHL BL, CL MOV AL, BL SHR DH, CL OR AL, DH
答案:将 AX 中间 8 位,BX 的低 4 位,DX 的高 4 位组成一个新字存放在 AX 中。
16.若要将源串 100 个字节数据传送到目标串单元中去,设源串首址的偏移地址为 2500H, 目标串首址的偏移地址为 1400H,请编写程序实现以下功能。 (1)完成源串到目标串的搬移。 (2)比较两串是否完全相同,若两串相同,则 BX 寄存器内容为 0;若两串不同,则 BX 指向 源串中第一个不相同字节的地址,且该字节的内容保留在 AL 的寄存器中。 答案: (1) CLD
MOV CX, 100 MOV SI, 2500H MOV DI, 1400H REP MOVSB (2) CLD MOV CX, 100 MOV SI, 2500 MOV DI, 1400 REPE CMPSB JZ EQQ DEC SI MOV BX, SI MOV AL, [SI] JMP STOP EQQ: MOV BX, 0 STOP: HLT
17.设若标志寄存器原值为0A11H,(SP)=0060H,(AL)=4。下列几条指令执行后,标志寄存器、AX、SP的值分别是多少?
PUSHF LAHF
XCHG AH,AL PUSH AX SAHF POPF
答:指令执行后标志寄存器的值为0411H,AX=0411H ,SP=005EH。
18.假如在程序的括号中分别填入指令: (1) LOOP L20 (2) LOOPNE L20 (3) LOOPE L20
试说明在三种情况下, 当程序执行完后, AX、BX、CX、DX四个寄存器的内容分别是
什么?
BEGIN: MOV
MOV MOV MOV
AX,01 BX,02 DX,03 CX,04
AX
L20:
INC
ADD SHR
BX,AX DX,1
( )
答案: (1)(AX)= 5 (BX)= 16 (CX)= 0 (DX)= 0
(2)(AX)= 3 (BX)= 7 (CX)= 2 (DX)= 0 (3)(AX)= 2 (BX)= 4 (CX)= 3 (DX)= 1
19.变量N1和N2均为2字节的非压缩BCD数码,请写出计算N1与N2之差的指令序列。
答案: MOV AX, 0
MOV AL, N1 SUB AAS MOV DL, AL MOV AL, N1+1 SBB AAS MOV DH, AL
20.在已学的指令中,可实现累加器清0的单条指令有哪些?比较它们的功能。 答:(1)MOV AX,0 ;仅将累加器清0,不会影响任何标志位 (2)SUB
AX,AX ;累加器清0的同时影响所有状态标志,具体地有:ZF、PF
AL, N2+1 AL, N2
置1,CF、AF、SF、OF均清0 (3)AND (4)XOR
21.已知(DS)=2000H,有关的内存单元值为:(21000H)=00H,(21001H)=12H,(21200H)=00H,(21201H)=10H,(23200H)=20H,(23201H)=30H,(23400H)=40H,(23401H)=30H,(23600H)=60H,(23601H)=30H,符号COUNT的偏移地址为1200H。执行下列指令后,寄存器AX、BX、SI的值分别是多少?
MOV BX,OFFSET COUNT
AX,0
;将累加器清0,ZF、PF置1,CF、OF、SF清0
AX,AX ;将累加器清0,ZF、PF置1,CF、OF、SF清0
MOV SI,[BX]
MOV AX,COUNT[SI][BX]
答:执行结果为(BX)=1200H,(SI)=1000H,(AX)=3040H。
22.设若内存单元DATA在数据段中偏移量为24C0H处,24C0H~24C3H单元中依次存放着55H、66H、77H、88H。下列几条指令执行后,寄存器AX、BX、CL、SI、DS的值分别是多少?
MOV AX,DATA LEA SI,DATA MOV CL,[SI] LDS BX,DATA
答:执行结果为(AX)=6655H,(BX)=6655H,(CL)=55H,(SI)=24C0H,(DS)=8877H。
23.若(AX)=26D3H,(CX)=7908H,CF=1,执行下列指令后,寄存器AX、CX的值分别是多少?CF=?OF=?
SAL CH,1 RCR AX,CL ROL AL,1
答:执行结果为(AX)=0A64CH,(CX)=0F208H,CF=OF=0。
24.已知有程序段如下: MOV AL,35H MOV DL,AL AND DL,0FH AND AL,0F0H MOV CL,4 SHR AL,CL MOV BL,10 MUL BL ADD AL,DL
执行之后,AL的值等于多少?该程序段完成了什么功能?
答:程序段执行后(AL)=23H。该程序段实现了将AL中的1个组合BCD码转换为十六进制数并存回AL中的功能。
25.下面的程序执行后,DX、AX的值分别是多少?