汇编第05章循环与分支程序设计课件

上传人:痛*** 文档编号:241571274 上传时间:2024-07-05 格式:PPT 页数:47 大小:167.50KB
返回 下载 相关 举报
汇编第05章循环与分支程序设计课件_第1页
第1页 / 共47页
汇编第05章循环与分支程序设计课件_第2页
第2页 / 共47页
汇编第05章循环与分支程序设计课件_第3页
第3页 / 共47页
点击查看更多>>
资源描述
第五章第五章 循环和分支结构程序设计循环和分支结构程序设计第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.15.1转移指令转移指令l l1 1、无条件转移指令无条件转移指令(1)段内直接短转移:)段内直接短转移:JMP SHORT 标号标号l执行操作:执行操作:(IP)(IP)+8位位移量位位移量(2)段内直接近转移:)段内直接近转移:JMP NEAR 标号标号l执行操作:执行操作:(IP)(IP)+16位位移量位位移量(3)段内间接转移:)段内间接转移:JMP WORD PTR OPRl执行操作:执行操作:(IP)(EA)(4)段间直接远转移:)段间直接远转移:JMP 标号标号l执行操作:执行操作:(IP)OPR 的段内偏移地址的段内偏移地址l(CS)OPR 所在段的段地址所在段的段地址(5)段间间接转移:)段间间接转移:JMP DWORD PTR OPRl执行操作:执行操作:(IP)(EA)l(CS)(EA+2)7/5/20247/5/20242 2第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.15.1转移指令转移指令l l2 2、条件转移指令:注意:只能使用段内直接寻址条件转移指令:注意:只能使用段内直接寻址的的8 位位移量位位移量(1)根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移l格式格式 测试条件测试条件lJZ(JE)label ZF=1lJNZ(JNE)label ZF=0lJS label SF=1lJNS label SF=0lJO label OF=1lJNO label OF=0lJP label PF=1lJNP label PF=0lJC label CF=1lJNC label CF=07/5/20247/5/20243 3第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.1转移指令转移指令l l2 2、条件转移指令:注意:只能使用段内直接条件转移指令:注意:只能使用段内直接寻址的寻址的8 位位移量位位移量(2)比较两个无符号数,并根据比较结果转移比较两个无符号数,并根据比较结果转移l 格式格式 测试条件测试条件l JB(JNAE,JC)label CF=1l JNB(JAE,JNC)label CF=0l JBE(JNA)label CFZF=1l JNBE(JA)label CFZF=07/5/20247/5/20244 4第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.15.1转移指令转移指令l l2 2、条件转移指令:注意:只能使用段内直接寻址的条件转移指令:注意:只能使用段内直接寻址的8 位位移量位位移量(3)比较两个带符号数,并根据比较结果转移比较两个带符号数,并根据比较结果转移l格式格式 测试条件测试条件l JL(JNGE)label SF OF=1l JNL(JGE)label SF OF=0l JLE(JNG)label (SF OF)ZF=1l JNLE(JG)label (SF OF)ZF=0说明:对于说明:对于A-B当没有溢出时,当没有溢出时,S=1,AB;当没有溢出时,当没有溢出时,S=0,A=B;有溢出时,有溢出时,S=0,A 时转时转 L1,否则转否则转 L2l CMP DX,BXl JG L1l JL L2l CMP AX,CXl JA L1lL2:l lL1:l 7/5/20247/5/20241212第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.2分支结构程序设计分支结构程序设计l l2 2、多分支结构程序设计多分支结构程序设计计算符号函数计算符号函数SGN(X)的值的值l 1,x0 lY=0,x=0l -1,x07/5/20247/5/20241313程序程序DATASEGMENT XDB 0B9H YDB?DATA ENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AXMOV AL,ACMP AL,0JL NEXT1CMP AL,0JG NEXT2MOV Y,0JMP RESNEXT1:MOV Y,-1JMP RESNEXT2:MOV Y,1RES:MOV AH,4CHINT 21HCODEENDSEND START7/5/20247/5/20241414第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.2分支结构程序设计分支结构程序设计l l2 2、多分支结构程序设计多分支结构程序设计l例例 使用地址表,实现多路转移。根据使用地址表,实现多路转移。根据 AL 寄存寄存器中哪一位为器中哪一位为 1(从低位到高位),把程序转(从低位到高位),把程序转移到移到 8 个不同的程序分支。个不同的程序分支。7/5/20247/5/20241515程序程序DATA SEGMENT NUM DB 78H ADTAB DW AD0,AD1,AD2,AD3 DW AD4,AD5,AD6,AD7DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,NUMMOV DL,?CMP AL,0JZ DISPMOV BX,0AGAIN:SHR AL,1JC NEXTINC BXJMP AGAINNEXT:SHL BX,1JMP ADTABBXAD0:MOV DL,0JMP DISPAD1:MOV DL,1JMP DISPAD2:MOV DL,2JMP DISPAD3:MOV DL,3JMP DISPAD4:MOV DL,4JMP DISPAD5:MOV DL,5JMP DISPAD6:MOV DL,6JMP DISPAD7:MOV DL,7DISP:MOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START7/5/20247/5/20241616第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.2分支结构程序设计分支结构程序设计l l2 2、多分支结构程序设计多分支结构程序设计例例 转移表法。根据输入值(转移表法。根据输入值(04)的不同,执行不)的不同,执行不同的数字显示操作。同的数字显示操作。7/5/20247/5/20241717程序程序CODE SEGMENT ASSUME CS:CODESTART:LEA BX,TABMOV AH,1INT 21HSUB AL,30HMOV AH,0ADD AX,AXADD BX,AXJMP BXTAB:JMP SHORT MODE0JMP SHORT MODE1 JMP SHORT MODE2JMP SHORT MODE3JMP SHORT MODE4MODE0:MOV DL,30H JMP EXITMODE1:MOV DL,31H JMP EXITMODE2:MOV DL,32H JMP EXITMODE3:MOV DL,33H JMP EXITMODE4:MOV DL,34HEXIT:MOV AH,2INT 21HMOV AH,4CHINT 21HCODEENDSEND START转移指令为二字节时,转移指令为二字节时,BX=2AX7/5/20247/5/20241818程序程序LEA BX,TABMOV AH,1INT 21HSUB AL,30HMOV AH,0MOV DX,AXADD AX,AXADD AX,DXADD BX,AXJMP BXTAB:JMP NEAR PTR MODE0JMP NEAR PTR MODE1 JMP NEAR PTR MODE2JMP NEAR PTR MODE3JMP NEAR PTR MODE4转移指令为三字节时,转移指令为三字节时,BX=3AX7/5/20247/5/20241919作业作业P194 237/5/20247/5/20242020第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.35.3循环控制指令循环控制指令l l1 1、循环指令:循环指令:LOOPLOOPZ/LOOPELOOPNZ/LOOPNEl注意:注意:CX 中存放循环次数中存放循环次数只能使用段内直接寻址的只能使用段内直接寻址的8 位位移量位位移量l执行步骤:执行步骤:(1)(CX)(CX)1(2)检查是否满足测试条件,如满足则检查是否满足测试条件,如满足则l(IP)(IP)+8位位移量,实行循环;位位移量,实行循环;l不满足则不满足则 IP 不变,退出循环。不变,退出循环。7/5/20247/5/20242121第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.3循环控制指令循环控制指令l l1 1、循环指令循环指令(1)循环指令:)循环指令:LOOP DISP测试条件:测试条件:(CX)0(2)为零或相等时循环指令:)为零或相等时循环指令:LOOPZ(LOOPE)DISP测试条件:测试条件:ZF=1 且且(CX)0(3)不为零或不相等时循环指令:)不为零或不相等时循环指令:LOOPNZ(LOOPNE)DISP测试条件:测试条件:ZF=0 且且(CX)0LOOP AGAIN DEC CX JNZ AGAIN7/5/20247/5/20242222第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.4循环程序的结构循环程序的结构l l1 1、循环结构、循环结构、循环结构、循环结构控制条件控制条件初始化初始化循环体循环体YN控制条件控制条件初始化初始化循环体循环体YNDO-WHILE 结构结构 DO-UNTIL 结结构构7/5/20247/5/20242323第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.4循环程序的结构循环程序的结构l l2 2、说明、说明、说明、说明初始化初始化:设置循环的初始状态。如:设置寄存器初设置循环的初始状态。如:设置寄存器初值(值(AX,DX等),设置地址指针(等),设置地址指针(BX,SI,DI等)等),设置计数器(,设置计数器(CL、CX等)。等)。循环体:循环的工作部分及修改部分循环体:循环的工作部分及修改部分控制条件:控制条件:l计数控制(计数控制(计数等于计数等于0或或N)l特征值控制(处理的值为结束标志)特征值控制(处理的值为结束标志)l地址边界控制(地址达到要处理的最后一单元)地址边界控制(地址达到要处理的最后一单元)作用:一般用于处理连续的若干单元。作用:一般用于处理连续的若干单元。7/5/20247/5/20242424第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.4循环程序的结构循环程序的结构l l3 3、举例、举例、举例、举例l已知从已知从BUFFER单元开始存储单元开始存储10个字节数,求个字节数,求和存放到和存放到TOTAL单元中单元中7/5/20247/5/20242525(1)和为一字节的程序)和为一字节的程序DATA SEGMENT BUFFER DB 10H,35H,01H,05H;(;(10个数据)个数据)TOTAL DB?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATA MOV DS,AX MOV AL,0 MOV SI,OFFSET BUFFER MOV CL,10 ;初始化初始化LOP:ADD AL,SI ;循环体循环体INC SI DEC CLJNZ LOP ;循环控制部分循环控制部分MOV TOTAL,AL ;存放结果存放结果 MOV AH,4CHINT 21HCODE ENDSEND START7/5/20247/5/20242626(2)和为二字节的程序)和为二字节的程序DATA SEGMENT BUFFER DB 10H,35H,01H,05H;(;(10个数据)个数据)TOTAL DW?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AX,0 MOV SI,OFFSET BUFFER MOV CL,10 ;初始化初始化LOP:ADD AL,SI ;循环体循环体ADC AH,0INC SI DEC CLJNZ LOP ;循环控制循环控制 MOV AH,4CHINT 21HCODEENDS只适合只适合无符号无符号数数7/5/20247/5/20242727(2)和为二字节的程序)和为二字节的程序DATA SEGMENT BUFFER DB 10H,35H,01H,05H;(;(10个数据)个数据)TOTAL DW?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV DX,0 MOV SI,OFFSET BUFFER MOV CL,10 ;初始化初始化LOP:MOV AL,SI CBW ADD DX,AX ;循环体循环体 INC SI DEC CL JNZ LOP ;循环控制部分循环控制部分 MOV TOTAL,DX ;存放结果存放结果 MOV AH,4CH INT 21HCODE ENDSEND START适合有符适合有符号数号数7/5/20247/5/20242828第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.4循环程序的结构循环程序的结构l l3 3、举例、举例、举例、举例l试编一个程序将字单元试编一个程序将字单元BUF中所含中所含1的个数存的个数存入入COUNT单元中单元中分析:要测出分析:要测出BUF字单元所含字单元所含1的个数,首先将的个数,首先将BUF中的数送给寄存器中的数送给寄存器AX,然后将然后将AX寄存器逻辑寄存器逻辑左移一次,如果左移一次,如果CF=1,则表明则表明AX中的最高位为中的最高位为1,则计数器则计数器CL计数计数1次,如果次,如果CF=0,表明表明AX最高位最高位为为0,这样依次将最高位移入,这样依次将最高位移入CF中去测试。移位之中去测试。移位之后,判断后,判断AX的值是否为的值是否为0,如果为,如果为0则结束循环,不则结束循环,不为为0,则继续循环。,则继续循环。7/5/20247/5/20242929程序程序DATASEGMENTBUF DW 0011110010101011BCOUNTDB?DATAENDSCODESEGMENT ASSUME DS:DATA,CS:CODESTART:MOVAX,DATA MOVDS,AXMOVAX,BUFMOVCL,0;计数器为计数器为0LOP:ANDAX,AXJZEXIT;(;(AX)=0,结束循环结束循环SHLAX,1;AX 左移一位左移一位JNCLOPINCCL;产生进位,(产生进位,(CL)+1CLJMPLOPEXIT:MOVCOUNT,CLMOVAH,4CHINT21HCODEENDSENDSTARTMOV BX,OFFSET BUFMOV AL,XXLAT MOV X,AL7/5/20247/5/20243030举例举例例例 从从STR单元起有一串字符,结束标志为单元起有一串字符,结束标志为回车,求其长度放回车,求其长度放LEN单元中单元中7/5/20247/5/20243131程序程序DATASEGMENTSTR DB ABC,0DH LEN DB?DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV BX,OFFSET STRMOV CL,0LOP:MOV AL,BXCMP AL,0DHJZ EXITINC BX INC CLJMP LOPEXIT:MOV LEN,CLMOV AH,4CHINT 21HCODEENDSEND START7/5/20247/5/20243232举例举例例:从键盘接收十六进制数并存入例:从键盘接收十六进制数并存入 BX7/5/20247/5/20243333程序程序 mov bx,0newchar:mov ah,1 ;键盘输入键盘输入l int 21hl sub al,30hl jb exit ;0退出退出l cmp al,10l jb add_tol sub al,27h ;afl cmp al,0ahl jb exit ;f退出退出add_to:mov cl,4l shl bx,cll mov ah,0l add bx,axl jmp newcharexit:7/5/20247/5/20243434第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.5串操作指令串操作指令l1、方向标志、方向标志CLD 使使DF=0STD 使使DF=17/5/20247/5/20243535第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.5串操作指令串操作指令l2、串操作指令、串操作指令(1)传送指令)传送指令MOVSl语句格式:语句格式:MOVSB字节串传送字节串传送 MOVSW字串传送字串传送l功能:将以功能:将以SI为指针的源串中的一个字节(或字)存储单为指针的源串中的一个字节(或字)存储单元中的数据传送至以元中的数据传送至以DI为指针的目的地址中去,并自动修为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。改指针,使之指向下一个字节(或字)存储单元。即:即:(DS:SI)ES:DI。当当DF=0时,时,SI和和DI增量。增量。当当DF=1时,时,SI和和DI减量。减量。7/5/20247/5/20243636第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.5串操作指令串操作指令l2、串操作指令、串操作指令CMPS CMPS 语句格式:语句格式:l CMPSBCMPSB字节串比较字节串比较l CMPSWCMPSW字串比较字串比较功能:将功能:将SISI所指的源串中的一个字节(或字)存储所指的源串中的一个字节(或字)存储单元中的数据与单元中的数据与DIDI所指的目的串中的一个字节(或所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。置标志,但结果并不保存。l即:即:(DSDS:SISI)()(ESES:DIDI)。)。l 修改串指针,使之指向串中的下一个元素。修改串指针,使之指向串中的下一个元素。l当当DF=0DF=0时,时,SISI和和DIDI增量。当增量。当DF=1DF=1时,时,SISI和和DIDI减量减量7/5/20247/5/20243737第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.5串操作指令串操作指令l l3 3 3 3串搜索指令串搜索指令串搜索指令串搜索指令SCASSCASSCASSCAS语句格式:语句格式:l SCASBSCASB字节串搜索字节串搜索l SCASWSCASW字串搜索字串搜索功能:功能:ALAL(字节)或字节)或AXAX(字)中的内容与字)中的内容与DIDI所指的所指的目的串中的一个字节(或字)存储单元中的数据相目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,减,根据相减结果设置标志位,结果不保存,l即:即:字节操作:(字节操作:(ALAL)()(ESES:DIDI),),字操作:字操作:(AXAX)()(ESES:DIDI)。)。l 修改指针使之指向串中的下一个元素。当修改指针使之指向串中的下一个元素。当DF=0DF=0时,时,DIDI增量。当增量。当DF=1DF=1时,时,DIDI减量减量7/5/20247/5/20243838第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.5串操作指令串操作指令l4、从源串中取数指令从源串中取数指令LODSLODS语句格式:语句格式:l LODSBLODSB从字节串中取数从字节串中取数l LODSWLODSW从字串中取数从字串中取数功能:将功能:将SISI所指的源串中的一个字节(或字)存储所指的源串中的一个字节(或字)存储单元中的数据取出来送入单元中的数据取出来送入ALAL(或或AXAX)中。中。l即:即:字节操作:(字节操作:(SISI)ALAL,字操作:字操作:(SISI)AXAX。l 修改指针修改指针SISI,使它指向串中的下一个元素。使它指向串中的下一个元素。l当当DF=0DF=0时,时,SISI增量。当增量。当DF=1DF=1时,时,SISI减量。减量。7/5/20247/5/20243939第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.5串操作指令串操作指令l5、往目的串中存数指令往目的串中存数指令往目的串中存数指令往目的串中存数指令STOSSTOSSTOSSTOS语句格式:语句格式:l STOSBSTOSB往字节串中存数往字节串中存数lSTOSWSTOSW往字串中存数往字串中存数功能:将功能:将ALAL或或AXAX中的数据送入中的数据送入DIDI所指的目的串中的所指的目的串中的字节(或字)存储单元中。字节(或字)存储单元中。l即:即:字节操作:(字节操作:(ALAL)DIDI,字操作:字操作:(AXAX)DIDI。l 修改指针修改指针DIDI,使之指向串中的下一个元素。当使之指向串中的下一个元素。当DF=0DF=0时,时,DIDI增量。当增量。当DF=1DF=1时,时,DIDI减量。减量。7/5/20247/5/20244040第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.5串操作指令串操作指令l6、重复前缀指令重复前缀指令REP REPZ REPNZREP REPZ REPNZl(1 1)REP REP:REPREP前缀用在前缀用在MOVSMOVS、STOS STOS、LODSLODS指令前。指令前。功能:每执行一次串指令(功能:每执行一次串指令(CXCX)1 1,直到(直到(CXCX)=0=0,重复执重复执行结束。行结束。l(2 2)REPZ REPZ:该指令一般用在:该指令一般用在CMPCMP、SCASSCAS指令前。指令前。功能:每执行一次串指令(功能:每执行一次串指令(CXCX)1 1,并判断并判断ZFZF标志是否为标志是否为0 0,只要(只要(CXCX)=0=0或或ZF=0ZF=0,则重复执行结束。则重复执行结束。l(3 3)REPNZREPNZ:该指令一般用在:该指令一般用在CMPSCMPS、SCAS SCAS 指令前。指令前。功能:每执行一次串指令(功能:每执行一次串指令(CXCX)1 1,并判断并判断ZFZF标志是否为标志是否为0 0,只要(只要(CXCX)=0=0或或ZF=1ZF=1,则重复执行结束。则重复执行结束。7/5/20247/5/20244141第五章第五章第五章第五章 循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计循环和分支结构程序设计5.5串操作指令串操作指令l7、举例、举例l将将mess1中的中的17个字符个字符COPY到到mess2起始的起始的单元中。单元中。7/5/20247/5/20244242程序程序data segment mess1 db personal_computerdata endsextra segment mess2 db 17 dup(?)extra endscode segmentassume cs:code,ds:data,es:extrastart:mov ax,data mov ds,ax mov ax,extra mov es,ax lea si,mess1 lea di,mess2 mov cx,17 cld rep movsb code endslea lea sisi,mess1+16,mess1+16lea lea didi,mess2+16,mess2+16movmov cxcx,17,17stdstdrep rep movsbmovsb7/5/20247/5/20244343程序程序data segment mess1 db personal_computer mess2 db 17 dup(?)data endscode segment assume cs:code,ds:data,es:data start:mov ax,data movds,ax mov es,ax lea si,mess1 lea di,mess2 mov cx,17 cld rep movsb code ends7/5/20247/5/20244444举例举例例:从一个字符串中查找一个指定的字符例:从一个字符串中查找一个指定的字符l mess db COMPUTER l lea di,messl mov al,Tl mov cx,8l cldl repne scasb7/5/20247/5/20244545举例举例例:比较两个字符串,找出它们不相匹配的位置例:比较两个字符串,找出它们不相匹配的位置llea si,mess1llea di,mess2lmov cx,8lcldlrepe cmpsb7/5/20247/5/20244646作业作业P193 97/5/20247/5/20244747
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!