《汇编语言2》ppt课件_第1页
《汇编语言2》ppt课件_第2页
《汇编语言2》ppt课件_第3页
《汇编语言2》ppt课件_第4页
《汇编语言2》ppt课件_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

1、作业: P112 1、2 实验教程 P60 4 第4章 汇编言语程序设计根本技术教学重点综合运用第综合运用第2章硬指令和章硬指令和第第3章伪指令,第章伪指令,第4章从章从程序构造角度展开程序程序构造角度展开程序设计,重点掌握:设计,重点掌握:分支构造程序设计分支构造程序设计循环构造程序设计循环构造程序设计汇编言语程序设计的过程通常都包括以下步骤:汇编言语程序设计的过程通常都包括以下步骤:1. 分析问题,确定算法分析问题,确定算法2. 编制程序流程编制程序流程3. 正确、合理运用存贮器和存放器正确、合理运用存贮器和存放器4. 编写程序编写程序5. 调试运转程序调试运转程序4.1 顺序程序设计顺序

2、程序完全按指令书写的前后顺序顺序程序完全按指令书写的前后顺序执行每一条指令,是最根本、最常见执行每一条指令,是最根本、最常见的程序构造的程序构造例4.1 计算例4.2 移位例题 代码转换.model small.stack.data X dw 5 Y dw 6 Z dw 7 W dw ?.code.startupmov ax,Xadd ax,Yadd ax,Zmov W,ax.exit 0enddata segmentdata segment X dw 5 X dw 5 Y dw 6 Y dw 6 Z dw 7 Z dw 7 W dw ? W dw ? data ends data ends

3、code segment code segment assume cs:code,ds:data assume cs:code,ds:data start: push ds ; start: push ds ;保管旧的数据段地址保管旧的数据段地址 sub ax,axsub ax,ax push ax push ax mov ax, data mov ax, data ;将;将datadata数据段地址数据段地址mov ds, ax mov ds, ax ;送往;送往dsds段存放器段存放器mov ax, Xmov ax, Xadd ax, Yadd ax, Yadd ax, Zadd ax,

4、Zmov W, axmov W, axmov ah, 4chmov ah, 4chint 21h int 21h ;前往;前往DOS DOS code ends code ends end start end start .dataqvardq 1234567887654321h ;定义4字变量.code .startupmov al,byte ptr qvar6mov byte ptr qvar7,almov al,byte ptr qvar5mov byte ptr qvar6,almov al,byte ptr qvar4mov byte ptr qvar5,almov al,byte

5、ptr qvar3mov byte ptr qvar4,almov al,byte ptr qvar2mov byte ptr qvar3,al图示mov al,byte ptr qvar1mov byte ptr qvar2,almov al,byte ptr qvar0mov byte ptr qvar1,almov byte ptr qvar0,0.exit 0end12 34 56 78 87 65 43 21h34 56 78 87 65 43 21 00h34 56 78 87 65 43 21 00h移位后图示64位数据左移8位123456788765432100qvar0qva

6、r1qvar2qvar3qvar4qvar5qvar6qvar7换码指令执行前:换码指令执行前:在主存建立一个字节量表格,内含要转换成在主存建立一个字节量表格,内含要转换成的目的代码的目的代码表格首地址存放于表格首地址存放于BXBX,ALAL存放相对表格首地存放相对表格首地址的位移量址的位移量换码指令执行后:换码指令执行后:将将ALAL存放器的内容转换为目的代码存放器的内容转换为目的代码 换码指令XLATtranslate将将BX指定的缓冲区中、指定的缓冲区中、AL指定的位移指定的位移处的一个字节数据取出赋给处的一个字节数据取出赋给ALXLATXLAT;alds:bx+alalds:bx+al

7、例:代码转换例:代码转换mov bx,100hmov bx,100hmov al,03hmov al,03hxlatxlat 换码指令没有显式的操作数,但运用换码指令没有显式的操作数,但运用了了BX和和AL;由于换码指令运用了隐含;由于换码指令运用了隐含寻址方式寻址方式采用默许操作数采用默许操作数;查表法,实现一位16进制数转换为ASCII码显示.model small.stack 256.dataASCII db 30h,31h,32h,33h,34h,35hdb 36h,37h,38h,39h ;09的ASCII码db 41h,42h,43h,44h,45h,46h;AF的ASCII码he

