第4部分程序的逻辑流程控制.ppt
《第4部分程序的逻辑流程控制.ppt》由会员分享,可在线阅读,更多相关《第4部分程序的逻辑流程控制.ppt(69页珍藏版)》请在三一文库上搜索。
1、第4部分 程序的逻辑流程控制,Assembly Language Programming,1 基本的逻辑控制无条件转移,Assembly Language Programming,程序的逻辑控制,顺序执行 依照程序的指令顺序直线式执行 大多程序是测试分支或者循环执行的 前向执行:跳过一些指令执行前面的的指令 后向执行:重新执行一些指令 这需要通过改变IP(偏移量)实现程序执行的跳转,跳转的地址类型,依据程序执行跳转的距离长短,区分3种地址类型 SHORT短 相对地址是具有1字节的偏移量,即-128到127字节的长度 NEAR近 相对地址是具有2字节的偏移量 FAR远 任意相对地址长度,一般指的
2、是跨段跳转时的偏移量。,JMP指令,格式:label: JMP short/near/far address 作用:无条件的改变 IP使之指向目的地址 举例: 段内直接: JMP TARGET 段内间接: JMP CX JMP WORD PTR BX 段间: JMP FAR PTR TARGET JMP DWORD PTR BXSI,Executing a Jump,Intrasegment jumps are caused by changing the IP register to a new value Short jumps add a signed 8-bit displacemen
3、t to IP Near jumps add a signed 16-bit displacement to IP Intersegment jumps change both the CS and IP registers Far jumps simply assign new values to these registers,page 60,132 TITLE A07JUMP (COM) Illustration of JMP for looping .MODEL TINY .CODE ORG 100H A10MAIN PROC NEAR MOV AX,00 ;Initialize AX
4、 and MOV BX,00 ; BX to zero, MOV CX,01 ; CX to 01 A20: ADD AX,01 ;Add 01 to AX ADD BX,AX ;Add AX to BX SHL CX,1 ;Double CX JMP A20 ;Jump to A20 label A10MAIN ENDP END A10MAIN,分析:利用Debug分析JMP和A20的距离,跟踪各个寄存器的数值,LOOP指令,格式: label: LOOP short-address 动作: CX减去1 若CX !=0则跳转到目的地址 注意: 只适用于短地址 对标志寄存器没有影响 举例:,p
5、age 60,132 TITLE A07LOOP (COM) Illustration of LOOP .MODEL SMALL .CODE ORG 100H A10MAIN PROC NEAR MOV AX,0 ;Initialize AX and MOV BX,0 ; BX to zero, MOV DX,1 ; DX to 01 MOV CX,8 ; CX for 8 loops A20: INC AX ;Add 01 to AX ADD BX,AX ;Add AX to BX SHL DX,1 ;Double DX LOOP A20 ;Decrement CX, ; loop if n
6、onzero MOV AX,4C00H ;End processing INT 21H A10MAIN ENDP END A10MAIN,例1,LOOP的变种,Loop while (ZF/equal) | (CX=0) LOOPZ = LOOPE Loop while (NZ/ not equal) | (CX!=0) LOOPNZ=LOOPNE 依据ZF是否被设置,进行循环 注意:对标志寄存器没有影响,举例,该程序最多从键盘接收9个字符 当第9个字符按下,或者enter键按下时,程序结束。,MOV AH, 1 MOV CX, 9 next_char: INT 21H CMP AL, 13
7、LOOPNE next_char,2 条件转移逻辑控制,Assembly Language Programming,Recap:标志寄存器,算术、逻辑和比较指令影响各个位的设置 保存了当前程序的执行状态,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,OF DF IF TF SF ZF,AF PF CF,在转移控制中,经常使用的标志 ZF (Zero Flag): set if the result of the operation is zero CF (Carry Flag): set if there is carry out of the addition
8、of two unsigned numbers SF (Sign Flag): set if the result is a negative number,条件转移指令,格式:Jnnn short-address 通常条件转移指令列表,JZ jump if zero ZF=1 JE jump if equal ZF=1 JNZ jump if not zero ZF=0 JNE jump if not equal ZF=0 JC jump if carry CF=1 JNC jump if no carry CF=0 JCXZ jump if CX=0 CX=0,无符号数:相等equal,高
9、于above,低于below 有符号数:相等equal,大于greater,小于less,无符号数转移指令,JA jump if above op1 op2 CF=0且ZF=0 JNBE jump if not below or equal !( op1 = op2 CF=0 JNB jump if not below !( op1 = op2) CF=1 JBE jump if below or equal op1 op2) CF=1或 ZF=1,有符号数的条件转移,TITLE A07CASE (COM) Change uppercase to lowercase .MODEL SMALL
10、.CODE ORG 100H BEGIN: JMP A10MAIN ; - CONAME DB LASER-12 SYSTEMS, $ ; - A10MAIN PROC NEAR LEA BX,CONAME+1 ;1st char to change MOV CX,15 ;No. of chars to change,举例:字符串的大小写转换,A20: MOV AH,BX ;Character from CONAME CMP AH,41H ;Is it JB A30 ; upper CMP AH,5AH ; case JA A30 ; letter? XOR AH,00100000B ;Yes
11、, convert MOV BX,AH ;Restore in CONAME A30: INC BX ;Set for next char LOOP A20 ;Loop 15 times ;Done, MOV AH,09H ; display LEA DX,CONAME ; CONAME INT 21H MOV AX,4C00H ;End processing INT 21H A10MAIN ENDP END BEGIN,If结构,C/C+ code if (op1 = op2 ; ; ;,Assembly Implementation 方案1 CMP op1, op2 JE true JMP
12、 endif true: endif: 方案2 CMP op1, op2 JNE endif endif: ,If-else结构,C/C+ code if (op1 = op2 ; else ; ;,Assembly Implementation CMP op1, op2 JNE else JMP endif else: endif: ,组合OR条件,C/C+ code if (op1 op2 | op3 = op4 ) ; ;,Assembly Implementation CMP op1, op2 JG L1 CMP op3, op4 JGE L1 JMP L2 L1: L2: ,组合AN
13、D条件,C/C+ code if (op1 op2 ,Assembly Implementation CMP op1, op2 JLE L2 CMP op3, op4 JL L2 L2: ,While循环结构,C/C+ code while (op1 ; ; ;,Assembly Implementation while: CMP op1, op2 JGE L1 JMP while L1: ,unsigned int n; if (n7) do_it();,;if (n7) mov ax,n cmp ax,7 jna skip_it ;then-part call do_it ;end if
14、skip_it:,for (x=9;x0;x-) n+=x; ;for(x=9;x0;x-) mov cx,9 top_loop: add n,cx ;n=n+x loop top_loop,char n,k; unsigned int w; if (nk | w=10) whatever();,;if(nk|w=10) mov ah,n cmp ah,k jne then_ cmp w,10 ja end_if then_: call whatever end_if:,char n; int w,x; if (n=A ,;if(n=Athen-part call whatever no_go
15、:,int n; while (n0) n-=2;,;while (n0) while_: cmp n,0 jle end_while ;loop-body sub n,2 jmp while_ end_while:,char n; if (n=7) do_it(); else do_that();,;if (n=7) cmp n,7 jne else_ ;then-part call do_it jmp short endif else_: call do_that endif:,TITLE A06MOVE (EXE) Repetitive move operations .MODEL SM
16、ALL .STACK 64 ;- .DATA HEADNG1 DB InterTech HEADNG2 DB 9 DUP (*), $ ;- .CODE A10MAIN PROC FAR MOV AX,data ;Initialize segment MOV DS,AX ; registers MOV ES,AX,MOV CX,09 ;Initialize to move 9 chars LEA SI,HEADNG1 ;Initialize offset addresses LEA DI,HEADNG2 ; of HEADNG1 and HEADNG2 A20: MOV AL,SI ;Get
17、character from HEADNG1, MOV DI,AL ; move it to HEADNG2 INC SI ;Incr next char in HEADNG1 INC DI ;Incr next posn in HEADNG2 DEC CX ;Decrement count for loop JNZ A20 ;Count not zero? Yes, loop ;Finished MOV AH,09H ;Request display LEA DX,HEADNG2 ; of HEADNG2 INT 21H MOV AX,4C00H ;End processing INT 21
18、H A10MAIN ENDP END A10MAIN,3 堆栈,Assembly Language Programming,堆栈Stack,LIFO 数据结构 支持 PUSH 和 POP 操作 作用 发生中断处理和过程调用时,保护当前执行的现场;返回时,依据堆栈保存的地址继续执行,堆栈的构造,所有的可执行程序都有堆栈结构 堆栈是通过堆栈段寄存器和偏移量访问的一段内存区域 SS :指向了堆栈的开始地址 SP :指向了堆栈的顶部,堆栈的初始化,堆栈定义的伪指令 方法1:The_Stack DB Stack_Size dup (?) 方法2:.STACK Stack_Size 例如: .stack
19、12 ;分配预留的堆栈空间大小,SP:000C,SS:0340,Stack Size: 000C,动作,PUSH: 压栈操作,减少SP POP: 出栈操作,增加SP,PUSH,POP,PUSH,PUSH source source 指的是任何16/32位通用或者段寄存器,或者字/双字的地址 PUSHF or PUSHFD 将标志寄存器的内容压栈 动作: SP减去2/4 在SS:SP地址存放source数据,PUSH 举例,PUSH AX,3C,09,A4,40,2C,FF,A2,23,2A,09,46,SP:0006,01,06,4C,SS:0340,AX: 0123,POP,POP dest
20、ination destination指的是任何16/32位通用或者段寄存器,或者字/双字的地址 POPF or POPFD 将标志寄存器的内容出栈,存入标志寄存器 动作: 将 SS:SP 地址的数据拷贝到destination SP加2/4,POP 举例,POP ES,3C,09,A4,40,2C,FF,A2,23,2A,09,46,SP:0008,01,06,4C,SS:0340,3C,09,A4,40,2C,FF,A2,23,2A,09,46,SP:0006,01,06,4C,SS:0340,ES: 0123,PUSH和POP程序举例,page 60,132 TITLE PUSHPOP
21、(EXE) push and pop a number of data ; .386 .MODEL SMALL .STACK 64 .DATA flda dw 2a45h fldb dw 4567h ;- .CODE MAIN PROC FAR mov ax, data mov ds, ax,mov ax, flda push ax ; push word push word ptr fldb ; push word from fldb pop bx ; pop word to bx pop ax ; pop word to ax MOV AX,4C00H ;End processing IN
22、T 21H MAIN ENDP END MAIN,跟踪调试,-n pushpop.exe -l -R AX=0000 BX=0000 CX=0018 DX=0000 SP=0040 BP=0000 SI=0000 DI=0000 DS=0B0B ES=0B0B SS=0B1D CS=0B1B IP=0000 NV UP EI PL NZ NA PO NC 0B1B:0000 B81C0B MOV AX,0B1C -t AX=0B1C BX=0000 CX=0018 DX=0000 SP=0040 BP=0000 SI=0000 DI=0000 DS=0B0B ES=0B0B SS=0B1D C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 部分 程序 逻辑 流程 控制
链接地址:https://www.31doc.com/p-2596744.html