预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共47页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第5章循环与分支程序设计分支结构子程序结构DO-WHILE结构DO-UNTIL结构5.2分支程序设计一、循环指令LOOPLoop指令程序代码: codesegment assumecs:code start:movax,2 movcx,10 s:addax,ax loops movax,4c00h int21h codeends endstart例3.80:求首地址为ARRAY的M个字之和(不考虑溢出),结果存入TOTAL(ARRAY和TOTAL都被定义为字变量)例:编制程序将存放在首地址为ARRAY的字符串“happynewyear”向高地址方向移动一个字节的位置请描述下列程序的功能二、可提前结束的循环指令 功能格式测试条件 当为0或相等时循环LOOPZ/LOOPE标号ZF=1且(CX)≠0 不为0或不相等循环LOOPNZ/LOOPNE标号ZF=0且(CX)≠0 执行步骤: (1)(CX)←(CX)-1 (2)检查是否满足测试条件,如满足则实现循环; 不满足则退出循环。 注意: *CX中存放循环次数 *与比较指令CMP联合使用可提前退出循环。 例:编制程序查找存放在首地址为string的字符串中的字母“n”,找到则将其改为大写的“N”,没找到则结束程序三、控制转移指令: 8086CPU的转移指令分为: 1、无条件转移指令(jmp) 2、条件转移指令(jxx) 3、循环指令loop 4、子程序调用与返回 5、中断int 1、无条件转移指令:JMP 段内直接短转移:JMPSHORTOPR 执行操作:(IP)←(IP)+8位位移量 段内直接近转移: JMPNEARPTROPR 执行操作:(IP)←(IP)+16位位移量 段内间接转移: JMPWORDPTROPR 执行操作:(IP)←(EA)比如:程序 assumecs:codesg codesgsegment start:movax,0 jmpshorts addax,1 s:incax movax,4c00h int21h codesgends endstart2、条件转移指令 注意:只能使用段内直接寻址的8位位移量 (1)根据单个条件标志的设置情况转移 格式转移条件 JZ(JE)OPRZF=1结果为0(相等)则转移 JNZ(JNE)OPRZF=0不为0(不相等)转移 JSOPRSF=1为负转移 JNSOPRSF=0为正转移 JOOPROF=1溢出转移 JNOOPROF=0不溢出转移 JPOPRPF=1有偶数个1则转移 JNPOPRPF=0有奇数个1则转移 JCOPRCF=1有进位转移 JNCOPRCF=0无进位转移比较两个无符号数,并根据比较结果转移的指令 (与比较指令CMP联用) 格式测试条件 <JB(JNAE,JC)OPRCF=1;有借位 ≥JNB(JAE,JNC)OPRCF=0;没有借位 ≤JNA(JBE)OPRCF∨ZF=1 >JA(JNBE)OPRCF∨ZF=0 *适用于地址或双精度数低位字的比较无符号数比较cmp指令对有符号数的比较cmpah,bh(3)如果SF=0,而OF=0,(ah)≥(bh) OF=0,说明没有溢出,逻辑上真正结果的正负=实际结果的正负;SF=0表示实际结果非负,所以逻辑上真正的结果必然非负。所以(ah)≥(bh)。 (4)如果SF=1,而OF=1,(ah)>(bh) OF=1,说明有溢出,逻辑上真正结果的正负≠实际结果的正负;SF=1表示由于溢出导致了实际结果为负,那么逻辑上真正的结果必然为正。这样,SF=1,OF=1,说明了(ah)>(bh)。 (3)比较两个带符号数,并根据比较结果转移的指令 格式测试条件 <JL(JNGE)OPRSFOF=1 ≥JNL(JGE)OPRSFOF=0 ≤JNG(JLE)OPR(SFOF)∨ZF=1 >JG(JNLE)OPR(SFOF)∨ZF=0 *适用于带符号数的比较 (4)测试CX的值为0则转移的指令 格式测试条件 JCXZOPR(CX)=0MOVAX,X CMPAX,50 TOO_HIGH SUBAX,Y OVERFLOW NONNEG NEGAX NONNEG: MOVRESULT,AX TOO_HIGH: …… OVERFLOW: ……一条循环指令可以用修改循环计数和判断转移条件的两条指令替代思考题:对于如下程序 movax,2 movcx,3 s:addax,2 s1:loops movdi,offsets1 movsi,offsets3 movax,cs:[di] movcs:[si],ax movax,1 movcx,3 s2:addax,2 s3:nop nop 所有指令执行完后ax的值为_____。 A、15 B、7 C、11D、3问题 编