8、xdb 0bh;恣意设定了一个待转换的一位16进制数.code.startupmov bx,offset ASCII ;BX指向ASCII码表mov al,hex ;AL获得一位16进制数,正是ASCII码表中位移and al,0fh ;只需低4位是有效的,高4位清0 xlat ;换码:ALDS:BXALmov dl,al ;入口参数:DLALmov ah,2 ;02号DOS功能调用int 21h ;显示一个ASCII码字符.exit 0end4.2 输入输出功能调用向显示器输出字符向显示器输出字符 字符的输出字符的输出 字符串的输出字符串的输出从键盘输入数据从键盘输入数据 字符的输入字符的输

9、入 字符串的输入字符串的输入 按键的判别按键的判别裸机裸机汇编言语程序第 4 章4.2.1 中断指令中断中断Interrupt 是一种改动程是一种改动程序执行顺序的方法序执行顺序的方法中断具有多种中断类型中断具有多种中断类型中断的指令有中断的指令有3条:条:INT i8 IRET INTO本节主要掌握类似子程序调用指本节主要掌握类似子程序调用指令的中断调用指令令的中断调用指令INT i8,进而学,进而学习运用习运用DOS功能调用功能调用中断的过程主程序主程序IRET中断效力程序中断效力程序断点断点中断恳求中断恳求中断恳求可以来自处置器外部的中断源,中断恳求可以来自处置器外部的中断源,也可以由处

10、置器执行指令引起:也可以由处置器执行指令引起:例如执行例如执行INT i8指令。指令。8086的外部中断8086可以管理可以管理256个中断个中断各种中断用一个向量编号来区别各种中断用一个向量编号来区别主要分成外部中断和内部中断主要分成外部中断和内部中断外部中断外部中断来自来自CPU之外的缘由引之外的缘由引起的中断,又可以分成起的中断,又可以分成可屏蔽中断:可由可屏蔽中断:可由CPU的中断允许标的中断允许标志志IF控制控制非屏蔽中断:不受非屏蔽中断:不受CPU的中断允许标的中断允许标志志IF控制控制8086的内部中断内部中断内部中断CPU内部执行程序引起内部执行程序引起的中断,又可以分成:的中

11、断,又可以分成:除法错中断:执行除法指令,结果溢除法错中断:执行除法指令,结果溢出产生的出产生的 0 号中断号中断指令中断:执行中断调用指令指令中断:执行中断调用指令INT i8产产生的生的 i8 号中断号中断断点中断:用于断点调试断点中断:用于断点调试INT 3的的 3 号中断号中断溢出中断:执行溢出中断指令,溢出中断:执行溢出中断指令,OF1产生的产生的 4 号中断号中断单步中断:单步中断:TF1在每条指令执行后产在每条指令执行后产生的生的 1 号中断号中断中断指令INTINT i8INT i8;中断调用指令:产生;中断调用指令:产生i8i8号中断号中断IRETIRET;中断前往指令:实现

12、中断前往;中断前往指令:实现中断前往INTOINTO;溢出中断指令:;溢出中断指令:;假设溢出标志;假设溢出标志OF=1OF=1,产生,产生4 4号中断号中断;否那么顺序执行;否那么顺序执行4.2.2 系统功能调用21H号中断是号中断是DOS提供应用户的用于调提供应用户的用于调用系统功能的中断,它有近百个功能供用用系统功能的中断,它有近百个功能供用户选择运用,主要包括设备管理、目录管户选择运用,主要包括设备管理、目录管理和文件管理三个方面的功能理和文件管理三个方面的功能ROM-BIOS也以中断效力程序的方式,也以中断效力程序的方式,向程序员提供系统的根本输入输出程序向程序员提供系统的根本输入输

