第四章宏汇编之循环结构 .ppt

上传人(卖家):hyngb9260 文档编号:6160780 上传时间:2023-06-04 格式:PPT 页数:18 大小:103.50KB
下载 相关 举报
第四章宏汇编之循环结构 .ppt_第1页
第1页 / 共18页
第四章宏汇编之循环结构 .ppt_第2页
第2页 / 共18页
第四章宏汇编之循环结构 .ppt_第3页
第3页 / 共18页
第四章宏汇编之循环结构 .ppt_第4页
第4页 / 共18页
第四章宏汇编之循环结构 .ppt_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、第四章第四章 汇编语言的程序设计汇编语言的程序设计一个例子:一个例子:编程找出编程找出1010个有符号双字节数中的最小数。个有符号双字节数中的最小数。某同学的流程图存疑:某同学的流程图存疑:1.变址寄存器变址寄存器SI在哪里改在哪里改变?变?2.计数寄存器计数寄存器CX在哪里会在哪里会发生变化?发生变化?3.分支结构画得不直观,分支结构画得不直观,似乎有三重分支。似乎有三重分支。4.标号标号NEXT在哪里?在哪里?5.似乎有两个结束出口。似乎有两个结束出口。6.未能充分反映算法核心未能充分反映算法核心步骤。步骤。AX=si?转到转到NEXTAX-siYN开始开始Si指向第指向第一个数一个数CX

2、=0?NEND该同学的流程图有改进,该同学的流程图有改进,但仍有问题:但仍有问题:1.有必要两处判断有必要两处判断CX=0?2.计数寄存器计数寄存器CX在哪里会在哪里会发生变化?发生变化?本流程图接近完善。本流程图接近完善。AX=si?保存保存AXAX-siYN开始开始SI指向首地址指向首地址AX-SICX=0?YENDSI-SI+1CX=0?YNN该流程图反映了核心的算该流程图反映了核心的算法步骤:法步骤:1.有一个选择结构判定两有一个选择结构判定两数大小。数大小。2.计数寄存器计数寄存器CX反映出循反映出循环次数。环次数。本流程图可以很容易地变本流程图可以很容易地变成指令。成指令。AX=s

