第5章分支、循环程序设计
汇编判断指令本章要点: 转移指令的寻址方式及其执行过程,控制转移类指令的使用,分支和循环程序的设计和应用。程序调试的方法,常见问题的程序设计方法。
一、单项选择题
5.1.1条件转移是根据标志寄存器中的标志位来判断的,条件判断的标志位共有( B )位。
A. 4
B. 5
C. 6
D. 9
5.1.2用一条条件转移指令一次可以实现( A )个分支。
A. 2
B. 3
C. 4
D. N
5.1.3 条件转移指令的转移范围是(A)。
A. -128~127
B. 0~255
C. 0~65535
D. -32768~32767
5.1.4 设A为字变量,B为标号,下列指令中不正确的是(D)。
A. MOV AX,A
B. JNZ B
C. JMP [SI]
D. JMP B[BX]
5.1.5 下述指令中影响CF标志位的是(A)。
A. SHL AL,1
B. MOV AL,1
C. JC L
D. JNC L
5.1.6 下述指令中不影响CF标志位的是(A)。
A. INC SI
B. SUB SI,0
C. NEG AL
D. TEST AL,1
5.1.7 在多重循环程序设计中,每次通过外层循环进入内层循环时,其内层循环的初始条件(B)。
A. 不必考虑
B. 必须重新设置
C. 必须清0
D. 必须置1
5.1.8 当设计一个程序时,最重要的是(B)。
A. 程序的结构化
B. 能使程序正常运行并实现功能
C. 程序的执行速度快
D. 程序占用的存储空间小
*5.1.9 如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一指令的操作码,那么这条指令的位移量是(C)。
A. 1EH
B. 20H
C. 0DEH
D. 0E0H
*5.1.10 如果“JGE P”指令的操作码放在0050H,该指令的位移量是34H,执行完这条指令转移取下一条指令的偏移地址是(C)。
A. 82H
B. 84H
C. 86H
D. 88H
二、填空题
5.2.1 当下面循环程序中的划线处填上一个什么数字时,执行的循环次数最多?
MOV CX,____0______
MOV AX,0
L:INC AX
LOOP L
5.2.2 当两个数进行比较后,执行__JE L(JZ L)表示两数相等则转移到L。
5.2.3 循环程序的基本结构主要由___初始化___、___循环体___和___循环控制___三个部分组成。
5.2.4 循环控制部分的连续两条指令“DEC CX” 和“JNZ L”可以用一条__LOOP L__指令来代替。
5.2.5 分析下面程序段:
ADD AX,BX
JNO L1
JNC L2
SUB AX,BX
JNC L3
JNO L4
JMP SHORT L5
如果AX和BX的初始值为以下5种情况,请问程序段运行后,程序转向哪里?
AX BX转向:
(1)147BH80DCH_____L1________
(2)B568H54B7H_____L1________
(3)42C8H608DH_____L2________
(4)D023H9FD0H_____L5________
(5)94B7H B568H_____L5________
5.2.6 指令MOV AX,A[BX]的源操作数的寻址方式是__相对寻址____;指令JMP DWORD PTR [BX]属于__段间间接____寻址。
三、简答题
5.3.1 简述条件转移指令大体上可以分为哪几类?各在什么情况下使用?
(1)单个标志(2)无符号数(3)带符号数
5.3.2 为了实现程序的多路分支,除了使用条件转移指令,还有哪些多分支的程序设计方法?
跳转表法,地址表法,等
5.3.3在循环程序中,循环控制的方法主要有哪几个?各自在什么情况下使用?
循环次数已知,采用计数循环
循环次数未知,采用条件控制法
四、程序分析题
5.4.1 假设X和X+2单元的内容是双精度数p,Y和Y+2单元存放着双精度数q,其中X和Y中存放低位字,试分析下面程序段的功能。
MOV DX,X+2
MOV AX,X当2p≤q时,AX=2;
ADD AX,X当2p>q时,AX=1。
ADC DX,X+2
CMP DX,Y+2
JL L2
JG L1
CMP AX,Y
JBE L2
L1:MOV AX,1
JMP SHORT EXIT
L2:MOV AX,2
EXIT:INT20H;INT 20H为程序结束中断
5.4.2 在下列程序的括号中分别填入如下指令:
(1)LOOP L20
(2)LOOPE L20
(3)LOOPNE L20
试说明在三中情况下,当程序段执行完后,AX、BX、CX和DX寄存器内容分别是什么?
MOV AX,1
MOV BX,2
MOV DX,3
MOV CX,4
L20:INC AX
ADD BX,AX
SHR DX,1
()
5.4.3 现有程序段如下:
BUF DB12H,56H,23H
LEA SI,BUF
MOV AL,[SI]
MOV BL,[SI+1]
MOV CL,[SI+2]
CMP AL,BL
JAE N1
XCHG AL,BL N1: CMP AL,CL
JAE N2
XCHG AL,CL
N2: CMP BL,CL
JAE N3
XCHG BL,CL
N3:MOV[SI],AL
MOV[SI+1],BL
MOV[SI+2],CL
请回答:(1)该程序完成的功能是_____将BUF中的3个无符号数从大到小排序______;
(2)程序运行后,BUF中的内容依次是____56H,23H,12H_____________。
5.4.4 现有程序段如下:
BUF DB0D2H
S DB?
:
MOV AL,BUF
TEST AL,80H
JZ L
NEG AL
L: MOV S,AL
MOV AH,4CH
INT21H
请回答:(1)该程序完成的功能是________求BUF的绝对值___________;
(2)程序运行后,S中的内容为_______2EH__________________。
5.4.5 现有程序段如下:
NUM DB30H,54H,07H,11H,68H,98H,8BH,0,56H
SUM DW?
MOV SI,OFFSET NUM
MOV AX,0
NEXT: CMP[SI],BYTE PTR 0 JZ NDO
ADD AL,[SI]
ADC AH,0
INC SI
JMP NEXT NDO: MOV SUM,AX
请回答:(1)该程序完成的功能是___NUM中0前面的数求和______227H____;
(2)如果删除程序中的指令“ADC AH,0”,则程序的运行结果如何?
____丢失进位,27H__________________________。
5.4.6 现有程序段如下:
STR0DB'ZERO',13,10,'$' STR1DB'ONE',13,10,'$' STR2DB'TWO',13,10,'$' STR3DB'THREE',13,10,'$' X DB02H
TAB DW D0,D1,D2,D3
LEA BX,TAB
MOV AL,X
AND AL,3;*
MOV AH,0
SHL AX,1
ADD BX,AX
JMP WORD PTR [BX] D0:LEA DX,STR0
JMP EXIT
D1: LEA DX,STR1
JMP EXIT
D2:LEA DX,STR2
JMP EXIT
D3: LEA DX,STR3 EXIT: MOV AH,9H
INT21H
MOV AH,4CH
INT21H
请回答:(1)该程序完成的功能是_ 根据X中的数值(0,1,2,3)分别显示不同的字符串(zero,one,two,three)_;(2)程序运行后显示输出的是什么?_______two____________;(3)程序中指令“AND AL,3”的作用是什么?__将X中的数值限制在0~3的范围内_。
5.4.7 现有程序段如下:
:
ARRAY DW1234H,5678H,9ABCH,-90,0,-234,1234,89,57ADH,0BC3H
LEN EQU$-ARRAY
MAX DW?
MIN DW?
:
LEA BX,ARRAY
MOV MAX,-32768
MOV MIN,32767
MOV CX,LEN
SHR CX,1 AGAIN: MOV AX,[BX]
CMP MAX,AX
JNL NEXT1
MOV MAX,AX NEXT1: CMP MIN,AX
JNG NEXT2
MOV MIN,AX NEXT2: ADD BX,2
LOOP AGAIN
:
请回答:
(1)该程序完成的功能是________在ARRAY数组中出最大最小数________;
(2)程序运行后,MAX和MIN单元中的内容分别为为_57AD__H和_9ABC_H。
5.4.8 现有程序段如下:
BUF DW18 DUP(?)
LEA SI,BUF
MOV CX,18
MOV AX,0
MOV BX,1LOP:MOV[SI],AX
MOV DX,AX
ADD AX,BX
MOV BX,DX
ADD SI,2
LOOP LOP
请回答:(1)该程序完成的功能是_______在BUF缓冲区中产生斐波那契数列________;
(2)程序运行后,BUF中的前10个数的内容为__0,1,1,2,3,5,8,13,21,34_____。
五、程序填空题
5.5.1 下面的程序段是判断两个无符号字数据X和Y的大小,当X>Y时计算X-Y,当X<Y时计算Y-X,当X=Y时计算X+Y,运算后的结果存入字变量W中。请在程序的空格处填写适当的指令。
MOV AX,X
MOV BX,Y
CMP AX,BX
__JA L__;(1) JB M
ADD AX,BX
__JMP DOWN__;(2)L:__SUB AX,BX__;(3)
JMP DOWN
M:XCHG AX,BX
SUB AX,BX DOWN:MOV W,AX
MOV AH,4CH
INT21H
5.5.2 下面的程序是将BUF1缓冲区的有符号字节数据中小于100的数送BUF2自己字节缓冲区中保存。请在程序的空格处填写适当的指令。
BUF1 DB 12H,56H,9DH,0D7H,0,45H,78H,89H,0F5H,60H
COUNT EQU $-BUF1
BUF2 DB COUNT DUP(?)
MOV SI,OFFSET BUF1
_MOV DI,OFFSET BUF2_;(1) LEA DI,BUF2
MOV CX,COUNT
L: MOV AL,[SI]
CMP AL,100
_JGE NEXT_____;(2) 或JNL,不可用JAE、JNC
MOV [DI],AL
_INC DI________;(3)
NEXT: INC SI
LOOP L
5.5.3 下面的程序是是统计以0为结尾的STR字符串中大写字母、小写字母、数字和非数字字母的个数,分别送A、B、C、D字节单元保存。请在程序的空格处填写适当的指令。
STR DB'12+34/QWeRas?.Df"56UiOPj..kA[,%78ZcB&M=huzl9',0
A DB?
B DB?
C DB?
D DB?
LEA SI,STR AGAIN:MOV AL,[SI]CMP AL,0
__JE EXIT__;(1) CMP AL,30H

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。