13、出程序汇编言语程序设计需求采用系统的各种汇编言语程序设计需求采用系统的各种功能程序功能程序充分利用操作系统提供的资源是程序设充分利用操作系统提供的资源是程序设计的一个重要方面,需求掌握计的一个重要方面,需求掌握功能调用的步骤通常按照如下通常按照如下4 4个步骤进展:个步骤进展: 在在AHAH存放器中设置系统功能调用存放器中设置系统功能调用号号 在指定存放器中设置入口参数在指定存放器中设置入口参数 执行指令执行指令INT 21HINT 21H或或ROM-BIOSROM-BIOS的中断向量号的中断向量号, ,实现中断效力程实现中断效力程序的功能调用序的功能调用 根据出口参数根据出口参数, ,分析功

14、能调用执分析功能调用执行情况行情况字符输出的功能调用DOS功能调用功能调用INT 21H功能号:功能号:AH02H入口参数:入口参数:DL字符的字符的ASCII码码功能:在显示器当前光标位置显功能:在显示器当前光标位置显示给定的字符,光标右移一个字示给定的字符,光标右移一个字符位置。如按符位置。如按Ctrl-Break或或Ctrl-C那么退出那么退出例:显示问号例:显示问号;在当前显示器光标位置显示一个问号;在当前显示器光标位置显示一个问号mov ah,02hmov ah,02h;设置功能号:;设置功能号:ah02hah02hmov dl,?mov dl,?;提供入口参数:;提供入口参数:dl

15、?dl?int 21hint 21h;DOSDOS功能调用:显示功能调用:显示 进展字符输出时,当输出响铃字符进展字符输出时,当输出响铃字符07H以及退格以及退格08H、回车、回车0DH和换行和换行0AH字符时,该功能调用可以自动识别并字符时,该功能调用可以自动识别并能进展相应处置能进展相应处置字符串输出的功能调用DOS功能调用功能调用INT 21H功能号:功能号:AH09H入口参数:入口参数:DS:DX欲显示字符串在主存中的首地欲显示字符串在主存中的首地址址字符串应以字符串应以$24H终了终了功能:在显示器输出指定的字符串功能:在显示器输出指定的字符串可以输出可以输出回车回车0DH和和换行换

16、行0AH字符产生回车和换行的作用字符产生回车和换行的作用例:显示字符串例:显示字符串string db Hello,Everybody !,0dh,0ah,$string db Hello,Everybody !,0dh,0ah,$ ;在数据段定义要显示的字符串;在数据段定义要显示的字符串.mov ah,09hmov ah,09h;设置功能号:;设置功能号:ah09hah09hmov dx,offset stringmov dx,offset string;提供入口参数:;提供入口参数:dxdx字符串的偏移地址字符串的偏移地址int 21hint 21h;DOSDOS功能调用:显示功能调用:显

17、示字符输入的功能调用DOS功能调用功能调用INT 21H功能号:功能号:AH01H出口参数:出口参数:AL字符的字符的ASCII码码功能:获得按键的功能:获得按键的ASCII代码值代码值调用此功能时,假设无键按下,调用此功能时,假设无键按下,那么会不断等待,直到按键后才那么会不断等待,直到按键后才读取该键值读取该键值例:字符输入例:字符输入+判别按键判别按键getkey:getkey: mov ah,01hmov ah,01h;功能号:;功能号:ah01hah01hint 21hint 21h;功能调用;功能调用cmp al,cmp al,Y Y;处置出口参数;处置出口参数alalje yes

18、keyje yeskey;是;是“Y Ycmp al,cmp al,N Nje nokeyje nokey;是;是“N Njne getkeyjne getkey.yeskey:yeskey: .nokey:nokey:.字符串输入的功能调用DOS功能调用功能调用INT 21H功能号:功能号:AH0AH入口参数:入口参数:DS:DX缓冲区首地址缓冲区首地址执行该功能调用时,用户按键,最后用执行该功能调用时,用户按键,最后用回车确认回车确认本调用可执行全部规范键盘编辑命令;本调用可执行全部规范键盘编辑命令;用户按回车键终了输入,如按用户按回车键终了输入,如按CtrlBreak或或CtrlC那么中

