第3章 习 题
3.1 填空题
(1) 汇编语言指令由两部分组成:___操作码__________表示指令的操作内容,_____操
作数________表示指令在执行过程中所用到的数据信息。
(2) 在16位CPU的寄存器间接寻址方式中,若用__SI_____、__DI______、__BX______
作为间接寻址的寄存器,则操作数在____DS___段中;若用___BP____作为间接寻址的寄存器,则操作数在 ___SS_____段中。
(3) 在16位CPU的基址变址寻址方式中,基址寄存器可以为__BX_____或__BP______,
变址寄存器可以为___SI____或___DI_____,若用__BX_____作为基址寄存器,则操作数在____数据段___段中;若用___BP____作为基址寄存器,则操作数在__堆栈______段中。
(4) 设AX=2000H,BX=2300H,则在执行了指令CMP AX,BX后,标志CF=__1_______、
ZF=____0____。
(5) 当执行指令DIV BL后,被除数在_AX_______中,所得商在_______AL__中,余数在
_____AH___中。
3.2 选择题
1.若栈顶的物理地址为12000H,当执行完指令PUSH BX后,栈顶的物理地址为(D ) A. 12001H B. 12002H C. 11FFFH D. 11FFEH 2.在程序运行过程中,确定下一条指令的物理地址的计算表达式是(B ) A. DS×16+SI B. CS×16+IP C. SS×16+SP D. ES×16+DI 3.下面指令执行后,将改变寄存器AX内容的指令是( B)
A. OR AX,AX B. AND AX,BX C. TEST AX,01H D.CMP AX,1 4.设AH=79H,当执行指令ADD AH,98H后,标志位CF和0F的值分别为(D ) A. 0,0 B. 0,1 C. 1,0 D. 1,1 5.设AL=0A0H,要使结果AL=50H,应执行的指令是( D )
A. AND AL,0F0H B. NOT AL C. OR AL,0F0H D. XOR AL,0F0H 6.设AH=68H,当执行指令SUB AH,72H后,标志位CF和SF的值分别为(D ) A. 0,0 B. 0,1 C. 1,0 D. 1,1 7.要使寄存器AL的最低位置1,应使用下面的指令( C )
A. AND AL,01H B. XOR AL,01H C. OR AL,01H D. NOT AL 8.要使BL寄存器的最高位清0,应使用下面的指令( D )
A. AND BL,80H B. OR AL,7FH C. OR BL,80H D. AND BL,7FH 9. 将寄存器AX的内容乘以2的正确指令序列是( A )
A. SHL AX,1 B. SHR AX,1 C. ROL AX,1 D. RCR AX,1 10.下列指令执行后,寄存器AL中的内容为( C ) MOV AL,90H ADD AL,AL ADC AL,AL
A. 20H B. 240H C. 41H D. 241H
3.3 说明下列指令中源操作数的寻址方式。(X1为内存变量,VALUE为常量)
(1) MOV AX,100 ;立即寻址
(2) MOV AX,[BX][SI];基址变址寻址 (3) MOV BX,AX ;寄存器寻址
(4) MOV CX,VALUE[BX];寄存器相对寻址 (5) MOV EBX,ES:[1000H] ;直接寻址 (6) MOV EBX,ECX;寄存器寻址 (7) MOV EBX,ECX;寄存器寻址 (8) MOV BX,[BP];寄存器间接寻址 (9) MOV EBX,2000H;立即寻址
(10) MOV EAX,[EBX+2*ECX];比例变址寻址 (11) MOV AX,X1;直接寻址
(12) MOV AX,VALUE[BX][DI];相对基址变址寻址 (13) MOV SI,[EAX+10H];寄存器相对寻址 (14) MOV DX,[EAX+EBX];比例变址寻址
3.4 试说明下列指令执行完后,寄存器AX或EAX的内容。已知DS=1000H,BX=2100H,SI=02H,DI=01H,ES=SS=2000H,BP=2000H,(12100H)=10H,(12101H)=30H,(12102H)=50H,(12103H)=70H,(22000H)=20H,(22001H)=40H,(22002H)=60H,常量VALUE=01H。 已知DS=1000H
BX=2100H SI=02H DI=01H
ES=SS=2000H
BP=2000H
常量VALUE=01H。
MOV AX,2000H;AX=2000H MOV AX,BX;AX=2100H
MOV AX,[2102H] ;AX=7050H MOV AX,[BX] ;AX=3010H
MOV AX,[BX+01H] AX=5030H MOV AX,[BX][SI] ;AX=7050H MOV AX,[BP][DI] ; AX=6040H MOV AX,ES:[BP] ;AX=4020H
(1) (2) (3) (4) (5) (6) (7) (8)
(9) MOV AX,VALUE[BX][SI] ; AX=0070H
VALUE[BX][SI]= [01H+2100H +02H]=[2103H]=70H
(10) MOV EAX,[2100H] ;EAX=70503010H
3.5 判断下列指令是正确还是错误,错误的请说明原因
(1) MOV DS,1000H ;ⅹ不能为DS赋值
(2) MOV 1000H,AX;ⅹ 立即数不能为目的操作数 (3) MOV EAX,BX;ⅹ 类型不匹配 (4) ADD AX,[CX];√
(5) MOV AX,[BX][BP] ;ⅹ不匹配 (6) MOV BX,AL; ⅹ不匹配
(7) MOV CL,300; ⅹ超出数的表示范围 (8) MOV CS,DS;ⅹ不能为CS赋值 (9) PUSH AL;ⅹ 只能是字或双字
(10)MOV [BX],[SI];ⅹ操作数不能同时是内存操作数
3.6 执行下列指令后,IP和CS的值是多少?已知DS=3000H,BX=4000H,SI=01H,字节单元(24000H)=11H,(34001H)=22H,(34002H)=33H,(34003H)=44H,(34004H)=55H。 (1) JMP BX;IP=4000H
(2) JMP DWORD PTR [BX];IP= 2211H CS=4433H
(3) JMP WORD PTR [BX+01H] ;IP=3322 H,CS=当前段
(4) JMP WORD PTR [BX+SI+02H];IP=5544H, CS=当前段 (5) JMP DWORD PTR [BX] ; IP= 2211H CS=4433H (6) JMP DWORD PTR [BX][SI] ;IP= 3322 H CS=5544H
3.7 下列指令执行后,寄存器AX中的值相同吗?两条传送指令源操作数的寻址方式相同吗?
X1 EQU 100H X2 DB 100H … …
MOV AX,X1 MOV AX,X2
答:AX相同,第一条指令是立即寻址;第二条指令是存储器寻址
3.8 设SS=2000H,SP=1000H,CX=1122H,DX=3344H,执行下列指令序列后AX、BX的值是多少?画出堆栈变化示意图。
PUSH CX
PUSH DX 44H 20FFCH POP AX 33H 20FFDH POP DX 22H 20FFEH 答:AX=3344H;DX=1122H. 11H 20FFFH SP→ 21000H SP→ 执行指令后 3.9 编写程序段,用16位指令将内存中两个双字变量DATA1和DATA2相加,结果保存到内存双字变量DATA3中。
3.10 写出计算下列表达式的指令序列:
(1) (2) (3) (4) W ← X+(Y-Z),X、Y、Z、W为字节变量 W ← X-(Y+10)-(Z+100),X、Y、Z、W为字变量
计算(X*Y-10)/Z,W 1←商,W 2←余数,X、Y、Z、W为无符号字变量 W ←((X-Y)/100+200)*Z,X、Y、Z为带符号字变量,W为双字变量
3.11 编程完成下列功能的程序段
(1) 将寄存器AL的第0、1位清0;
MOV AL,0FFH; AND AL, FcH
(2) 将寄存器AL的第3、4位置1;
MOV AL,00H OR AL,18H
(3) 将寄存器BL的第4,5位变反;
MOV BL,OFFH; XOR BL,30H
(4) 将寄存器AL和BL的内容组合在一起,放在寄存器CX中,AL为高字节,BL为
低字节。 MOV CH,0 MOV CL,BL MOV AH,AL MOV AL,0 OR CX,AX 或
MOV CL,8 SHL AX,CL MOV BH,0 OR AX,BX MOV CX,AX
(5) 将内存字变量X1的两个字节互换
MOV AX, X1 MOV CL,4
ROL/ROR AX,CL
3.12 在内存缓冲区BUFFER中存有一个字符串,编写程序段将其中的第5个字符读到AL中,
其中的第10个字符读到CL中。
3.13 将寄存器AX清零有几种方法?写出具体的指令。
3.14 用16位指令实现:将寄存器对DX:AX中的双字左移3位。
3.15 设AX=5BH,CL=2,CF=1,试确定下列每条指令执行后AX和CF的值。
(1) SHR AX,CL;AX=16H CF=1 AX=5BH= 0000 0000 0101 1011B 0 CF SHR 0000 0000 0001 0110B 11;CF= 1 所以:AX=0016H;CF= 1 (2) SHL AX,CL
(3) SAR AX,CL;AH=16H CF=1 AX=5BH= 0000 0000 0101 1011B
SAR 0000 0000 0000 1011B 11; CF=1 CF
所以:AX=0016H;CF= 1 (4) ROR AX,CL
(5) RCR AX,CL; AX=0C016H;,CF=1 AX=5BH= 0000 0000 0101 1011B
CF
RCR 1100 0000 0001 0110 所以:AX=0C016H;CF= 1
(6) ROL AX,CL
(7) RCL AX,CL;AX=016CH,CF=0 AX=5BH= 0000 0000 0101 1011B CF
RCL 0000 0001 0110 1100
所以:AX=016CH,CF=0 (8) SAL AX,1
3.16 编写程序,将AL中的压缩BCD码转化成非压缩的BCD码,分别存放在BH和BL中。 3.17 分析下面的程序段执行后,寄存器AX和BX的内容分别是多少? MOV AX,1122H MOV BX,3344H PUSH AX PUSH BX POP AX POP BX
答:AX=3344H,BX=1122H
3.18 分析下面的程序段执行后,寄存器AX和BX的值分别是多少? MOV AX,1020H MOV BX,0CDEFH XOR AX,BX XOR AX,BX
3.19 分析下面的程序段执行后,寄存器AX和标志ZF的值分别是多少? MOV AX,BX NOT AX ADD AX,BX INC AX