第三章练习题
一、问答题
1、DB1 DB 5 DUP[ 3 DUP(2),2 DUP(3)]
…
MOV AL,DB1+4
MOV BX,WORD PTR DB1[3]
上面2条指令执行后,(AL)=?(BX)=?
2、下面程序段执行后,寄存器DS,SI的内容分别是多少?
ADR DW 1234H,5678H,0ABCDH
…
LDS SI,ADR+1
MOV BX,WORD PTR DB1[3]
3、下面程序段执行后,寄存器AX,BL的内容是什么?
ARY_W DW 10H DUP(1234H)
ARY_B EQU BYTE PTR ARY_W
…
MOV AX,ARY_W+2
MOV BL,ARY_B+2
4、有下列数据段:
DATA SEGMENT
ORG 30H
CON EQU 10H
S1 DB ‘IBM PC’
DB 0AH,0DH
CONT EQU $-S1
S2 DW ‘IB’,‘M’,‘PC’,0A0DH
DATA ENDS
上述数据段中S1,S2的偏移量分别是多少?CONT的值和S2+5字节单元的内容是多少?
5、设(DX)=80,CF=1
MOV AX,0AA50H
XOR AH,0FFH
OR DH,55H
SBB AX,DX
上述指令序列执行后,(AX)=?,(DX)=?
6、设AX,BX,CX,中均有数据0AAH,下面3条指令执行后,AX,BX,CX中的内容分别是多少? AND AX,-2
OR BX,-2
XOR CX,-2
7、VA_VAR DW 45678
…
MOV AX,DA_VAR
MOV DX,DX
MOV BX,10
LOP: XOR DX,DX
DIV BX
PUSH AX
CMP DX,0
JNE LOP
执行完上述程序段后,向堆栈压了几个数据?按压入的先后顺序指出这些数据。如果PUSH AX指令换成PUSH DX,那么向堆栈压入了几个数据?按压入的先后顺序指出这些数据。
8、DATA1 EQU BYTE PTR DATA2
DATA2 DW 0A987H,3456H
…
SAR DATA+1,1
MOV AX,DATA2+1
SAL DATA2+1,1
MOV BX,DATA2+1
上述指令序列执行后,(AX)=?,(BX)=?,CF=?,以DATA2为首址的两个字单元内容分别是多少?
9、MOV AL,0FH
XOR AL,0FFH
MOV CL,7
SHR AL,CL
上述几条指令执行后,(AL)=?如将SHR指令换成ROR或RCR,那么AL中的内容分别是多少?10、以W1为首址的各字节单元中分别存有数字0~9。下面程序段运行后,以W2为首址的各字节单元中的内容分别是什么?
W1 DB ×, ×, ×, ……
W2 DB $-W1 DUP (0)
…
MOV CX,LENGTH W2
MOV SI,OFFSET W1
MOV DI,OFFSET W2
CLD
LOP: LODSB ;MOV AL,[SI]
;INC SI
ADD AL,’A’
STOSB ;MOV [DI],AL
;INC DI
LOOP LOP
11、下面程序段是使用DOS功能子程序,实现从键盘输入10个数,然后按相反的次序在屏幕上显示出来。请在空白处填上适当指令语句,每一空白只填一条指令语句。
MOV CX,10
LOP1: MOV AH,1
INT 21H
LOOP LOP1
MOV CX,10
LOP2:
MOV AH,2
INT 21H
LOOP LOP2
12、设已定义数据段:
DATA SEGMENT
VAR1 DB ?,?
VAR2 DB ?,?
ADR DW VAR1,VAR2
DATA ENDS
若要使ADR+2单元中存放的内容为0022H,上述空白处应填写什么语句?
13、仔细阅读下面程序,试给出程序运行结束后,BUF2中各字节存储单元的内容。 DATA SEGMENT
BUF1 DW 0102H,0304H,0506H,0708H
COUNT EQU $-BUF1
BUF2 DW 5 DUP(0)
DATA ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA
BEGIN: MOV AX,DATA
MOV DS,AX
MOV BX,0
MOV SI,0
MOV DL,2
LOP1: MOV CX,COUNT/2
LOP2: MOV AL,BYTE PTR BUF1[SI]
MOV BL,AL
ADD AL,BL
MOV BYTE PTR BUF2[BX],AL
INC SI
INC SI
LOOP LOP2
MOV SI,1
DEC DL
JNE LOP1
MOV AH,4CH
INT 21H
COSEG ENDS
END BEGIN
14、TEST DX,01H
JE L1
L1:
上述程序段运行后试DX中的数据形成偶数。如原来已是偶数,DX中内容不变;如DX中原来是奇数,试回答:
(1)用加1形成偶数,这时空白处填一条什么指令?
(2)用减1形成偶数,这时空白处填一条什么指令?
15、DA1 DB 2,3,7,0AH,0FH,4,5,9,8,0CH
…
XOR AX,AX
MOV CL,0
MOV BX,0
LOP: TEST DA1[BX],01H
JE NEXT
ADD AL,DA1[BX]
INC AH
NEXT: INC BX
INC CL
CMP CL,10
JNE LOP
上述程序段执行后,AH和AL中内容分别是多少?
16、AA1 DB 10H DUP(2)
AA2 DW 10H DUP(0304H)
…
MOV BX,0
MOV AL,0
MOV CX,10
BB1: ADD AL,AA1[BX]
ADD AL,BYTE PTR AA2[BX]
INC BX
LOOP BB1
上述程序段运行期间,当执行完INC BX且(BX)=05H时,CX和AL中的内容分别是多少?17、DB1 DB 4 DUP(2,4,6,8)
…
LEA BX,DB1
MOV CX,10H
MOV AX,0
LOP: ADD AL,[BX]
AND AL,0FH
CMP AL,8
JBE NEXT
INC AH
SUB AL,08H
NEXT: LOOP LOP
上述程序段执行后,(AX)=?如果LOOPNE指令替代LOOP指令,那么上述程序段执行后,(AX)=?(CX)=?
18、下面程序段是判断寄存器AH和AL中第3位是否相同,如相同,AH置0,否则AH置非0。试在空白处填上适当的指令(一个空白只填一条指令)。
AND AH,08H
MOV AH,0FFH
JMP NEXT
ZERO: MOV AH,00H
NEXT:……
19、试用两条指令完成对寄存器AH和AL分别加1,且AL加1形成的进位加在AH的最低位,AH中加1形成的进位加在AL的最低位。
20、试编制一程序,把DA_BY1字节存储单元的8位二进制数分解成3个八进制数,其中高位八进制数存放在DA_BY2的字节存储单元中,最低位存放在DA_BY2+2的字节存储单元中。例如数据单元定义如下:
DA_BY1 DB 6BH
DA_BY2 DB 3 DUP(0)
21、试编制已程序,统计DA_WORD数据区中正数、0、负数的个数。数据段为:
DATA SEGMENT
DA_WORD DW -1,3,5,0,-5,-7,4,0,7, …
COUNT1 DB $-DA_WORD
COUNT2 DB 0 ;存放正数的个数
DB 0 ;存放0的个数
DB 0 ;存放负数的个数
DATA ENDS
22、仔细阅读下面程序段,试回答:
(1)该程序段完成的功能是什么?
(2)如(AL)=36H,程序段运行后(AL)=?
MOV BL,AL
AND AL,0F0H
MOV CL,04H
SHR AL,CL
SAL AL,1
MOV CL,AL
SAL AL,1
SAL AL,1
ADD AL,CL
AND BL,0FH
ADD AL,BL
23、下面程序用DOS的1号功能调用从键盘接收字符。试问:
(1)程序运行结束时,如(BL)=0,表示从键盘接收的字符范围是多少?如(BL)=1,表示从键盘接收的字符范围是什么?
(2)程序在什么情况下结束?
LOP: MOV AH,1
INT 21H
CMP AL,’*’
JE EXIT
CMP AL,’9’
JBE ZERO
CMP AL,’A’
JB ONE
CMP AL,’Z’
JBE ZERO
ONE: MOV BL,1
JMP LOP
ZERO: MOV BL,0
JMP LOP
EXIT: MOV AH,4CH
INT 21H