19、止那么中止关键要定义好缓冲区关键要定义好缓冲区缓冲区的定义第第1字节事先填入最多欲接纳的字符个字节事先填入最多欲接纳的字符个数包括回车字符,可以是数包括回车字符,可以是1255第第2字节将存放实践输入的字符个数字节将存放实践输入的字符个数不包括回车符不包括回车符第第3字节开场将存放输入的字符串字节开场将存放输入的字符串实践输入的字符数多于定义数时,多实践输入的字符数多于定义数时,多出的字符丢掉,且响铃出的字符丢掉,且响铃扩展扩展ASCII码如功能键等占两个字码如功能键等占两个字节,第节,第1个为个为0例例: 输入字符串输入字符串buffer db 81 buffer db 81 ;缓冲区长度;

20、缓冲区长度 ;第;第1 1个字节填入能够输入的最大字符个字节填入能够输入的最大字符数数db db ? ;保管为填入实践输入的字符数;保管为填入实践输入的字符数db 81 dup(0)db 81 dup(0) ;存放输入的字符串;存放输入的字符串.mov dx,seg buffermov dx,seg buffer ;伪指令;伪指令segseg获得获得bufferbuffer的段地址的段地址mov ds,dxmov ds,dx ;设置数据段;设置数据段DSDSmov dx,offset buffermov dx,offset buffermov ah,0ahmov ah,0ahint 21hin

21、t 21h按键判别的功能调用DOS功能调用功能调用INT 21H功能号:功能号:AH0BH出口参数:出口参数:AL0,当前没有按键;,当前没有按键;ALFFH,当前曾经按键。,当前曾经按键。功能:仅判别当前能否有按下的键,功能:仅判别当前能否有按下的键,设置设置AL后退出后退出例例: 按恣意键继续按恣意键继续.;提示;提示“按恣意键继续按恣意键继续getkey:getkey:mov ah,0bhmov ah,0bhint 21hint 21hor al,alor al,al;alal0 0?jz getkeyjz getkey ;alal0 0,没有按键,继续等待,没有按键,继续等待4.3 分

22、支程序设计分支程序根据条件是真或假决议执行分支程序根据条件是真或假决议执行与否与否判别的条件是各种指令,如判别的条件是各种指令,如CMP、TEST等执行后构成的形状标志等执行后构成的形状标志转移指令转移指令Jcc和和JMP可以实现分支控制可以实现分支控制单分支:求绝对值双分支:例4.3多分支:例4.4单分支程序设计条件成立跳转,条件成立跳转,否那么顺序执行否那么顺序执行分支语句体分支语句体留意选择正确的留意选择正确的条件转移指令和条件转移指令和转移目的地址转移目的地址第4章;计算;计算AXAX的绝对值的绝对值cmp ax,0cmp ax,0jns nonnegjns nonneg ; ;分支条

23、件:分支条件:AX0AX0neg axneg ax; ;条件不满足,求补条件不满足,求补nonneg:nonneg: mov result,axmov result,ax; ;条件满足条件满足;计算;计算AXAX的绝对值的绝对值cmp ax,0cmp ax,0jl yesnegjl yesneg; ;分支条件:分支条件:AXAX0 0jmp nonnegjmp nonnegyesneg:yesneg: neg axneg ax; ;条件不满足,求补条件不满足,求补nonneg:nonneg: mov result,axmov result,ax; ;条件满足条件满足Good Bad双分支程序设

24、计条件成立,跳转执行第条件成立,跳转执行第2个分支语句体;否那么个分支语句体;否那么顺序执行第顺序执行第1个分支语句个分支语句体体留意:第留意:第1个分支体后一个分支体后一定要有一个定要有一个JMP指令跳指令跳到第到第2个分支体后个分支体后第4章shl bx,1shl bx,1;BX;BX最高位移入最高位移入CFCFjc onejc one;CF;CF1 1,即最高位为,即最高位为1 1,转移,转移mov dl,mov dl,0 0 ;CF ;CF0 0,即最高位为,即最高位为0 0,DLDL0 0jmp twojmp two; ;一定要跳过另一个分支体一定要跳过另一个分支体one:one:

