第三章习题和思考题
一、填空题
1、对于指令XCHG BX, [BP+SI],如果指令执行前,(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=154H,(2F247H)=41 H,则执行指令后:(BX)=__4154H__,(2F246H)=___30H______,(2F247H)=___6FH____。
2、指令LOOPZ/LOOPE是结果_为零_且_相等发生转移的指令;而指令LOOPNZ/LOOPNE则是结果__不为零__且____不相等___发生转移的指令。
3、串操作指令规定源串在____数据_____段中,用__SI___来寻址源操作数;目的串在__附加__段中,用__DI__来寻址目的操作数。
4.、中断返回指令IRET后,从堆栈顺序弹出3个字分别送到___IP____、__CS_____、____标志寄存器FR____。
5、设(SS)=0FFA0H,(SP)=00B0H,(AX)=8057H,(BX)=0F79H,执行指令PUSH AX 后,(SP)=__00AEH________;若再执行指令:
PUSH BX
POP AX
后,(SP)=__00AEH________,(AX)=____0F79H________,(BX)=___0F79H_____。
6、设(SS)=2250H,(SP)=0140H,若在堆栈中存入5个数据,则栈顶的物理地址为___22636H________,如果再从堆栈中取出3个数据,则栈顶的物理地址为_____2263CH____。
7、M OV AL, ‘A’指令的源操作数的寻址方式为__立即寻址方式________。
8、指出下列指令源操作数的寻址方式:
(1).MOV AX, BLOCK[SI] 寄存器相对寻址方式
(2).MOV AX, [SI] 寄存器间接寻址方式
(3).MOV AX, [6000H] 直接寻址
(4).MOV AX, [BX+SI] 基址变址寻址
(5).MOV AX, BX 寄存器寻址
(6).MOV AX, 1500H 立即寻址
(7).MOV AX, 80[BX+DI] 相对基址变址
(8).MOV AX, [DI+60] 寄存器相对寻址
9、以CX寄存器内容为计数对象的指令有循环控制指令和串操作重复指令。
10、输入/输出指令间接寻址必须通过___DX____寄存器。
11、近过程(NEAR)的RET指令把当前栈顶的一个字弹出到____IP_;远过程(FAR)的RET指令弹出一个字到___IP____后又弹出一个字到___CS___。
二、选择题
1、JMP NEAR PTR[DI]是____A______。
A. 段内间接转移
B. 段间间接转移
C.段内直接转移
D.段间直接转移
2、INC 指令不影响_____B____标志
A. OF
B.CF
C.SF
D. ZF
3、条件转移指令JNE的测试条件是___C________。
A. ZF=1
B.CF=0
C.ZF=0
D.CF=1
4、对于下列程序段:
AGAIN: MOV AL, [SI]
MOV ES:[DI], AL
INC SI
INC DI
LOOP AGAIN
也可用指令_____A____完成同样的功能
A.REP MOVSB
B. REP LODSB C, REP STOSB D. REPE SCASB
5、交换寄存器SI和DI的内容,正确的程序段是_A C___。
A. PUSH SI
B. PUSH SI
PUSH DI PUSH DI
POP SI POP DI
POP DI POP SI
C. MOV AX, SI
D. MOV AX, SI
MOV SI, DI MOV BX, DI
MOV DI, AX XCHG BX, AX
6、在ADD指令中,两个操作数的物理地址可以安排在__B C D_______中。
A. 在两个存储单元中
B. 一个存储单元和一个数据寄存器
C. 两个数据寄存器
D. 一个堆栈单元和一个数据寄存器
7、将字变量ARRAY的偏移地址送寄存器BX的正确结果是__A C___。
A. LEA BX, ARRAY
B. MOV BX, ARRAY
C. MOV BX, OFFSET ARRAY
D. MOV BX, SEG ARRAY
8、实现将AL寄存器的低4位置1的指令是____B___。
A. AND AL, 0FH
B. OR AL, 0FH
C. TEST AL, OFH
D. XOR AL, 0FH
9、采用BCD码表示的十进制数计算时,先调整后运算的有_____D______。
A. 加法
B. 减法
C. 乘法
D. 除法
10、十进制调整指令AAA____B D______。
A. 跟在SUB或SBB之后
B. 跟在ADD之后
C. 跟在MUL或ADC之后
D. 跟在ADD或ADC之后
三、编程题
1、下面程序是查找STRING中是否有”A”这个字符,如果有则转向YES去执行;没有则转向NO去执行。
请将程序填充完整。
;假设STRING的长度为20
MOV CX, 20
MOV BX, -1
MOV AL, “A”
NEXT: (1)___INC________BX
CMP AL, STRING[BX]
(2)__LOOPNE_______NEXT
JNZ (3)__NO_________
YES: …….
…….
JMP (4)____EXIT________
NO: ……
……
EXIT: RET
2、试编程实现:
(1)AL寄存器的低4位清零AND AL, 0F0H
(2)BL寄存器的低4位置1 OR BL, 0FH
(3)CL寄存器的低4位取反XOR CL, 0FH
(4)测试DL寄存器的最低两位是否为0,若是将0送AL寄存器;否则将1送入AL寄存器
TEST DL ,03H
JZ P1
MOV AL, 1
JMP P2
P1: MOV AL, 0
P2: HLT
3、试编程统计在AX寄存器中有多少个1,并将结果送DL寄存器中。
.MODEL TINY
.CODE
.STARTUP
MOV DL, 0
MOV CL, 16
AGAIN: ROL AX, 1
JNC NEXT
INC DL
NEXT: DEC CL
JNZ AGAIN
.EXIT
END
4、试编程统计在内存BLOCK单元开始按字节存放的100个带符号数中有多少负数,并将结果存放在DL寄存器中。
.MODEL SMALL
.DATA
BLOCK DB1, -2, 5, 6, -57, ……; 100个带符号数
.CODE
.STARTUP
MOV DL, 0
LEA BX, BLOCK
MOV CX, 100
AGAIN: CMP BYTE PTR [BX], 0
JGE NEXT
INC DL
NEXT: INC BX
LOOP AGAIN
.EXIT
END
P。