第3章80x86汇编语言程序设计(下)_第1页
第3章80x86汇编语言程序设计(下)_第2页
第3章80x86汇编语言程序设计(下)_第3页
第3章80x86汇编语言程序设计(下)_第4页
第3章80x86汇编语言程序设计(下)_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第3章章 80 x86汇编语言程序设计汇编语言程序设计(下下)2分支结构是指计算机根据实际情况或条件,作出判断分支结构是指计算机根据实际情况或条件,作出判断和选择,转而执行不同的程序段的一种程序结构。和选择,转而执行不同的程序段的一种程序结构。 条件条件程序段程序段条件条件程序段程序段A程序段程序段BYNYN 3.5 分支结构程序设计分支结构程序设计3 根据某个控制字的各根据某个控制字的各“位位”状态实行多路转移状态实行多路转移多路条件测试多路条件测试程序段程序段1程序段程序段2程序段程序段n 1、格式格式1: ;段内相对短转移;段内相对短转移操作操作1:说明:转移范围说明:转移范围-12

2、8字节至字节至+127字节字节,操作数操作数OPR为段内某个标号。为段内某个标号。段内相对短转移示例段内相对短转移示例 指令指令JMP SHORT ADDT 存放在存放在CS:0200H 中,中,标号标号ADDT对于对于IP指针的偏移量为指针的偏移量为1DH, 则转移地址为则转移地址为+001DH=021FH 0200 E8 1 1DADDT: MOV AL, 40H 2 ADD AL, BL +1DH 021F B0 0220 1D4格式格式2: ;段内相对近转移;段内相对近转移操作操作2:说明:转移范围说明:转移范围-32KB至至+32KB, 操作数操作数OPR为段内为段内某个标号。某个标

3、号。格式格式3: ;段内间接转移;段内间接转移操作操作3:说明:说明:OPR是基址是基址/变址寄存器或存储器操作数。变址寄存器或存储器操作数。段内间接转移示例段内间接转移示例ADDRESS DW 2000H;定义转移地址;定义转移地址.LEA SI, ADDRESS ;偏移量;偏移量-SI. ;转移到;转移到CS:200052、格式格式4: ;段间直接转移;段间直接转移操作操作4: 段间直接转移示例段间直接转移示例 50 新新IP=0250H ;代码段;代码段C1 02 00 新新CS=2000H 20 ;代码段;代码段C2 C2段段 20000H NEXT: MOV AL,10H NEXT

4、20250HEA OP码码C1段段6格式格式5: ;段间间接转移;段间间接转移操作操作5:段间间接转移示例段间间接转移示例 设设 (DS)=1000H (14000H)=0010H (14002H)=5000H执行后执行后 (CS)=5000H (IP)=0010H7格式:格式:操作:操作:说明:根据上一条指令所设置的条件码判别测试条件说明:根据上一条指令所设置的条件码判别测试条件 转移范围在转移范围在-128到到+127字节字节8操作符操作符 功能功能 测试条件测试条件JS 符号标志为符号标志为1转移转移 SF=1JNS 符号标志为符号标志为0转移转移 SF=0JP/JPE 偶状态转移偶状态

5、转移 PF=1JNP/JPO 奇状态转移奇状态转移 PF=09比较情况比较情况 无符号数无符号数 有符号数有符号数 指令指令 判断条件判断条件 指令指令 判断条件判断条件 AB JB ZF=0,CF=1 JL SFOF JNAE JNGE 且且ZF=0 10条件转移指令示例条件转移指令示例1 将将X中十六进制的中十六进制的ASCII码转换成其所对应的数值,码转换成其所对应的数值,存放到存放到HEX中。如中。如A应转换为应转换为10。 MOV AH, X NEXT ;39H则转则转 SUB AH, 7 ;是;是A-F,减减7 NEXT: SUB AH, 30H ;减;减30H MOV HEX,

6、AH注意注意ASCII中中09是是30H39H,AF是是41H46H11条件转移指令示例条件转移指令示例2 CMP AX, 0FFFFH P3 CMP AX,1 P2 MOV AX, 1 P2: MOV AX, 0 P3: MOV AX,-1DONE: AX(-1)AX1AX-1AX-0AX-(-1)YNNY1213 。 比较结果记录在某些标志位中,条件转移指令比较结果记录在某些标志位中,条件转移指令根据约定的条件进行对照,满足条件时转移,不满根据约定的条件进行对照,满足条件时转移,不满足条件时不转移。足条件时不转移。 。 比较比较/转移指令可嵌套,但程序结构复杂,转移指令可嵌套,但程序结构复

