汇编第05章循环与分支程序设计课件_第1页
汇编第05章循环与分支程序设计课件_第2页
汇编第05章循环与分支程序设计课件_第3页
汇编第05章循环与分支程序设计课件_第4页
汇编第05章循环与分支程序设计课件_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章循环和分支结构程序设计7/22/20231第五章循环和分支结构程序设计5.1转移指令1、无条件转移指令(1)段内直接短转移:JMPSHORT标号执行操作:(IP)←(IP)+8位位移量(2)段内直接近转移:JMPNEAR标号执行操作:(IP)←(IP)+16位位移量(3)段内间接转移:JMPWORDPTROPR执行操作:(IP)←(EA)(4)段间直接远转移:JMP标号执行操作:(IP)←OPR的段内偏移地址(CS)←OPR所在段的段地址(5)段间间接转移:JMPDWORDPTROPR执行操作:(IP)←(EA)(CS)←(EA+2)7/22/20232第五章循环和分支结构程序设计5.1转移指令2、条件转移指令:注意:只能使用段内直接寻址的8位位移量(1)根据单个条件标志的设置情况转移 格式测试条件JZ(JE)labelZF=1JNZ(JNE)labelZF=0JSlabelSF=1JNSlabelSF=0JOlabelOF=1JNOlabelOF=0JPlabelPF=1JNPlabelPF=0JClabelCF=1JNClabelCF=07/22/20233第五章循环和分支结构程序设计5.1转移指令2、条件转移指令:注意:只能使用段内直接寻址的8位位移量(2)比较两个无符号数,并根据比较结果转移格式测试条件<JB(JNAE,JC)labelCF=1≥JNB(JAE,JNC)labelCF=0≤JBE(JNA)labelCF∨ZF=1>JNBE(JA)labelCF∨ZF=07/22/20234第五章循环和分支结构程序设计5.1转移指令2、条件转移指令:注意:只能使用段内直接寻址的8位位移量(3)比较两个带符号数,并根据比较结果转移格式测试条件<JL(JNGE)labelSFOF=1≥JNL(JGE)labelSFOF=0≤JLE(JNG)label(SFOF)∨ZF=1>JNLE(JG)label(SFOF)∨ZF=0说明:对于A-B当没有溢出时,S=1,A<B;有溢出时,S=1,A>B;当没有溢出时,S=0,A>=B;有溢出时,S=0,A<B.7/22/20235第五章循环和分支结构程序设计5.1转移指令2、条件转移指令:注意:只能使用段内直接寻址的8位位移量(4)测试CX的值为0则转移格式测试条件JCXZlabel(CX)=07/22/20236第五章循环和分支结构程序设计5.2分支结构程序设计1、双分支结构程序设计例将AL的最高位显示出来SHLAL,1JCNT1MOVDL,30HJMPNT2NT1:MOVDL,31HNT2:MOVAH,2INT21H

7/22/20237第五章循环和分支结构程序设计5.2分支结构程序设计1、双分支结构程序设计例比较D1、D2单元中的字符,相同显示YES,不同显示NO。7/22/20238程序DATA SEGMENTD1 DB‘A’D2 DB‘B’RES1 DB‘YES$’RES2 DB‘NO$’DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVAL,D1 MOVBL,D2 CMPAL,BL JNENEXT1 LEADX,RES1 JMPNEXT2NEXT1:LEADX,RES2NEXT2:MOVAH,09H INT21H MOVAH,4CH INT21HCODEENDS ENDSTART7/22/20239第五章循环和分支结构程序设计5.2分支结构程序设计1、双分支结构程序设计code例将无符号数A、B中的最大值送C单元中7/22/202310程序DATA SEGMENTA DB50HB DB60HC DB?DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVAL,A CMPAL,B JNCNEXT MOVAL,BNEXT:MOVC,AL MOVAH,4CH INT21HCODE ENDS ENDSTART7/22/202311第五章循环和分支结构程序设计5.2分支结构程序设计1、双分支结构程序设计例:、是双精度数,分别存于DX,AX及BX,CX中,>时转L1,否则转L2CMPDX,BXJGL1JLL2CMPAX,CXJAL1L2:……L1:……7/22/202312第五章循环和分支结构程序设计5.2分支结构程序设计2、多分支结构程序设计计算符号函数SGN(X)的值