25、mov dl,mov dl,1 1;DL;DL1 1two:two: mov ah,2mov ah,2int 21hint 21h; ;显示显示对比对比 双分支程序改为单分支程序双分支程序改为单分支程序shl bx,1shl bx,1;BX;BX最高位移入最高位移入CFCFjnc onejnc one;CF;CF0 0,即最高位为,即最高位为0 0,转移,转移mov dl,mov dl,1 1 ;CF ;CF1 1,即最高位为,即最高位为1 1,DLDL1 1jmp twojmp two; ;一定要跳过另一个分支体一定要跳过另一个分支体one:one: mov dl,mov dl,0 0 ;D

26、L;DL0 0two:two: mov ah,2mov ah,2int 21hint 21h; ;显示显示 双分支程序改为单分支程序双分支程序改为单分支程序对比对比mov dl,mov dl,0 0;DL;DL0 0shl bx,1shl bx,1;BX;BX最高位移入最高位移入CFCFjnc twojnc two;CF;CF0 0,最高位为,最高位为0 0,转移,转移mov dl,mov dl,1 1;CF;CF1 1,最高位为,最高位为1 1,DLDL1 1two:two: mov ah,2mov ah,2int 21hint 21h; ;显示显示 编写分支程序,需留心分支的开场和终了编写

27、分支程序,需留心分支的开场和终了.startup.startupmov al,_bmov al,_bimul alimul almov bx,axmov bx,ax;BX;BX中为中为b2b2mov al,_amov al,_aimul _cimul _cmov cx,4mov cx,4imul cximul cx;AX;AX中为中为4ac4ac设设DXDX中无有效数中无有效数据据cmp bx,axcmp bx,ax; ;比较二者大小比较二者大小jge yesjge yes; ;条件满足?条件满足?mov tag,0mov tag,0; ;第一分支体:条件不满足,第一分支体:条件不满足,tag

28、0tag0jmp donejmp done; ;跳过第二个分支体跳过第二个分支体yes:yes:mov tag,1mov tag,1; ;第二分支体:条件满足,第二分支体:条件满足,tag1tag1done:done: .exit 0.exit 0多分支程序设计多个条件对应各自的分支语句体,哪个条多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以件成立就转入相应分支体执行。多分支可以化解为双分支或单分支构造的组合,例如:化解为双分支或单分支构造的组合,例如: or ah,ahor ah,ah; ;等效于等效于cmp ah,0cmp ah,0 j z f u n c t

29、i o n 0 j z f u n c t i o n 0; a h; a h 0 0 , 转 向, 转 向function0function0 dec ah dec ah; ;等效于等效于cmp ah,1cmp ah,1 j z f u n c t i o n 1 j z f u n c t i o n 1; a h; a h 1 1 , 转 向, 转 向function1function1 dec ah dec ah; ;等效于等效于cmp ah,2cmp ah,2 j z f u n c t i o n 2 j z f u n c t i o n 2; a h; a h 2 2 , 转

30、向, 转 向function2function2第4章图示多分支构造AH=0fuction0YNAH=1fuction1YNAH=2fuction2YN种 类条件转移指令判 别 条 件条件组合关系OF SF ZF PF CF简单条件转移指令JOJNOJSJNSJZ/JEJNZ/JNEJP/JPEJNP/JPOJCJNCJA/JNBEJAE/JNBJB/JNAEJBE/JNAJG/JNLEJGE/JNLJL/JNGEJLE/JNG无符号数条件转移指令带符号数条件转移指令1 01 01 01 01 00 00 10 111aabb0 10 1aabbANDORANDOR(a=b) AND ZF=0