7、杂,跳转表可使程序结构清晰。跳转表可使程序结构清晰。14注意:负数个数注意:负数个数=N-DI-SI MOV CX, N MOV BX, 0 ;初始化;初始化 MOV DI, BX ; 正数个数计数器初始化正数个数计数器初始化 MOV SI, BX ; 0的个数计数器初始化的个数计数器初始化 AGAIN:CMP WORRD PTR ARRAYBX, 0 ;数组当前元素与;数组当前元素与0比较比较 ;小于等于;小于等于0转移转移 INC DI ;正数计数;正数计数 JMP NEXTLEEQ: ;小于;小于0转移转移 INC SI ;0计数计数 NEXT: ADD BX, 2 ;数组表指针指向下一

8、元素;数组表指针指向下一元素 MOV AX, N ;负数个数;负数个数=N-DI-SI SUB AX, DI SUB AX, SI1516设字节单元设字节单元N1、N2中存放无符号数中存放无符号数(1)若两个均是偶数,则分别加若两个均是偶数,则分别加1后送后送D1 、D2中中(2)若两个均是奇数,则直接送若两个均是奇数,则直接送D1 、D2中中(3)若一个是奇数,一个是偶数,则把奇数送若一个是奇数,一个是偶数,则把奇数送D1,偶数,偶数送送D2中中AL-(N1),AH-(N2)(AL)0=0(AH)0=0AL-(AL)+1AH-(AH)+1(AL) (AH)D1-(AL),D2HIGH,则查找

9、失败,置,则查找失败,置CF=1,退出程序。,退出程序。否则,计算中点:否则,计算中点:MID(LOW+HIGH)/2;(3) K与与RMID比较。若比较。若=RMID,则查找成功,程序,则查找成功,程序结束;结束; 若若KRMID,则转,则转(5);(4) HIGHMID-1,转,转(2);(5) LOWMID+1,转,转(2)。22CMP AX, ES:DI+2 ; JA CHK_LAST ; LEA SI, ES:DI+2 JE EXIT ; STC ; JMP EXITCHK_LAST:MOV SI, ES:DI ; SHL SI, 1 ; ADD SI, DI CMP AX, ES:

10、SI ; JB SEARCH JE EXIT STC JMP EXIT 23SEARCH: MOV LOW_IDX, 1 MOV BX, ES:DI MOV HIGH_IDX, BX MOV BX, DI MID: MOV CX, LOW_IDX MOV DX, HIGH_IDX CMP CX, DX JA NO_MATCH ADD CX, DX SHR CX, 1 MOV SI, CX SHL SI, 1 COMPARE:CMP AX, ES:BX+SI JE EXIT 24 JA HIGHER DEC CX MOV HIGH_IDX, CX JMP MIDHIGHER: INC CX MO

11、V LOW_IDX, CX JMP MIDNO_MATCH: STCEXIT: 25任务需要重复执行某一程序段,这种情况采用循环结任务需要重复执行某一程序段,这种情况采用循环结构来实现。构来实现。初始化初始化循环体循环体初始化初始化修改部分修改部分NYYN修改部分修改部分控制部分控制部分循环体循环体控制部分控制部分 3.6 循环结构程序设计循环结构程序设计格式:格式:操作符操作符 操操 作作 功功 能能LOOPNZ CX-(CX)-1 当当CX不为零不为零且且LOOPNE 若若(CX)0且且ZF=0,则循环则循环 不不相等时循环相等时循环 26循环指令示例循环指令示例1 求长度为求长度为10的

12、字节数组的字节数组ARRAY之和,并将和存入之和,并将和存入TOTAL中中 其中其中 语句语句 相当于:相当于: LEA SI, ARRAY ;数组首地址;数组首地址-SI MOV CX, 10 ;数组长度;数组长度-CX MOV AX, 0 AGAIN: ADD AL, SI ;求数组和;求数组和 INC SI ;修改指针;修改指针 MOV TOTAL, AX ;存和;存和 27 SUB BX, DI ;串长度在;串长度在BX中中 INC BX MOV CX, BX ; 串字节数串字节数-CX DEC DIAGAIN: INC DI ;修改指针;修改指针 CMP BYTE PTR DI, 0

13、 ;串元素;串元素=0? AGAIN ;循环查找;循环查找 JNZ FOUND ;找到非;找到非0字节跳转字节跳转 FOUND: 循环指令示例循环指令示例2 28存储器中一序列字或字节单元,单元中的内存储器中一序列字或字节单元,单元中的内 容是字符或数据容是字符或数据对序列字或字节单元中的内容进行某种对序列字或字节单元中的内容进行某种 操作操作串操作指令有串操作指令有7条:条:29与此配合使用的指令前缀有:与此配合使用的指令前缀有: 说明:说明: 有三种形式,分别对应于字节操作、有三种形式,分别对应于字节操作、字操作和双字操作字操作和双字操作 如如 30例:将字节串从源区传送到目的区例:将字节

