2.执行下列程序: MOV AX,0C100H MOV BX,8FC0H SUB AX,BX JNC L1 JNO L2
JMP SHORT L3 程序执行后,(AX)=( ),程序转向_________________ 答:(AX)=(3140H),L1
四、程序填空(共10分,每题5分)
1.设AX,BX。CX中的数是数带符号,下列程序求AX.BX.CX中的最小值,结果在AX中.请将程序填写完整。
CMP AX,BX
(1)_________________ XCHG AX,BX NEXT:CMP CX,AX
(2)___________________ XCHG AX,CX EXIT: 答:(1)JLE NEXT (2)JGE EXIT
2.下列程序测试DL寄存器D6和D2位。若同时为0,转ZERO,置AX为0,否则转NON_ZERO,置AX为1。
TEST DL,(1)_________________ JZ ZERO
NO ZERO:MOV AX,1 (2)___________________ ZERO:MOV AX,0 EXIT: 答:(1)01000100B (2)JMP NEXT
五、用分支结构完成下列程序:(20分)
在给定个数的数中寻找最大值,放至指定的存储单元。 参考程序:
DATA SEGMENT
BUFFER DB 2,4,3,6,1,5 COUNT DW 6 MAX DB ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX, DATA
16
MOV DS, AX
MOV CX, COUNT LEA BX, BUFFER MOV AX, [BX] INC BX DEC CX
AGAIN: CMP AX, [BX] JGE NEXT MOV AX, [BX] INC BX NEXT: INC BX
LOOP AGAIN CODE ENDS END START 六、编程序:(25分)
已知ARRAY DW 1200,-69H,798AH,???432BH;共10项 编程统计正数项个数存入PLUS单元中。 要求:程序完整,可上机调试 参考程序:
DATA SEGMENT
ARRAY DW 1200,-69H,798AH,~~~432BH PLUS DB ? DATA SEGMENT CODE SEGMENT
ASSUME CS:CODE,DS:DATA BEGIN:MOV AX,DATA MOV DS,AX MOV CX,10 MOV DL,0
LEA SI,ARRAY NEXT: CMP [SI],0 JL P1 INC DL ADD SI,2 LOOP NEXT JMP EXIT P1: ADD SI,2 LOOP NEXT
EXIT: MOV PLUS,DL MOV AH,4CH INT 21H CODE ENDS
END BEGIN
17
第十章 字符串操作
一、单项选择题(共30分,每题6分)
1.在MOVB指令中,其目的串的物理地址为(D)
A.DS*2*2*2*2+SI B.DS*2*2*2*2+DI C.ES*2*2*2*2+SI D.ES*2*2*2*2+DI
2.在串指令REP MOVSB中,重复次数一定放在(C)寄存器中。 A.AX B.BX C.CX D.DX
3.下面指令中,合理而有意义的指令是(D) A.REP LODSB B.REP SCASB C.REP CMPSB D.REP MOVSB
4.串操作指令中,目标串操作数的段地址一定在(D)寄存器中。 A.CS B.SS C.DS D.ES
5.在程序状态字寄存器中,当方向标志DF位为0时,每次操作后使变址寄存器SI和DI(B) A.减量 B.增量 C.保持不变 D.地址减1
二、判断题(正确的画,错误的画)(共10分,每题5分) 1.所有串操作指令的目标串的段地址均取自于段寄存器DS。(×) 2.串操作指令一般用CX存放长度。(√)
三、程序填空题(10分) 现有下列数据段: DATA SEGMENT
S1 DB ‘ABCDEFGHIJKL’ COUNT EQU $-S1
BUF DB COUNT DUP(0) DATA ENDS
下面程序段是实现把S1中所有字符逆向传送到BUF缓冲区(即S1中第一个字符送到BUF的最后一个单元,S1中最后一个字符送到BUF的第一个单元)。试把程序中所空缺的2条指令填上。 MOV SI,OFFSET BUF-1 MOV DI,OFFSET BUF MOV CX,COUNT
(1)________________ L1: MOVSB
(2)________________ LOOP L1 参考答案: (1)CLD
(2)SUB SI,2 或
(1)STD
18
(2)ADD DI,2
四、编程序题(共50分,第1题20分,第2题30分)
1.定义一个数据区,它包含有23H,24H,25H和26H四个字符数据,把这个数据区复制20次,并显示出复制结果。(要求用字符串指令) 参考答案:
DATA SEGMENT
PATTERN DB 23H,24H,25H,26H DISPLAY DB 80 DUP(‘ ’),‘$’ DATE ENDS
CODE SEGMENT ┇ CLD
LEA SI,PATTERN LEA DI,DISPLAY MOV CX,80 REP MOVSB MOV AH,09H
LEA DX,DISPLAY INT 21H RET CODE ENDS
2.内存自BUF单元开始的缓冲区连续存放着100个学生的英文分数,编程序统计其中90~100,60~89,60以下者各有多少人?并把结果连续存放到自RESUT开始的单元中,(要求用字符串指令,各段定义完整) 参考答案:
DATA SEGMENT
BUF DB 40H,64H,51H? RESUT DB 3 DUP(0) DATA ENDS
STACK SEGMENT STACK DB 100 DUP(0) STACK ENDS CODE SEGMENT
ASSUME DS∶DATA,ES∶DATA,SS∶STACK,CS∶CODE START PROC FAR PUSH DS MOV AX,0 PUSH AX
MOV AX,DATA MOV DS,AX MOV ES,AX
MOV、AX,STACK
19
MOV SS,AX LEA SI,BUF MOV CX,100 CLD AO:LODSB
CMP AL,5AH JL L60
INC [RESUT] JMP COM
L60: CMP AL,3CH JGE K8960
INC [RESUT+1] JMP COM
K8960: INC [RESUT+2] COM: LOOP AO RET START ENDP CODE ENDS END START
第十一章 循环程序
一、单项选择题(共10分,每题5分)
1.循环指令LOOP AGAIN终止循环的条件是(C) A.(AX)=0 B.(BX)=0 C.(CX)=0 D.(DX)=0 2.循环指令LOOP NZ终止循环的条件是(B)。 A.CX=0,且ZF=0 B.CX=0,或ZF=1 C.CX≠0,且ZF=0 D.CX≠0,或ZF=1
二、程序分析题(10分) DATA SEGMENT
S9 DB 0,1,2,3,4,5,6,7,8,9 DATA ENDS ┆
LEA SI,S9
LEA, DI,S9+1 MOV CX,5
LOP: MOV AL,[SI] XCHG AL,[DI] MOV [SI],AL ADD SI,2 ADD DI,2 LOOP LOP
上述程序段运行后,S9开始的10个字节存储单元内容是什么?
20