3、i?保存保存AXAX-siYN开始开始SI指向首地址指向首地址AX-SICX-9YENDSI-SI+1CX=0?NCX-CX-1循环流程图总结循环流程图总结循环结构经常使用指令:循环结构经常使用指令:LOOP LOOP 标号标号相当于相当于(1(1)CX-CX-1CX-CX-1(2)JNZ(2)JNZ 标号标号为了在约定的循环次数后使循环结束,在循环之前,应当把为了在约定的循环次数后使循环结束,在循环之前,应当把循环次数值放入循环次数值放入CXCX中,再开始进入循环体。中,再开始进入循环体。4.6.3 4.6.3 循环结构程序的设计循环结构程序的设计 P.137 P.137 (a)DO WHI

4、LE 结构结构(当型循环结构,较当型循环结构,较少用少用)先判断条件,再执行先判断条件,再执行 循环体部分有可能一次都不执行。循环体部分有可能一次都不执行。循环结果处理循环结果处理循环体循环体循环初始化循环初始化循环结束条件?循环结束条件?NY地址指针初值地址指针初值数据初值数据初值 循环次数或条件设定循环次数或条件设定状态判别处理状态判别处理结果存放结果存放循环公共操作,循环公共操作,一定要改变循一定要改变循环结束条件环结束条件(b)DOUNTIL 结构结构(直到型循环结构,直到型循环结构,较常用较常用)先执行,再判断条件先执行,再判断条件循环体部分至少执行一次循环体部分至少执行一次循环结果

5、处理循环结果处理循环体循环体循环初始化循环初始化继续循环条件?继续循环条件?NY地址指针初值地址指针初值数据初值数据初值 循环次数或条件设定循环次数或条件设定状态判别处理状态判别处理结果存放结果存放循环公共操作循环公共操作循环可以嵌套循环可以嵌套(多重循环多重循环),但各循环结构之间不能交叉,但各循环结构之间不能交叉DATA SEGMENT DATA SEGMENT ;数据段数据段BUFBUF DB 12H,31H,0A5H DB 12H,31H,0A5H ;定义三个原始数据定义三个原始数据SUM DB?SUM DB?;定义存放累加和的字节单元,无初值定义存放累加和的字节单元,无初值DATA

6、ENDSDATA ENDSCODE SEGMENT CODE SEGMENT ;代码段代码段 ASSUME CS ASSUME CS:CODECODE,DSDS:DATA DATA ;段说明段说明STARTSTART:MOV AXMOV AX,DATA DATA ;数据段寄存器赋值数据段寄存器赋值 MOV DS MOV DS,AXAX MOV ALMOV AL,0 0 ;累加器清累加器清0 0 MOV SIMOV SI,OFFSET BUFOFFSET BUF;取取BUFBUF偏移地址偏移地址指向第一个数指向第一个数 LP:LP:ADD ALADD AL,SISI ;加第一个数(寄存器间接寻址

7、)加第一个数(寄存器间接寻址)INC SIINC SI ;SI;SI指向第二个数指向第二个数 ADD ALADD AL,SISI ;加上第二个数(寄存器间接寻址)加上第二个数(寄存器间接寻址)ADD ALADD AL,SI+1SI+1 ;加上第三个数(寄存器加上第三个数(寄存器相对相对寻址)寻址)MOV SUMMOV SUM,ALAL ;存和值到存和值到SUMSUM单元单元(设和值仍为单字节设和值仍为单字节)MOV AH MOV AH,4CH 4CH ;返回返回DOSDOS INT 21H INT 21HCODE ENDSCODE ENDS END START END START ;汇编到此结

8、束,从汇编到此结束,从STARTSTART起执行起执行补充补充 例例11将将BUFBUF单元开始的三个单元内容相加存放到单元开始的三个单元内容相加存放到SUMSUM单元中。单元中。DATA SEGMENT DATA SEGMENT ;数据段数据段BUFBUF DB 12H,31H,0A5H DB 12H,31H,0A5H ;定义三个原始数据定义三个原始数据SUM DB?SUM DB?;定义存放累加和的字节单元,无初值定义存放累加和的字节单元,无初值DATA ENDSDATA ENDSCODE SEGMENT CODE SEGMENT ;代码段代码段 ASSUME CS ASSUME CS:CO

9、DECODE,DSDS:DATA DATA ;段说明段说明STARTSTART:MOV AXMOV AX,DATA DATA ;数据段寄存器赋值数据段寄存器赋值 MOV DS MOV DS,AXAX MOV ALMOV AL,0 0 ;累加器清累加器清0 0 MOV SIMOV SI,OFFSET BUFOFFSET BUF;取取BUFBUF偏移地址偏移地址指向第一个数指向第一个数 MOV CXMOV CX,03H 03H ;设置循环设置循环3 3次次 LP:LP:ADD ALADD AL,SISI ;加第一个数(寄存器间接寻址)加第一个数(寄存器间接寻址)INC SIINC SI ;SI;S

10、I指向第二个数指向第二个数下一个数下一个数 ADD ALADD AL,SISI ;加上第二个数(寄存器间接寻址)加上第二个数(寄存器间接寻址)ADD ALADD AL,SI+1SI+1 ;加上第三个数(寄存器加上第三个数(寄存器相对相对寻址)寻址)LOOP LP LOOP LP ;未加完,继续循环未加完,继续循环 MOV SUMMOV SUM,ALAL ;存和值到存和值到SUMSUM单元单元(设和值仍为单字节设和值仍为单字节)MOV AH MOV AH,4CH 4CH ;返回返回DOSDOS INT 21H INT 21HCODE ENDSCODE ENDS END START END STA

11、RT ;汇编到此结束,从汇编到此结束,从STARTSTART起执行起执行补充补充 例例11将将BUFBUF单元开始的三个单元内容相加存放到单元开始的三个单元内容相加存放到SUMSUM单元中。单元中。1.1.单重循环例(单重循环例(1 1)例例 从从X X单元开始的单元开始的2020个个连续连续单元单元中存放有中存放有1010个个双字节双字节有符号有符号数,从中找出最小者送入数,从中找出最小者送入Y Y单元单元。(见下一页面)(见下一页面)类似的问题:类似的问题:例例 100100个带符号的字,找出最个带符号的字,找出最大大的一个字。的一个字。例例 100100个带符号的字,从中找出最个带符号的

12、字,从中找出最小小的一个字。的一个字。.MODEL SMALLMODEL SMALL ;小模式小模式.STACK 200HSTACK 200H;预留预留512512个单元的堆栈空间个单元的堆栈空间.DATADATA ;数据段数据段X DW 11,22,-20X DW 11,22,-20,4545,-10-10,-10000-10000,1 1,3 3,4 4,99 99 Y DW?Y DW?.CODE.CODE ;代码段代码段 ST ST:MOV AX,DATA MOV AX,DATA ;设数据段设数据段MOV DS,AXMOV DS,AXMOV AXMOV AX,X X ;取首元素取首元素

13、循环初始化循环初始化 MOV SIMOV SI,OFFSET X OFFSET X ;取首元素地址取首元素地址MOV CX,9 MOV CX,9 ;循环循环9 9次次 L1:ADD SI,2 L1:ADD SI,2 ;SI;SI指向新一元素(指针调整指向新一元素(指针调整)循环体循环体 CMP AXCMP AX,SI SI;与新的一个数比较与新的一个数比较JLE L2 JLE L2 ;若若(AX)AX)SISI,AXAX维持原值,转维持原值,转L2L2MOV AX,SI MOV AX,SI ;新的这个元素小则送入新的这个元素小则送入AXAX L2L2:DEC CX DEC CX ;CXCX循环

14、计数减循环计数减1 1 循环控制循环控制 JNZ L1 ;JNZ L1 ;未完,转回未完,转回L1L1继续继续循环循环 MOV YMOV Y,AX AX ;存最小数结果到存最小数结果到Y Y单元单元 结果处理结果处理 MOV AH,4CHMOV AH,4CH ;返回返回DOSDOS INT 21HINT 21H END ST END ST;汇编结束汇编结束LOOP L1LOOP L1.MODEL SMALLMODEL SMALL ;小模式小模式.STACK 200HSTACK 200H;预留预留512512个单元的堆栈空间个单元的堆栈空间.DATADATA ;数据段数据段X DW 11,22,

15、-20X DW 11,22,-20,4545,-10-10,-10000-10000,1 1,3 3,4 4,99 99 Y DW?Y DW?.CODE.CODE ;代码段代码段 ST ST:MOV AX,DATA MOV AX,DATA ;设数据段设数据段MOV DS,AXMOV DS,AXMOV AXMOV AX,X X ;取首元素取首元素 循环初始化循环初始化 MOV SIMOV SI,OFFSET X OFFSET X ;取首元素地址取首元素地址MOV CX,9 MOV CX,9 ;循环循环9 9次次 L1:MOV BX,SI+2 L1:MOV BX,SI+2CMP AXCMP AX,

16、BX BX;与新的一个数比较与新的一个数比较JG NEXT JG NEXT ;若若(AX)AX)SISI,AXAX维持原值,转维持原值,转L2L2ADD SI,2ADD SI,2LOOP L1LOOP L1JMP FINISHJMP FINISH NEXTNEXT:MOV AX,BXMOV AX,BXADD SI,2ADD SI,2LOOP L1LOOP L1 MOV YMOV Y,AX AX ;存最小数结果到存最小数结果到Y Y单元单元 结果处理结果处理 MOV AH,4CHMOV AH,4CH ;返回返回DOSDOS INT 21HINT 21H END ST END ST;汇编结束汇编结

17、束流程不明的代价!流程不明的代价!例例 从自然数从自然数1 1开始开始累加,直到累加和大于累加,直到累加和大于500500为止,统计被累为止,统计被累加的自然数的个数,并把统计的个数送入加的自然数的个数,并把统计的个数送入N N中,把累加和送入中,把累加和送入SUMSUM单元单元。(见下一页面)(见下一页面)1.1.单重循环例(单重循环例(2 2).MODEL SMALL;小模式小模式.STACK 200;预留预留200200个单元的堆栈空间个单元的堆栈空间.DATA ;数据段,数据段,分配分配1141:000E起起 N DW?;1141:000E =1140:001E SUM DW?;114

18、1:0010 =1140:0020.CODE ;代码段,代码段,分配分配1140:0000起起START:MOV AX,DATA ;数据段寄存器赋值数据段寄存器赋值11411141H HMOV DS,AXMOV AX,0 ;累加和单元清累加和单元清0 0 初始化初始化 MOV BX,0 ;自然数单元置自然数单元置0 0 L:INC BX ;BXBX加加1 1得新一个自然数得新一个自然数 循环体循环体 ADD AX,BX ;加入新一个自然数加入新一个自然数CMP AX,500 ;累加和与累加和与500500比较,有符号数还是无符号数?比较,有符号数还是无符号数?JBE L ;(AX)500AX)

19、500,转转L L继续继续循环循环 循环控制循环控制 MOV N,BX ;存最终自然数,即个数存最终自然数,即个数 结果处理结果处理 MOV SUM,AX ;存累加和存累加和MOV AH,4CH ;返回返回DOSDOS INT 21H END START;汇编结束汇编结束 1140:001E补充例补充例1 1 软件延时程序段:软件延时程序段:.MOV BX,100 MOV BX,100 L1L1:NOPNOP MOV CX,50MOV CX,50L2:L2:NOPNOPNOPNOPNOPNOPLOOP L2LOOP L2NOPNOPDEC BXDEC BXJNZ L1JNZ L1.2.2.多重

20、循环例多重循环例P1P15757例例4.20 4.20 将一个将一个1616位二进制数位二进制数BINBIN转换为十进制数转换为十进制数DECIMDECIM,并以非组合并以非组合BCDBCD码形式存放。码形式存放。分析分析1616位无符号二进制整数最大为位无符号二进制整数最大为6553565535,可能有,可能有5 5位位BCDBCD码。码。每次将该整数除以每次将该整数除以1010,第一次得到的余数即为个位,商再除,第一次得到的余数即为个位,商再除以以1010,第二次得到的商为十位,依次类推,最后可得到全部,第二次得到的商为十位,依次类推,最后可得到全部5 5位。位。无符号数除法指令无符号数除

21、法指令DIVDIV,当除数为当除数为1616位数时,得到的余数在位数时,得到的余数在DXDX中,商在中,商在AXAX中,这样不用很麻烦做中,这样不用很麻烦做5 5次除法,即可求出次除法,即可求出DECIMDECIM的各位。的各位。3.3.数码转换例数码转换例.model small.model small.datadatabin bin dwdw 5634h 5634hdecim decim db 5 dup(0)db 5 dup(0).code.code mov mov ax,data ;ax,data ;取出数据段址取出数据段址 mov dsmov ds,ax,ax mov cxmov c

22、x,5,5;循环循环5 5次,依次得到次,依次得到5 5位非组合位非组合BCDBCD码码 mov bxmov bx,10,10;作作1616位除数用位除数用 lea lea didi,decimdecim+4+4;didi首先指向最低位首先指向最低位BCDBCD码码 mov mov ax,binax,bin;取被除数送取被除数送AXAXagain:again:xor dxxor dx,dxdx;除数高除数高1616位清零位清零 div div bxbx;MOV DI,DX MOV DI,DX;存余数(教材第存余数(教材第157157页遗漏!)页遗漏!)decdec didi;按习惯,按习惯,B

23、CDBCD码低位在后码低位在后 loop again loop again;mov mov ah,4chah,4ch;返回操作系统返回操作系统 int int 21h21h end end课堂任务:课堂任务:(1 1)阅读阅读P166P166之之2 2、3 3题,题,P170P170之之10.10.(2 2)完成)完成P176P176之之4 4题。题。下周四实验下周四实验:(1 1)任务已放在)任务已放在ftp:/ftp:/cn/pub/pub/宏汇编宏汇编/实验实验将上述将上述自己编写自己编写的至少两个程序到计算机上实现;的至少两个程序到计算机上实现;(2 2)每一程序包括流程图,代码,结果分析;)每一程序包括流程图,代码,结果分析;(3 3)归纳总结出现的问题和解决方法。)归纳总结出现的问题和解决方法。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第四章宏汇编之循环结构 .ppt)为本站会员(hyngb9260)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|