VAR2 DB ? , ? ADR DW VAR1,VAR2
DATA ENDS
若要使ADR+2 字单元的内容为0022H, 上述空白处应填写什么语句? 解:上述空白处应填写 ORG 0020H
17.现有下列程序段:
MOV SI , OFFSET SOUR MOV DI , OFFSET DEST
MOV CX , 20H CLD
REP MOVSW
如果上述程序段不使用串操作指令(即取消REP MOVSW指令), 试修改程序段,完成原程序段功能. 解:
MOV SI , OFFSET SOUR
MOV DI , OFFSET DEST MOV CX , 20H LOP:MOV AX , [SI] MOV [DI] , AL INC SI INC SI INC DI INC DI
LOOP LOP
18. 下面是两个字符串的比较程序,比较结果存放在RESULT单元中.试问: (1) 程序运行后,结果单元(RESULT)存放的内容表示什么意义? (2) 如SJ1的字符串为?captial‘,SJ2的字符串为?captive‘时,(RESULT)=?
……
SJ1 DB ?…………‘ SJ2 DB ?…………‘ RESULT DB 0 ……
LEA BX , SJ1 LEA DI , SJ2 CLD LOP: MOV AL , [BX] SCASB JNE EXIT INC BX JMP LOP EXIT: SUB BX,OFFSET SJ1
MOV RESULT , BL
答:(1) (RESULT)存放的内容表示SJ1字串中第一个不同于SJ2字串的对应字符的偏移量(相对于SJ1).
(2) (RESULT) = 5
19. 仔细阅读下面程序,试给出程序运行结束后BUF2各字节存储单元的内容。 DATA SEGMENT
BUF1 DW 0102H,0304H,0708H COUNT EQU $ - BUF1
BUF2 DW 5 DUP(0) DATA ENDS COSEG SEGMENT
ASSUME CS:COSEG, DS,DATA BEING: 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 4CH INT 21H COSEG ENDS
END BEING
20. TEST DX , 01H
JE L1
L1: ……
上述程序段运行后使DX中的数据形成偶数,如原来已是偶数,DX中内容不变;如DX中原来是奇数,试回答:
(1)用加1形成偶数,这时空白处应填一条什么指令? INC DX
(2)用减1形成偶数,这时空白处应填一条什么指令? DEC DX
21.DA1 DB 2,3,7,0AH,0FH,4,5,9,8,0CH XOR AX , AX ; AX=0 MOV CL , 0 ; CL-0
MOV BX , 0 ; BX=0
LOP: TEST DA1[BX] , 01H ;测试存储单元的数据是否偶数 JE NEST ; 是偶数,则跳转 ADD AL , DA1[BX] ;是奇数,将其累加
INC AH ; 计算奇数个数 NEXT:INC BX ;指向下一个存储单元 INC CL ;数据个数计数器
CMP CL , 10 ;运行后,(AL)=奇数之和=39=27H JNE LOP ;(AH)=10 上述程序运行后,AH和AL的内容分别是多少?
22. 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 ;循环10次 上述程序段运行期间,当执行完 INC BX 且 (BX)=05H时,CX和AL中的内容分别是多少? 解:(AL)=2+4+2+3+2+4++2+3+2+4=28=1CH , (CX)=6 23.
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)=?
解:
由上表可知道,上述程序段执行后,(AX)=0600H,(CX)=0
如果LOOPNE指令替代LOOP指令,那么上述程序段执行后,(AX)=0300H (CX)=8
24. 下面程序段是判断寄存器AH和AL中第三位是否相同,如相同,AH置0,否则AH置非0。试在空白处填上适当的指令(一个空白处只填一条指令)。
AND AH , 08H
MOV AL , 0FFH JMP NEXT ZERO: MOV AH , 00 NEXT: ……
25. 试用两条指令完成对寄存器AH和AL分别加1,且AL中加1形成的进位加在AH最低位,AH中形成的进位加在AL的最低位.
解: INC AX , 0101H
ADC AL , 0
26. 在数据段中有一乘法表(TAB1~TAB9),乘数和被乘数分别在MUL1和MUL2的字节单元中.试编写一程序,用查表法求出(MUL1)*(MUL2)的乘积.数据段如下: DATA SEGMENT
TAB1 DB 1,2,3,4,5,6,7,8,9 TAB2 DB 2,4,6,8,10,12,14,16,18 TAB3 DB 3,6,9,12,15,18,21,24,27 TAB4 DB 4,8,12,16,20,24,28,32,36 TAB5 DB 5,10,15,20,25,30,35,40,45, TAB6 DB 6,12,18,24,30,36,42,48,54 TAB7 DB 7,14,21,28,35,42,49,56,63 TAB8 DB 8,16,24,32,40,48,56,64,72