AGN:INC AX ADD BX,AX SHR DX,1
LOOPE AGN
2.下列指令执行完后,AX= 4004H ,BX= CX中为 有/ 带 符号数 JE L2
MOV SI,1 ;当BX 〈 CX时执行该分支 JMP EXIT
01B4H 。
MOV AX,1100H MOV BX,6D16H MOV CL,06H ROL AX,CL SHR BX,CL
3.下列指令执行完后,AX= 4620H 。
MOV AX,0119H MOV CH,AH ADD AL,AH DAA
XCHG AL,CH ADC AL,45H DAA
MOV AH,AL MOV AL,CH
4.下列指令执行完后,AX= 0030H 。 MOV AX,2030H AND AX,00FFH 5.下列指令执行完后,AL= 50H 。
MOV AL,45H MOV CL,4 SHL AL,CL HLT
6.阅读程序,在空白处填空。 CMP BX,CX
JG L1 ;从本指令可知,BX、
9.已知数据段定义如下: DATA SEGMENT
C1 DW ‘A3’,3AH C2 DB 2DUP(4,‘B’)
C3 EQU $-C1 C4 DW 4321H,C3 DATA ENDS 请解答下列问题:
①画出数据段在主存中的存放形式示意图。 ②在下列各指令之后的空白处写出执行结果。
MOV AL,C2-2;AL= 3AH MOV BL,C2+4 ;BL= 21H MOV CX,C1+3 ;CX= 0400H
L1:MOV SI,2 ;当BX 〉 CX时执行该分支 JMP EXIT
L2:MOV SI,3 ;当BX = CX时执行该分支
EXIT:┆
7.下列程序执行完后,AX= 7498H 。
MOV AX,6264H
AND AX,AX
JNZ DONE SHL CX,3 ROR AX,CL
DONE:ADD AX,1234H
HLT
8.下列程序执行完后,AX= 6912H 。
MOV AX,5678H MOV BX,1234H 33H 41H ADD AL,BL C1 DAA
MOV 3AH MOV ADC CLALAL,AL ,,AH C2 00H 04H DAA
BH MOV AH,AL 42H MOV HLT
AL,CL C4 04H 42H 21H MOV DX,C4+2 ;DX= 0008H 10.阅读如下程序并回答问题
①主程序运行之后,以BUFB为首址的字节存储区中的内容是什么? 90、91、88、99、68(以 BUFB 为首址的字节存储区有5个单元) ②如果主程序中漏写了“INC DI”,运行结果 如何? 68、0、0、0、0 STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT
BUFA DB 10,20,30,50,90,60
9
DB 11,21,31,51,91,61
DB 22,24,69,88,12,10
DB 30,32,34,39,40,99
DB 40,48,68,41,40,41
M=6 N=5
BUFB DB N DUP(0)
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX LEA SI,BUFA LEA DI,BUFB MOV CX,N MOV DX,M LOPA: CALL FMAX MOV [ DI ],AL INC DI ADD SI,M LOOP LOPA MOV AH,4CH INT 21H FMAX PROC ┇ ┇ FMAX ENDP CODE ENDS END START
子程序FMAX的功能是从M个8位无符号二进制数中找出最大者送入AL中。入口参数:DX=M,SI=M个数的存储区首址,出口参数:AL=M个数中的最大者,SI未变。注:子程序FMAX不破坏主程序的工作现场。
11.下列指令执行完后,AX= 0020H
TABLE DW 1000H,2000H,3000H,4000H,5000H ENTRY DW 3
|
MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[ BX ] HLT
12.什么情况下,下段程序执行结果是AH=0?从5FH端口输入的数大于7FH时,则AH=0 BEGIN:IN AL,5FH TEST AL,80H JZ BRCH1 MOV AH,0
JMP STOP
BRCH1:MOV AH,0FFH
STOP: HLT
13.执行下列指令后,AX=? 3000H TABLE DW 10H,20H,30H,40H,50H ENTRY DW 03H
┊
MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[BX] 14.有符号定义语句如下:
BUFF DB 1,2,3,‘123’ EBUFF DB 0 L EQU EBUFF-BUFF 问L的值为多少? 6
15.执行下面的程序段后,AL=?35 MOV CX,5 MOV AX,50 NEXT:SUB AX,CX LOOP NEXT HLT
16.阅读分析如下子程序,回答问题。
TEST7 PROC FAR PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,AX MOV AH,2 MOV CX,16 LOP1: MOV DL,0
10
SHL BX,1 RCL DL,1 ADD DL,30H INT 21H LOOP LOP1 MOV DL,‘B’ INT 21H POP DX POP CX POP BX POP AX RET TEST7 ENDP
①简述子程序TEST7的功能;(将AX中的内容以二进制形式显示出来)
②如下两条指令 MOV AX,8ADEH CALL TEST7
的执行结果是什么? 1000101011011110B
若将8ADEH改为-74A6H,运行结果如何?
③若漏写指令“POP AX”,子程序TEST7
能正确返回吗?为什么?
(不能正确返回) (因为PUSH和POP指令
不成对,堆栈指针改变了) 17.阅读程序,回答问题。 ┊ MOV AH,1 INT 21H CMP AL,‘0’ JB LN
CMP AL,‘9’ JA LN MOV DL,1 AND AL,30H
MOV DH,AL SHL DH,1 SHL AL,1 MUL DH JMP EXIT LN: MOV DL,0 EXIT:┊
①若输入数字9,运行之后AX=?(2400H),DL=?(1)
②若输入字符A,运行之后AX=?(0141H),DL=? (0)
编程题
1.编程比较AX、BX、CX中带符号数的大小,将最大的数放在AX中。 CMP AX,BX JGE NEXT XCHG AX,BX NEXT:
CMP AX,CX JGE DONE
XCHG AX,CX DONE:
HLT
2.若自当前数据段偏移地址为0100H开始的内存中,有100个带符号数(16位)要找出其中的最大值,把它存放在当前数据段偏移地址为1000H内存中。 MOV BX,0100H MOV AX,【BX】 INC BX INC BX MOV CX,99 AGAIN:CMP AX,【BX】
JG NEXT MOV AX,【BX】 NEXT:
INC BX INC BX DEC CX JNZ AGAIN MOV 【1000H】,AX
HLT 3.若有两个多字节数NA和NB,每一个是16位十进制数,NA放在现行数据段偏移地址从1000H开始的存储区中,NB放在现行数据段偏移地址从2000H开始的存储区中,都是最低字节在前,相加后的和
11
放在3000H开始的存储区中(一个字节表示两位十进制数)。
MOV BX,1000H
MOV CX,8
CLC
AGAIN: MOV AL,【BX】
ADC AL,【BX+1000H】
DAA
MOV 【BX+2000H】,AL
INC BX DEC CX JNZ AGAIN HLT
4.将当前数据段中,偏移地址为2500H中的100个字节数据传送到当前数据段首地址为1400H开始的单元中。 CLD PUSH DS POP ES MOV CX,100 MOV SI,2500H MOV DI,1400H REP MOVSB
5.试比较上例中两串是否完全相同。若两串相同,则BX内容为0;若两串不同,则BX指向源串中第一个不相同字节的地址,且该字节的内容保留在AL中。
CLD
JZ EQQ
PUSH DS
DEC SI
POP ES
MOV BX,SI
MOV CX,100
MOV AL,〖SI〗 MOV SI,2500H JMP STOP
MOV DI,1400H EQQ:
MOV BX,0
REPE CMPSB STOP:
HLT
6.要求在某字符串中查找是否存在“$”字符,若存在,将“$”字符所在地址送入BX中,否则将BX清零。(字符串位于当前数据段偏移地址为2500H的单元中) CLD PUSH DS POP ES
MOV DI,2500H
MOV AL,‘$’ ;在DEBUG状态下,只能写为MOV AL,24H
MOV CX,100 REPNZ SCASB JZ FOUND MOV BX,0 JMP DODE FOUND:DEC DI
MOV BX,DI
DONE:HLT
7.编写程序,用空格符将从4000H:0000H开始的100个内存单元中的内容全部清除。
CLD MOV AX,4000H MOV ES,AX MOV CX,100 MOV AL,20H MOV DI,0 REP STOSB
HLT
8.有一个字符串存放在当前数据段偏移地址为1000H开始的单元中,长度为100,编写程序将字
符串中的 &字符用空格符代替。
MOV SI,1000H
MOV CX,100
L1:CMP BYTE PTR【SI】,26H
12