31、(a=b) OR ZF=1(ab) AND ZF=0(ab) OR ZF=1地址表构成多分支需求在数据段事先安排一个按顺序陈需求在数据段事先安排一个按顺序陈列的转移地址表列的转移地址表输入的数字作为转移地址表内的偏移输入的数字作为转移地址表内的偏移量。量。 16位偏移地址占用位偏移地址占用2个字节单元,所个字节单元,所以偏移量需求乘以偏移量需求乘2关键是要了解间接寻址方式关键是要了解间接寻址方式JMP指令指令地址表地址表分支分支1地址地址分支分支2地址地址.Table dw disp1, disp2, disp3, disp4, .data.datamsgmsgdb Input number(

32、18):,0dh,0ah,$db Input number(18):,0dh,0ah,$msg1msg1db Chapter 1 : .,0dh,0ah,$db Chapter 1 : .,0dh,0ah,$msg2msg2db Chapter 2 : .,0dh,0ah,$db Chapter 2 : .,0dh,0ah,$.msg8msg8db Chapter 8 : . ,0dh,0ah,$db Chapter 8 : . ,0dh,0ah,$tabletable dw disp1,disp2,disp3,disp4dw disp1,disp2,disp3,disp4dw disp5,d

33、isp6,disp7,disp8dw disp5,disp6,disp7,disp8; ;定义各个标号的偏移地址定义各个标号的偏移地址此处等同于此处等同于 offset disp1.code.code.startup.startupstart1:start1: mov dx,offset msgmov dx,offset msgmov ah,9 ;mov ah,9 ;显示显示“Input number(18):Input number(18):int 21hint 21hmov ah,1mov ah,1; ;等待按键输入等待按键输入int 21hint 21hcmp al,1cmp al,1;

34、 ;数字数字 1 8 8?ja start1ja start1and ax,000fhand ax,000fh ; ;将将ASCIIASCII码转换成数字码转换成数字dec ax ;dec ax ;偏移量从偏移量从0 0开场开场shl ax,1 ;shl ax,1 ;等效于等效于add ax,ax add ax,ax 即变为偶数即变为偶数mov bx,axmov bx,axjmp tablebxjmp tablebx; ;段内间接转移:段内间接转移:IPtable+bxIPtable+bxstart2:start2: mov ah,9 ;mov ah,9 ;显示字符串显示字符串int 21hi

35、nt 21h.exit 0.exit 0disp1:disp1:mov dx,offset msg1mov dx,offset msg1; ;处置程序处置程序1 1jmp start2jmp start2. end end可以改为可以改为 call tablebx对应修正为对应修正为 retAH=9时,时,INT 21H的功能是显示字符串,的功能是显示字符串,要求必需以要求必需以$字符作为定界符,来计算字符作为定界符,来计算串的长度。串的长度。显示字符串时,假设希望光标能自动换显示字符串时,假设希望光标能自动换行,那么可在字符串终了前加上回车行,那么可在字符串终了前加上回车0dH和换行和换行0

36、aH的的ASCII码。码。作业: 实验教程 P61 13 P62 34 例:有数组例:有数组 x(x1,x2,x10) x(x1,x2,x10) 和和 y(y1,y2,y10)y(y1,y2,y10), 编程计算编程计算 z(z1,z2,z10) z(z1,z2,z10)z1 = x1 + y1z1 = x1 + y1z2 = x2 + y2z2 = x2 + y2z3 = x3 - y3z3 = x3 - y3z4 = x4 - y4z4 = x4 - y4z5 = x5 - y5z5 = x5 - y5z6 = x6 + y6z6 = x6 + y6z7 = x7 - y7z7 = x7

37、- y7z8 = x8 - y8z8 = x8 - y8z9 = x9 + y9z9 = x9 + y9z10= x10 + y10z10= x10 + y10.data.datax dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 x dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z1

38、0logic_rule dw 00dch logic_rule dw 00dch ; ;逻辑尺:逻辑尺: 0000,0000,1101,11000000,0000,1101,1100 ; 1 ; 1 减法减法 0 0 加法加法 mov bx, 0 mov bx, 0 ;设置数组内;设置数组内偏移量偏移量 mov cx, 10 mov cx, 10 ;设置计数器;设置计数器 mov dx, logic_rule mov dx, logic_rulenext: mov ax, xbxnext: mov ax, xbx shr dx, 1 shr dx, 1 ;判别逻辑尺最低位;判别逻辑尺最低位 j