1,x>0Y=0,x=0-1,x<07/22/202313程序DATA SEGMENTX DB0B9HY DB?DATAENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVAL,A CMPAL,0 JLNEXT1 CMPAL,0 JGNEXT2 MOVY,0 JMPRESNEXT1:MOVY,-1 JMPRESNEXT2:MOVY,1RES:MOVAH,4CH INT21HCODE ENDS ENDSTART 7/22/202314第五章循环和分支结构程序设计5.2分支结构程序设计2、多分支结构程序设计例使用地址表,实现多路转移。根据AL寄存器中哪一位为1(从低位到高位),把程序转移到8个不同的程序分支。7/22/202315程序DATA SEGMENTNUMDB78HADTABDWAD0,AD1,AD2,AD3 DWAD4,AD5,AD6,AD7DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVAL,NUM MOVDL,’?’ CMPAL,0 JZDISP MOVBX,0AGAIN:SHRAL,1 JCNEXT INCBX JMPAGAINNEXT:SHLBX,1 JMPADTAB[BX]AD0:MOVDL,’0’ JMPDISPAD1:MOVDL,’1’ JMPDISPAD2:MOVDL,’2’ JMPDISPAD3:MOVDL,’3’ JMPDISPAD4:MOVDL,’4’ JMPDISPAD5:MOVDL,’5’ JMPDISPAD6:MOVDL,’6’ JMPDISPAD7:MOVDL,’7’DISP:MOVAH,2 INT21H MOVAH,4CH INT21HCODEENDS ENDSTART7/22/202316第五章循环和分支结构程序设计5.2分支结构程序设计2、多分支结构程序设计例转移表法。根据输入值(0~4)的不同,执行不同的数字显示操作。7/22/202317程序CODESEGMENTASSUMECS:CODESTART:LEABX,TAB MOVAH,1 INT21H SUBAL,30H MOVAH,0 ADDAX,AX ADDBX,AX JMPBXTAB:JMPSHORTMODE0 JMPSHORTMODE1 JMPSHORTMODE2 JMPSHORTMODE3 JMPSHORTMODE4MODE0:MOVDL,30H JMPEXIT MODE1:MOVDL,31H JMPEXITMODE2:MOVDL,32H JMPEXITMODE3:MOVDL,33H JMPEXITMODE4:MOVDL,34HEXIT:MOVAH,2 INT21H MOVAH,4CH INT21HCODE ENDS ENDSTART转移指令为二字节时,BX=2AX7/22/202318程序LEABX,TAB MOVAH,1 INT21H SUBAL,30H MOVAH,0 MOVDX,AX ADDAX,AX ADDAX,DX ADDBX,AX JMPBXTAB:JMPNEARPTRMODE0 JMPNEARPTRMODE1 JMPNEARPTRMODE2 JMPNEARPTRMODE3 JMPNEARPTRMODE4转移指令为三字节时,BX=3AX7/22/202319作业P194237/22/202320第五章循环和分支结构程序设计5.3循环控制指令1、循环指令:LOOPLOOPZ/LOOPELOOPNZ/LOOPNE注意:

CX中存放循环次数只能使用段内直接寻址的8位位移量执行步骤:(1)(CX)←(CX)–1(2)检查是否满足测试条件,如满足则(IP)←(IP)+8位位移量,实行循环;不满足则IP不变,退出循环。7/22/202321第五章循环和分支结构程序设计5.3循环控制指令1、循环指令(1)循环指令:

LOOPDISP测试条件:(CX)0(2)为零或相等时循环指令:

LOOPZ(LOOPE)DISP测试条件:ZF=1且(CX)0(3)不为零或不相等时循环指令:

LOOPNZ(LOOPNE)DISP测试条件:ZF=0且(CX)0LOOPAGAIN

DECCXJNZAGAIN7/22/202322第五章循环和分支结构程序设计5.4循环程序的结构1、循环结构控制条件初始化循环体YN控制条件初始化循环体YNDO-WHILE结构

DO-UNTIL结构7/22/202323第五章循环和分支结构程序设计5.4循环程序的结构2、说明初始化:设置循环的初始状态。如:设置寄存器初值(AX,DX等),设置地址指针(BX,SI,DI等),设置计数器(CL、CX等)。循环体:循环的工作部分及修改部分控制条件:计数控制(计数等于0或N)特征值控制(处理的值为结束标志)地址边界控制(地址达到要处理的最后一单元)作用:一般用于处理连续的若干单元。7/22/202324第五章循环和分支结构程序设计5.4循环程序的结构3、举例已知从BUFFER单元开始存储10个字节数,求和存放到TOTAL单元中7/22/202325(1)和为一字节的程序DATA SEGMENTBUFFERDB10H,35H,01H,…,05H;(10个数据)

TOTALDB?DATA ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATA MOVDS,AXMOVAL,0 MOVSI,OFFSETBUFFER MOVCL,10;初始化LOP:ADDAL,[SI];循环体

INCSI DECCL JNZLOP;循环控制部分

MOVTOTAL,AL;存放结果

MOVAH,4CH INT21HCODEENDS ENDSTART7/22/202326(2)和为二字节的程序DATASEGMENTBUFFERDB10H,35H,01H,…,05H;(10个数据)

TOTALDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AXMOVAX,0 MOVSI,OFFSETBUFFER MOVCL,10;初始化LOP:ADDAL,[SI];循环体

ADCAH,0 INCSI DECCL JNZLOP;循环控制

MOVAH,4CH INT21HCODE ENDS只适合无符号数7/22/202327(2)和为二字节的程序DATASEGMENTBUFFERDB10H,35H,01H,…,05H;(10个数据)

TOTALDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVDX,0 MOVSI,OFFSETBUFFER MOVCL,10;初始化LOP:MOVAL,[SI] CBW ADDDX,AX;循环体

INCSI DECCL JNZLOP;循环控制部分

MOVTOTAL,DX;存放结果

MOVAH,4CH INT21HCODEENDS ENDSTART适合有符号数7/22/202328第五章循环和分支结构程序设计5.4循环程序的结构3、举例试编一个程序将字单元BUF中所含1的个数存入COUNT单元中分析:要测出BUF字单元所含1的个数,首先将BUF中的数送给寄存器AX,然后将AX寄存器逻辑左移一次,如果CF=1,则表明AX中的最高位为1,则计数器CL计数1次,如果CF=0,表明AX最高位为0,这样依次将最高位移入CF中去测试。移位之后,判断AX的值是否为0,如果为0则结束循环,不为0,则继续循环。7/22/202329程序DATA SEGMENTBUF DW0011110010101011BCOUNT DB?DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX MOV AX,BUF MOV CL,0 ;计数器为0LOP: AND AX,AX JZ EXIT ;(AX)=0,结束循环

SHL AX,1 ;AX左移一位

JNC LOP INC CL ;产生进位,(CL)+1→CL JMP LOPEXIT: MOV COUNT,CL MOV AH,4CH INT 21HCODE ENDS END STARTMOVBX,OFFSETBUFMOVAL,XXLATMOVX,AL7/22/202330举例例从STR单元起有一串字符,结束标志为回车,求其长度放LEN单元中7/22/202331程序DATA SEGMENTSTRDB‘ABC…’,0DHLENDB?DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVBX,OFFSETSTR MOVCL,0LOP: MOVAL,[BX] CMPAL,0DH JZEXIT INCBX INCCL JMPLOPEXIT: MOVLEN,CL MOVAH,4CH INT21HCODE ENDS ENDSTART7/22/202332举例例:从键盘接收十六进制数并存入BX7/22/202333程序……

mov

bx,0newchar:movah,1;键盘输入

int21hsubal,30h

jbexit;<0退出

cmpal,10

jb

add_tosubal,27h;‘a’~‘f’

cmpal,0ah

jbexit;<‘a’退出

cmpal,10h

jaeexit;>’f’退出add_to:mov

cl,4

shl

bx,cl

movah,0addbx,ax

jmp

newcharexit:……7/22/202334第五章循环和分支结构程序设计5.5串操作指令1、方向标志CLD使DF=0STD使DF=17/22/202335第五章循环和分支结构程序设计5.5串操作指令2、串操作指令(1)传送指令MOVS语句格式:①MOVSB——字节串传送②MOVSW——字串传送功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。即:①(DS:[SI])→ES:[DI]。②当DF=0时,SI和DI增量。当DF=1时,SI和DI减量。7/22/202336第五章循环和分支结构程序设计5.5串操作指令2、串操作指令CMPS语句格式:①CMPSB——字节串比较②CMPSW——字串比较功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。即:①(DS:[SI])-(ES:[DI])。②修改串指针,使之指向串中的下一个元素。当DF=0时,SI和DI增量。当DF=1时,SI和DI减量7/22/202337第五章循环和分支结构程序设计5.5串操作指令3.串搜索指令SCAS语句格式:①SCASB——字节串搜索②SCASW——字串搜索功能:AL(字节)或AX(字)中的内容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,即:①字节操作:(AL)-(ES:[DI]),字操作:(AX)-(ES:[DI])。②修改指针使之指向串中的下一个元素。当DF=0时,DI增量。当DF=1时,DI减量7/22/202338第五章循环和分支结构程序设计5.5串操作指令4、从源串中取数指令LODS语句格式:①LODSB——从字节串中取数②LODSW——从字串中取数功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中。即:①字节操作:([SI])→AL,字操作:([SI])→AX。②修改指针SI,使它指向串中的下一个元素。当DF=0时,SI增量。当DF=1时,SI减量。7/22/202339第五章循环和分支结构程序设计5.5串操作指令5、往目的串中存数指令STOS语句格式:①STOSB——往字节串中存数②STOSW——往字串中存数功能:将AL或AX中的数据送入DI所指的目的串中的字节(或字)存储单元中。即:①字节操作:(AL)→[DI],字操作:(AX)→[DI]。②修改指针DI,使之指向串中的下一个元素。当DF=0时,DI增量。当DF=1时,DI减量。7/22/202340第五章循环和分支结构程序设计5.5串操作指令6、重复前缀指令REPREPZREPNZ(1)REP:REP前缀用在MOVS、STOS、LODS指令前。功能:每执行一次串指令(CX)-1,直到(CX)=0,重复执行结束。(2)REPZ:该指令一般用在CMP、SCAS指令前。功能:每执行一次串指令(CX)-1,并判断ZF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论