B: JMP BYE: ……
A
试说明该程序段完成的功能。
该程序段完成的功能是统计AX中1的个数。 27、试分析下面的程序段完成什么功能?
MOV CL,04
SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL
程序功能:将(DX)(AX)中双字内容左移4位。 28、DA1 DB ?01234?
DA2 DB 5DUP(0) MOV SI,0 MOV CX,5
LOP:MOV AL,DA1[SI]
ADD AL,11H OR AL,01H
MOV DA2 [SI],AL INC SI LOOP LOP
1) 程序执行完后,写出DA2各字节的数据。
2) 程序中MOV AL,DA1[SI]指令的操作数是什么寻址方式? 1)41H,43H,43H,45H,45H;2)寄存器相对寻址
29、在某子程序的开始处要保护AX、BX、CX、DX四个寄存器信息,在子程序结束时要恢复这四个寄存器信息。例如:
PUSH AX
PUSH BX ;保护现场 PUSH CX PUSH DX ……
;恢复现场
试写出恢复现场时的指令序列。 POP DX POP CX POP BX POP AX
30、指出下列指令源操作数的寻址方式: MOV AX,ES:[BX] 寄存器间接寻址方式 MOV AX,20[BX+SI] 相对基址变址寻址方式 MOV AX,ARRAY 直接寻址方式 MOV AX,[BX+DI] 基址变址寻址方式 MOV AX,1200H 立即寻址方式
程序填空题
1、下述程序段完成计算2~20之间的偶数的和,并将结果存于AX中,试把空白处填上适当的指令(每一空白只填一条指令) XOR AX,AX MOV BX,0 MOV CX,11 CONT:ADD AX,BX ADD BX,2 LOOP CONT
(第一空MOV CX,11,第二空ADD BX,2) 2、下面程序段判断A单元的有符号数,并根据其值小于0,等于0,大于0,分别将0FFH,00H,01H送入B单元中。在空白处填上适当的指令(每一空白处只填一条指令) MOV AL,A CMP AL,0 JLE AA
MOV B,1
JMP DONE AA: JL BB MOV B,0 JMP DONE BB: MOV B,0FFH DONE:HLT
(第一空JLE AA,第二空JMP DONE)
3、下列程序段的功能是把0~9的数据转换为相应的ASCII码。请在每个空白处填上一条指令。 DAT DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H ASC DB 10 DUP(?) COUN=ASC-DAT LEA SI,DAT
LEA DI,ASC MOV CX,10 LOP:MOV AL,[SI]
ADD AL,30H MOV [DI],AL INC SI INC DI LOOP LOP HLT
(第一空MOV CX,10,第二空 ADD AL,30H或OR AL,30H)
4、下面程序完成将0100H开始的100个字节数据搬移到从0180H开始的存储单元中,设DS、ES已设置好且其值相等。在每个空白处填上一条适当的指令。
MOV SI,0100H MOV DI,0180H MOV CX,100 CLD
REP MOVSB
(参考答案MOV CX,100、REP MOVSB)
5、设字符串的段地址、偏移地址和长度已经分别存于DS、SI和CX中,要统计其中字符“P”的个数,并存于DL中。试把空白处填上适当的指令(每一空白只填一条指令) MOV AL,?P? MOV DL,0 NEXT:CMP AL,[SI] JNZ/JNE CONT INC DL CONT:INC SI LOOP NEXT (第一空JNZ/JNE CONT,第二空 LOOP NEXT)
6、某程序段要用单个字符显示的2号DOS功能调用去显示一字符串“STRING”。试在下面空白处填上适当的指令
STR1 DB ‘STRING’,’$’ ?? ?? ??
MOV BX,OFFSET STR1 LOP:MOV DL,[BX] MOV AH,02H INT 21H INC BX
__ CMP [BX],‘$’ JNE LOP
(第一空 INC BX,第二空 CMP [BX],‘$’)
7、在以BLOCK为首地址的数据区存放了一组带符号数,下面程序的功能将该数据中所有的负数累加起来,然后再求其绝对值,并送入SUM单元。试在程序中填补上空缺的指令。
DATA DB 60,70,-28,-99,-100,-25,?,97 SUM DW ?
MOV CX,SUM-DATA XOR DX,DX
MOV BX,OFFSET DATA LOP: MOV AL,[BX] TEST AL,80H JZ NEXT CBW
ADD DX,AX NEXT:INC BX
LOOP LOP
NEG DX MOV SUM,DX
(第一空 JZ NEXT,第二空 NEG DX)
8、在以ARRAY为首地址的数据区存放了一组带符号数,下面程序的功能将该数据中所有的负数送入ARRAY1数据区,其余送入ARRAY2中。试在程序中填补上空缺的指令
ARRAY DB 25,63,-103,2,75,75,-1,-65,?,100 N EQU $-ARRAY ARRAY1 DB N DUP(?) ARRAY2 DB N DUP(?) ??
MOV CX,N MOV BX,0 MOV SI,0 MOV DI,0
LOP: MOV AL,ARRAY[BX] CMP AL,0 JAE NEXT1
MOV ARRAY1[SI],AL INC SI JMP NEXT2
NEXT1:MOV ARRAY2[DI],AL INC DI NEXT2:INC BX LOOP LOP
(第一空 MOV ARRAY1[SI],AL; 第二空 MOV ARRAY2[DI],AL)
9、下述程序段完成计算1+2+?+10的和,并将结果存于AX中,试把空白处填上适当的指令(每一空白只填一条指令) XOR AX,AX MOV BX,0 MOV CX,11 CONT:ADD AX,BX INC BX LOOP CONT
参考:MOV CX,11;LOOP CONT
10、下述程序段完成计算2~20之间的偶数的和,并将结果存于AX中,试把空白处填上适当的指令(每一空白只填一条指令)
XOR AX,AX MOV BX,0 MOV CX,11 CONT:ADD AX,BX
ADD BX,2 LOOP CONT
MOV CX,11;ADD BX,2
11、下列程序段的功能是把0~9的数据转换为相应的ASCII码。请在每个空白处填上一条指令。
DAT DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H ASC DB 10 DUP(?) CON=ASC-DAT LEA SI,DAT
LEA DI,ASC
MOV CX,CON LOP:MOV AL,[SI] ADD AL,30H
MOV [DI],AL INC SI INC DI LOOP LOP HLT
MOV CX,CON;ADD AL,30H或OR AL,30H
12、某程序段要用单个字符显示的2号DOS功能调用去显示一字符串“STRING”。试在下面空白处填上适当的指令
STR1 DB ‘STRING’,’$’ ?? ?? ??
MOV BX,OFFSET STR1 LOP:MOV DL,[BX] MOV AH,02H INT 21H (1)
(2)
JNE LOP (1)INC BX (2)CMP BX,?$? 13、设字符串的段地址、偏移地址和长度已分别存于DS、SI和CX中,要统计其中字符“P”的个数,并存于DL中。试把空白处填上适当的指令。
MOV AL,‘P’ MOV DL,0 NEXT:CMP AL,[SI] JNE CONT INC DL CONT:INC SI LOOP NEXT 1)JNE CONT或JNZ CONT;2)LOOP NEXT
14、下面程序段完成用串指令在DA1开始的26个字节单元中依次存放A-Z的ASCII码,在DA2开始的26个字节单元中依次存放Z-A的ASCII码,请在横线处各填一条指令。 DA1 DB 26 DUP(?)