39、c subtract jc subtract ;为;为1 1, ,进展减法进展减法 add ax, ybx add ax, ybx ;为;为0 0, ,进展加法进展加法 jmp short result jmp short result ;存结果;存结果subtract: subtract: sub ax, ybx sub ax, ybxresult: mov zbx, axresult: mov zbx, ax add bx, 2 add bx, 2 ;设置数组内下一字单元;设置数组内下一字单元 loop next loop next 4.4 循环程序设计循环构造普通是根据某一条件判别为真或

40、循环构造普通是根据某一条件判别为真或假来确定能否反复执行循环体假来确定能否反复执行循环体循环指令和转移指令可以实现循环控制循环指令和转移指令可以实现循环控制多重循环:例4.6循环指令LOOP:例4.5DO-WHILE 构造构造 DO-UNTIL 构造构造控制条件控制条件初始化初始化循环体循环体YN控制条件控制条件初始化初始化循环体循环体YNDO-UNTIL 循环构造循环构造 终了终了 初始化初始化 循环的初始形状循环的初始形状 循环体循环体 循环的任务部分循环的任务部分及修正部分及修正部分 计数控制循环计数控制循环条件控制循环条件控制循环修正部分修正部分控制条件控制条件Y YN N循环指令lo

41、op循环指令默许利用循环指令默许利用CX计数器,方便实现计数器,方便实现计数循环的程序构造计数循环的程序构造label操作数采用相对寻址方式操作数采用相对寻址方式LOOP labelLOOP label;CXCXCXCX1 1, ;CX0CX0,循环到标号,循环到标号labellabel处处LOOPZ/LOOPE labelLOOPZ/LOOPE label;CXCXCXCX1 1, ;CX0CX0且且ZFZF1 1,循环到标号,循环到标号labellabel处处LOOPNZ labelLOOPNZ label ;CXCXCXCX1 1, ;CX0CX0且且ZFZF0 0,循环到标号,循环到标

42、号labellabel处处.model small.model small.stack.stack.data.datasumsumdw ?dw ?.code.code.startup.startupxor ax,axxor ax,ax; ;被加数被加数AXAX清清0 0mov cx,100mov cx,100again:again:add ax,cxadd ax,cx; ;从从100,99,.,2,1100,99,.,2,1倒序累加倒序累加loop againloop againmov sum,axmov sum,ax; ;将累加和送入指定单元将累加和送入指定单元.exit 0.exit 0e

43、ndend 计数控制循计数控制循环环 循环次数固循环次数固定定“冒泡法是一种排序算法,不是最优的算冒泡法是一种排序算法,不是最优的算法,但它易于了解和实现法,但它易于了解和实现冒泡法从第一个元素开场,依次对相邻的两冒泡法从第一个元素开场,依次对相邻的两个元素进展比较,使前一个元素不大于后一个元素进展比较,使前一个元素不大于后一个元素;将一切元素比较完之后,最大的元个元素;将一切元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进展比较,得到次大外的元素依上述方法再进展比较,得到次大的元素排在后面;如此反复,直至完成就实的元素

44、排在后面;如此反复,直至完成就实现元素从小到大的排序现元素从小到大的排序这需求一个双重循环程序构造这需求一个双重循环程序构造图示冒泡法的排序过程序号序号 数数比 较 遍 数1234 1 32 2 85 3 16 4 15 5 8321615885161583285158163285815163285第4章 data segment data segment array db 32d,85d,16d,15d,8d array db 32d,85d,16d,15d,8d data ends data ends prognam segment prognam segment assume cs:pr

45、ognam,ds:data assume cs:prognam,ds:data start: start: mov ax,data mov ax,data ;将;将datadata数据段地址数据段地址 mov ds,ax mov ds,ax ;送往;送往dsds段存放器段存放器 mov cx,5 mov cx,5 ; CX CX数组元素个数数组元素个数dec cx dec cx ; 设置外循环次数设置外循环次数outlp:outlp:mov dx,cxmov dx,cx ;DX ;DX内循环次数内循环次数mov bx,offset arraymov bx,offset arrayinlp:inlp: mov al,bxmov al,bx ; ;取前一个元素取前一个

温馨提示

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

评论

0/150

提交评论