14、串从源区传送到目的区源区首偏址源区首偏址-SI目的区首偏址目的区首偏址-DI,串长,串长-CXCX=0按按DI所指存此字节所指存此字节按按SI所指取一字节所指取一字节(SI)+1-SI(DI)+1-DI(CX)-1-CX结束结束YN31源区首偏址源区首偏址-SI目的区首偏址目的区首偏址-DI串长串长-CX,0-DFCX=0串传送指令串传送指令(CX)-1-CX结束结束源区首偏址源区首偏址-SI目的区首偏址目的区首偏址-DI串长串长-CX,0-DF带前缀带前缀REP的的串传送指令串传送指令YN32使用串操作指令时微处理器设计有若干约定:使用串操作指令时微处理器设计有若干约定: 1、源串地址由、源

15、串地址由DS:SI指定指定 目的串地址在目的串地址在ES:DI中中 2、串长送、串长送CX寄存器寄存器 3、 当当DF=0(指令(指令CLD)时地址为增量修改)时地址为增量修改 (+1 或或 +2 或或 ) 当当DF=1(指令(指令STD)时地址为减量修改)时地址为减量修改 (-1 或或 2 或或 ) 33方向标志对应的指针移动示意方向标志对应的指针移动示意 低地址方向低地址方向 A . 源串源串 A J 高地址方向高地址方向目的串目的串 源串源串 目的串目的串1 nn . 正向传送正向传送 反向传送反向传送DF=0 DF=11J 34 符号符号 功能功能 操作操作 相关前缀相关前缀 LODS

16、 装入串装入串 AL-(DS:SI) 一般不联用一般不联用 SI-(SI)(+/-)1 35符号符号 功能功能 操作操作 相关前缀相关前缀INS 串输入串输入 ES:DI(DX) REP DI(DI)(+/-)1OUTS 串输出串输出 (DX)(DS:SI) REP SI(SI)(+/-)1其中其中DX寄存器中存放的是接口电路的端口号寄存器中存放的是接口电路的端口号36重复前缀重复前缀 终止条件终止条件 否则否则 REP CX=0 CXSI LEA DI, String2 ;目的串地址;目的串地址-DIMOV CX, 4 ;重复次数;重复次数-CX ;重复比较;重复比较JZ NEXT ;串相等

17、转移;串相等转移 .NEXT:40SCAS指令示例指令示例 在串在串“That is CAI”中查找字符中查找字符a,找到,找到,则转到标号则转到标号FOUND处处 String DB That is CAI ;定义串;定义串 CLD ;DF=0LEA DI, String ;串地址;串地址-DIMOV AL, a ;查找字符;查找字符-ALMOV CX, 11 ;重复次数;重复次数-CX ;重复扫描;重复扫描JZ FOUND ;找到目的串元素转移;找到目的串元素转移 FOUND:41 LEA SI, SOURCE ;源串偏移量;源串偏移量-SILEA DI, DESTIN ;目的串偏移量;目

18、的串偏移量-DICLD ;DF=0MOV CX,100 ;重复比较次数;重复比较次数-CX ;重复串比较;重复串比较JCXZ MATCH ;没有不匹配元素跳转;没有不匹配元素跳转DEC SI ;指向不匹配元素;指向不匹配元素 ;装入不匹配元素到;装入不匹配元素到AL .MATCH: LODS指令示例指令示例 比较比较SOURCE和和DESTIN (串长度为串长度为100个字节),个字节),并将串中的第一个不匹配元素装入并将串中的第一个不匹配元素装入AL寄存器中。寄存器中。42STOS指令示例指令示例 给首地址为给首地址为BUF,长度为,长度为1000个字节的存储器区个字节的存储器区域清零。域清

19、零。 BUFF DB 1000 DUP(?) ;定义缓冲区;定义缓冲区 CLD ;DF=0 LEA DI, BUFF ;缓冲区首地址;缓冲区首地址-DIMOV CX, 1000 ;重复次数;重复次数MOV AL, 0 ;0-AL ;重复存储串;重复存储串43综合应用例综合应用例1 将存储区将存储区A到到A+i中的数据传送到存储区中的数据传送到存储区B到到B+i中,要求存放的顺序与原先的顺序相反。中,要求存放的顺序与原先的顺序相反。 A a +1 b +2 c A+iB +1 +2 b B+i a44 LEA SI, A LEA DI, B ;DI指向存储区指向存储区B的末尾的末尾 MOV CX

