精彩网站 http:// www.iquwu.com
……
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
31
精彩网站 http:// www.iquwu.com
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[B X] , 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次
32
精彩网站 http:// www.iquwu.com
上述程序段运行期间,当执行完 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
33
精彩网站 http:// www.iquwu.com
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 TAB9 DB 9,18,27,36,45,54,63,72,81 MUL1 DB 3 MUL2 DB 6 PROD DB 0 DATA ENDS 解:
MOV BX,OFFSET DA1 MOV DL,MUL1 DEC DL MOV DH,00H ADD BX.DX MOV AL,MUL2 DEC AL MUL AL,9 ADD AL,DL ADD BX,AX MOV AL,[BX]
34
精彩网站 http:// www.iquwu.com
MOV PROD,AL
27. 试编写一程序,把DA_BY1字节存储单元的8位二进制数分解为3个八进制数,其中字高位八进制数存放在DA_BY2的字节单元中,最低位存放在DA_BY2+2单元中.例如数据单元定义如下:
DA_BY1 DB 6BH
DA_BY2 DB 3 DUP(0) 解:
LEA DI , DA_BY+2
MOV AL , DA_BY1
XOR AH , AH MOV DL , 3 MOV CL , 3 SHL AX , 3 LOP: SHR AL , CL PUSH AX
AND AL , 7 MOV [DI] , AL DEC DI DEC DL POP AX JNZ LOP
29.试编制一程序,统计DA_WORD数据区中正数, 0 , 负数的个数.数据区为: DATA SEGMENT
DA_WORD DW - 1,3,5,0, - 5, -7, - 4,0, -7, …… COUT1 DB $ - DA_WORD
COUT2 DB 0 ; 存放正数的个数
DB 0 ; 存放0的个数 DB 0 ; 存放负数的个数 解:
MOV BX , OFFSET DA_WORD ;BX指向数据区 MOV CX , COUT1 ;设置循环次数
LOP: MOV AX , [BX] ;取数
35