20、, ;串的长度;串的长度 LP: ;DF=0 LODSB ;从源区取一数据;从源区取一数据 ;DF=1,改变方向,改变方向 STOSB ;存入目的区;存入目的区 DEC CX JNZ LP 4546循环程序的组成:循环程序的组成:1、初始化部分、初始化部分 设置初始值设置初始值2、循环工作部分、循环工作部分 具体的操作和运算具体的操作和运算3、循环修改部分、循环修改部分 为执行下一循环而修改某些参数为执行下一循环而修改某些参数4、循环控制部分、循环控制部分 判断循环继续还是结束判断循环继续还是结束有:有: (1) 增数法增数法 减数法减数法 (2) 47 将以将以s1为起始地址的为起始地址的2

21、6个字母依次传送到以个字母依次传送到以s2为起为起始地址的连续单元中。始地址的连续单元中。数据定义如下:数据定义如下:.DATA S1 DB ABCDXYZ.DATA ESTRA S2 DB 26 DUP(?)48 MOV CX, 26 LOP1: INC SI ;修改部分;修改部分 INC DI LOOP LOP1 ;控制部分;控制部分49 MOV CX, 26 CLD50计数控制法适用于循环次数已知的场合计数控制法适用于循环次数已知的场合2、 初始化时循环计数器置为循环次数,每执行一初始化时循环计数器置为循环次数,每执行一次循环体后计数器减次循环体后计数器减1,并测试循环计数器是否为,并测

22、试循环计数器是否为0,如为如为0则终止循环。则终止循环。 减数法一般用循环指令形成循环回路。减数法一般用循环指令形成循环回路。1、 初始化时循环计数器置初始化时循环计数器置0,每执行一次循环体后计,每执行一次循环体后计数器加数器加1,并与已知的循环次数比较,如相等则退出循,并与已知的循环次数比较,如相等则退出循环。环。 增数法一般用比较指令和条件转移指令实现循环增数法一般用比较指令和条件转移指令实现循环转移。转移。51 NUM DW 1 ; . MOV CX,0 ;初始化;初始化 MOV AX,0 ROTATE: ADD AX, NUM ;累加;累加 INC WORD PTRNUM JNZ R

23、OTATE MOV S, AX . 计算计算S=1+2+3+50, 结果存入结果存入AX中中52将内存中将内存中6个十进制数的个十进制数的ASCII码转换为非压缩码转换为非压缩BCD码码,并存放在后继相应单元中,如错,存放,并存放在后继相应单元中,如错,存放0FFH。 ASCBUF DB 35H, 38H, 30H, 4DH, 39H, 32H DB 6 DUP(?) . MOV DI OFFSET ASCBUF MOV CX, 6 LAB_1:MOV BL, 0FFH MOV AL, DI CMP AL, 3AH JNB OK SUB AL, 30H JCOK MOV BL, ALOK: M

24、OV AL, BL MOV DI+06H, AL INC DI .53 在许多情况下,事先无法确定循环次数,这时可选在许多情况下,事先无法确定循环次数,这时可选用用“条件条件”来控制循环。在问题的求解过程中,找来控制循环。在问题的求解过程中,找出一个终止循环的条件。出一个终止循环的条件。54求字符串长度。从求字符串长度。从STRN地址开始有一个字符串,以地址开始有一个字符串,以$作为结束标志,长度不超过作为结束标志,长度不超过100个字节,要求统计个字节,要求统计该字符串长度并存于该字符串长度并存于LENG单元。单元。分析:分析:1)设)设DX存放统计的串长度,为防止程序死循环存放统计的串长度

25、,为防止程序死循环,可根据串长不超过,可根据串长不超过100作为循环结束的附加条件。作为循环结束的附加条件。2)如果程序运行过程中找到)如果程序运行过程中找到$则正常退出循环,如则正常退出循环,如找不到找不到$,由于,由于CX的初值为的初值为100,故不会使程序死循,故不会使程序死循环。环。定义数据段如下:定义数据段如下:.DATA STRN DB XCVFATTDEQJHI,$ LENG DB 055 MOV AX, 0 MOV DX, AX ; DX清零清零 LEA DI, STRN ; 串指针赋初值串指针赋初值 MOV CX, 100 ; 初始值为初始值为100MOV AL, $LP:

26、INC DX ; 串长串长+1 INC DI; 串指针后移一个字节串指针后移一个字节DONE: MOV LENG, DL; 存字符串长度存字符串长度56多重循环就其本质而言,就是循环层多重循环就其本质而言,就是循环层1包含循环层包含循环层2,循环层循环层2可能又包含循环层可能又包含循环层3,循环层,循环层1为最外层为最外层,内内层循环是外层循环的循环体的一部分。层循环是外层循环的循环体的一部分。57多重循环程序设计多重循环程序设计58有一个首地址为有一个首地址为A的的N字数组,使该数组中的数从大字数组,使该数组中的数从大到小排序到小排序 MOV CX, N DEC CX 593.7 子程序设计子程序设计n子程序调用(返回)

温馨提示

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

评论

0/150

提交评论