资源描述
第四章第四章 汇编语言的程序设计汇编语言的程序设计 4.6.24.6.2 基本程序结构的设计基本程序结构的设计 顺序结构,顺序结构,分支结构,循环结构分支结构,循环结构是用汇编是用汇编语言进行程序设计的基本程序结构。下面语言进行程序设计的基本程序结构。下面主要学习形成这些结构的程序控制方法和主要学习形成这些结构的程序控制方法和指令用法。指令用法。 坤奖熔七卖驾饱峦苯碘揭鹏裹缅鬼撩龄好沾斩火固漂茄谁瞻掉甚氖蛰答擂09第四章2选择与循环结构09第四章2选择与循环结构 例例在显示器上显示在显示器上显示“HOW DO YOU DOHOW DO YOU DO!” .MODEL SMALL .MODEL SMALL ; ;小模式小模式 .DATA .DATA ; ;数据段数据段 STRING DB HOW DO YOU DO!$STRING DB HOW DO YOU DO!$ .STACK 200.STACK 200 ; ;堆栈段,预留堆栈段,预留200200字节字节 .CODE .CODE ; ;代码段代码段 START:MOV AX,DATA START:MOV AX,DATA ; ;取数据段地址取数据段地址 MOV DS,AX MOV DS,AX MOV DX,OFFSET STRINGMOV DX,OFFSET STRING ; ;取字符串首地址取字符串首地址 MOV AH,9MOV AH,9 ;9;9号号DOSDOS功能调用功能调用, ,输出字符串输出字符串 INT 21HINT 21H MOV AH,4CH MOV AH,4CH ; ;返回返回DOSDOS INT 21HINT 21H END STARTEND START ; ;汇编结束汇编结束 简化段的定义简化段的定义 龙缚烯蓬觉老户僵魁爆一褂陈椅痪此霖百蘸藤谦蟹卯壬达涵薪习袜故功钮09第四章2选择与循环结构09第四章2选择与循环结构 汇编语言程序调试过程 编辑建立汇编语言源程序编辑建立汇编语言源程序 源文件源文件 .ASM 汇编汇编 目标文件目标文件 .OBJ 列表文件列表文件.LST.LST 交叉引用文件交叉引用文件.CRF.CRF 链接链接 可执行文件可执行文件 .EXE 连接映象文件连接映象文件.MAP.MAP 调试调试 最终程序最终程序 EDIT MASM LINK DEBUG 试运行、验证、诊断、修改试运行、验证、诊断、修改 写字板、记事本写字板、记事本 销册蹭东荷盆谬缠蜕臼秉森旭痈焙疽畦乱橱科睡夷微随冉遂太阻鉴页氧猖09第四章2选择与循环结构09第四章2选择与循环结构 标号标号: 条件满足条件满足 ? 处理处理 N Y IFTHEN结构结构 程序结构:程序结构:一个入口,一个出口一个入口,一个出口 测试测试/比较指令比较指令 (TEST/CMP) 条件转移指令条件转移指令 (Jx 标号标号) 处理体处理体 标号标号: 其他指令其他指令 4.6.2 4.6.2 分支结构程序的设计分支结构程序的设计 P.135 P.135 闲区外课拜涌察隋锻棱空司逢沾刷毡劝哉电菌帐肥阅幂骏终眯阜泻望伟旋09第四章2选择与循环结构09第四章2选择与循环结构 程序结构:程序结构: TEST/CMP指令指令 Jx 标号标号1 处理体处理体P1 JMP 标号标号2 标号标号1: 处理体处理体P2 标号标号2:其他指令:其他指令 条件满足条件满足 ? 处理处理P1 处理处理P2 标号标号1: 标号标号2: N Y IFTHENELSE结构结构 蹄条蝇乔惩晰靖离唤熊材爽粥务着疯沙统俗魏猎垄凸诱寅仕桨湛白盏炬棱09第四章2选择与循环结构09第四章2选择与循环结构 标号标号1: 条件条件1 成立?成立? P1 N Y CASE结构结构 程序结构:程序结构: TEST/CMP指令(测试条件指令(测试条件1) Jx 标号标号1 ;不满足转标号不满足转标号1 处理体处理体P1 JMP 标号标号n+1 标号标号1:TEST/CMP指令(测试条件指令(测试条件2) Jx 标号标号2 ;不满足转标号不满足转标号2 处理体处理体P2 JMP 标号标号n+1 标号标号2:TEST/CMP指令(测试条件指令(测试条件3) Jx 标号标号3 ;不满足转标号不满足转标号3 处理体处理体P3 JMP 标号标号n+1 标号标号3:TEST/CMP指令(测试条件指令(测试条件4) 标号标号n+1:(公共出口):(公共出口) 条件条件2 成立?成立? 条件条件n 成立?成立? Pn+1 标号标号2: 标号标号n: 标号标号n+1: P2 Pn N N Y Y 弧及拇淬圃沸赃裤铣驻玩劳呵藩梢糟佃弯浙鞭邀造着懒贩帘兔衷丘营雹并09第四章2选择与循环结构09第四章2选择与循环结构 4.6.24.6.2 1.1.二路分支结构程序设计二路分支结构程序设计 P.135P.135 例例 从键盘输入一位数字,判断其奇偶性,并在屏从键盘输入一位数字,判断其奇偶性,并在屏幕输出一个标志,若为奇数,则输出幕输出一个标志,若为奇数,则输出1 1,否则输出,否则输出0 0。 画出流程图。画出流程图。 偶数?偶数? AL-30H AL-31H Y N 输出输出AL 一个入口一个入口 一个出口一个出口 病蜂庞杨丙熙锤眷董慑浦兴无赴膊脐丑艰宣辅麦捂惊帅僻便豪老风煮结悟09第四章2选择与循环结构09第四章2选择与循环结构 NAME P124NAME P124 TITLE TITLE 判断从键盘输入一位数字的奇偶性,并在屏幕判断从键盘输入一位数字的奇偶性,并在屏幕输出输出1(1(奇数奇数) )或或0(0(偶数偶数) )标志。标志。 CODE SEGMENT CODE SEGMENT ; ;代码段代码段 ASSUME CS:CODEASSUME CS:CODE BEGIN:BEGIN: MOV AH,01HMOV AH,01H ;1;1号号DOSDOS中断调用中断调用 INT 21HINT 21H ; ;键入一位数字送键入一位数字送ALAL且显示且显示 TEST AL,01HTEST AL,01H ; ;测试最低位测试最低位 JZ EVNJZ EVN ; ;偶数,转偶数,转 MOV AL,31HMOV AL,31H ; ;奇数,置奇数,置“1 1” JMP DISPJMP DISP EVN:EVN: MOV AL,30HMOV AL,30H ; ;偶数,置偶数,置“0 0” DISP:DISP: PUSH AXPUSH AX MOV AH,2MOV AH,2 ;2;2号号DOSDOS中断调用中断调用 MOV DL,0AHMOV DL,0AH ; ;输出换行输出换行 INT 21HINT 21H MOV DL,0DHMOV DL,0DH ; ;输出回车输出回车 INT 21HINT 21H POP AXPOP AX MOV AH,2MOV AH,2 ;2;2号号DOSDOS中断调用中断调用 MOV DL,ALMOV DL,AL ; ;输出奇数输出奇数/ /偶数标志偶数标志 INT 21HINT 21H MOV AH,4CH MOV AH,4CH ; ;返回返回DOSDOS INT 21HINT 21H CODE ENDSCODE ENDS END BEGIN END BEGIN ; ;汇编到此结束汇编到此结束 NAME P124NAME P124 TITLE TITLE 判断从键盘输入一位数字的奇偶性,并在屏幕判断从键盘输入一位数字的奇偶性,并在屏幕输出输出1(1(奇数奇数) )或或0(0(偶数偶数) )标志。标志。 CODE SEGMENT CODE SEGMENT ; ;代码段代码段 ASSUME CS:CODEASSUME CS:CODE BEGIN:BEGIN: MOV AH,01HMOV AH,01H ;1;1号号DOSDOS中断调用中断调用 INT 21HINT 21H ; ;键入一位数字送键入一位数字送ALAL且显示且显示 TEST AL,01HTEST AL,01H ; ;测试最低位测试最低位 JZ EVNJZ EVN ; ;偶数,转偶数,转 MOV AL,31HMOV AL,31H ; ;奇数,置奇数,置“1 1” JMP DISPJMP DISP EVN:EVN: MOV AL,30HMOV AL,30H ; ;偶数,置偶数,置“0 0” DISP:DISP: PUSH AXPUSH AX MOV AH,2MOV AH,2 ;2;2号号DOSDOS中断调用中断调用 MOV DL,0AHMOV DL,0AH ; ;输出换行输出换行 INT 21HINT 21H MOV DL,0DHMOV DL,0DH ; ;输出回车输出回车 INT 21HINT 21H POP AXPOP AX MOV AH,2MOV AH,2 ;2;2号号DOSDOS中断调用中断调用 MOV DL,ALMOV DL,AL ; ;输出奇数输出奇数/ /偶数标志偶数标志 INT 21HINT 21H MOV AH,4CH MOV AH,4CH ; ;返回返回DOSDOS INT 21HINT 21H CODE ENDSCODE ENDS END BEGIN END BEGIN ; ;汇编到此结束汇编到此结束 CODE SEGMENT CODE SEGMENT ; ;代码段代码段 ASSUME CS:CODEASSUME CS:CODE BEGIN:BEGIN:MOV AH,01HMOV AH,01H ;1;1号号DOSDOS系统调用系统调用 INT 21HINT 21H ; ;键入一位数字送键入一位数字送ALAL且显示且显示 TEST AL,01HTEST AL,01H ; ;测试最低位测试最低位 JZ EVNJZ EVN ; ;偶数,转偶数,转 MOV AL,31HMOV AL,31H ; ;奇数,置奇数,置“1 1”标志标志 JMP DISPJMP DISP EVN:EVN: MOV AL,30HMOV AL,30H ; ;偶数,置偶数,置“0 0”标志标志 DISP:DISP: MOV AH,2MOV AH,2 ;2;2号号DOSDOS系统调用系统调用 PUSH AX PUSH AX ; ;保存保存AXAX中标志内容中标志内容( (因为因为2 2号号INT 21HINT 21H会将会将DLAL)DLAL) MOV DL,0AHMOV DL,0AH ; ;输出换行输出换行 INT 21HINT 21H MOV DL,0DHMOV DL,0DH ; ;输出回车输出回车 INT 21HINT 21H POP AX POP AX ; ;弹出弹出AXAX中标志内容中标志内容 MOV AH,2MOV AH,2 ;2;2号号DOSDOS系统调用系统调用 MOV DL,ALMOV DL,AL ; ;输出奇数输出奇数/ /偶数标志偶数标志 INT 21HINT 21H MOV AH,4CH MOV AH,4CH ; ;返回返回DOSDOS INT 21HINT 21H CODE ENDSCODE ENDS END BEGIN END BEGIN ; ;汇编到此结束汇编到此结束 一个入口一个入口 一个出口一个出口 利卸召壮赵烩楔侈汁赛娥逆骂千翱伍呆脚惶蝶愁箱蹭诗式粘畴陶璃汐蚌纲09第四章2选择与循环结构09第四章2选择与循环结构 4.6.24.6.2 2.2.多路分支结构程序设计多路分支结构程序设计 例例 任意给定任意给定x x值(值(- -128x+127128x+127),求以下符号),求以下符号函数函数y y的值。的值。 1 1, 当当x x0 0 y = 0y = 0, 当当x=0 x=0 - -1 1, 当当x x0 0 画出程序流程图,见教材画出程序流程图,见教材P136P136图图4.64.6。 赏警锗惟道搁掩民帮云存株谐旦喧软贼缎狈姥美扒恫听兢吵催怎呢惧胚撼09第四章2选择与循环结构09第四章2选择与循环结构 NAME P124NAME P124 TITLE TITLE 判断从键盘输入一位数字的奇偶性,并在屏幕判断从键盘输入一位数字的奇偶性,并在屏幕输出输出1(1(奇数奇数) )或或0(0(偶数偶数) )标志。标志。 CODE SEGMENT CODE SEGMENT ; ;代码段代码段 ASSUME CS:CODEASSUME CS:CODE BEGIN:BEGIN: MOV AH,01HMOV AH,01H ;1;1号号DOSDOS中断调用中断调用 INT 21HINT 21H ; ;键入一位数字送键入一位数字送ALAL且显示且显示 TEST AL,01HTEST AL,01H ; ;测试最低位测试最低位 JZ EVNJZ EVN ; ;偶数,转偶数,转 MOV AL,31HMOV AL,31H ; ;奇数,置奇数,置“1 1” JMP DISPJMP DISP EVN:EVN: MOV AL,30HMOV AL,30H ; ;偶数,置偶数,置“0 0” DISP:DISP: PUSH AXPUSH AX MOV AH,2MOV AH,2 ;2;2号号DOSDOS中断调用中断调用 MOV DL,0AHMOV DL,0AH ; ;输出换行输出换行 INT 21HINT 21H MOV DL,0DHMOV DL,0DH ; ;输出回车输出回车 INT 21HINT 21H POP AXPOP AX MOV AH,2MOV AH,2 ;2;2号号DOSDOS中断调用中断调用 MOV DL,ALMOV DL,AL ; ;输出奇数输出奇数/ /偶数标志偶数标志 INT 21HINT 21H MOV AH,4CH MOV AH,4CH ; ;返回返回DOSDOS INT 21HINT 21H CODE ENDSCODE ENDS END BEGIN END BEGIN ; ;汇编到此结束汇编到此结束 NAME P124NAME P124 TITLE TITLE 判断从键盘输入一位数字的奇偶性,并在屏幕判断从键盘输入一位数字的奇偶性,并在屏幕输出输出1(1(奇数奇数) )或或0(0(偶数偶数) )标志。标志。 CODE SEGMENT CODE SEGMENT ; ;代码段代码段 ASSUME CS:CODEASSUME CS:CODE BEGIN:BEGIN: MOV AH,01HMOV AH,01H ;1;1号号DOSDOS中断调用中断调用 INT 21HINT 21H ; ;键入一位数字送键入一位数字送ALAL且显示且显示 TEST AL,01HTEST AL,01H ; ;测试最低位测试最低位 JZ EVNJZ EVN ; ;偶数,转偶数,转 MOV AL,31HMOV AL,31H ; ;奇数,置奇数,置“1 1” JMP DISPJMP DISP EVN:EVN: MOV AL,30HMOV AL,30H ; ;偶数,置偶数,置“0 0” DISP:DISP: PUSH AXPUSH AX MOV AH,2MOV AH,2 ;2;2号号DOSDOS中断调用中断调用 MOV DL,0AHMOV DL,0AH ; ;输出换行输出换行 INT 21HINT 21H MOV DL,0DHMOV DL,0DH ; ;输出回车输出回车 INT 21HINT 21H POP AXPOP AX MOV AH,2MOV AH,2 ;2;2号号DOSDOS中断调用中断调用 MOV DL,ALMOV DL,AL ; ;输出奇数输出奇数/ /偶数标志偶数标志 INT 21HINT 21H MOV AH,4CH MOV AH,4CH ; ;返回返回DOSDOS INT 21HINT 21H CODE ENDSCODE ENDS END BEGIN END BEGIN ; ;汇编到此结束汇编到此结束 ;P.136;P.136求求x x的符号函数的完整程序的符号函数的完整程序 .MODEL SMALL .MODEL SMALL ; ;小模式小模式 .DATA .DATA ; ;数据段数据段 x DB x DB - -1818 y DB ?y DB ? .CODE .CODE ; ;代码段代码段 START:MOV AX,DATA START:MOV AX,DATA ; ;取数据段取数据段 MOV DS,AX MOV DS,AX MOV AL,x ;MOV AL,x ;取取x x CMP AL,0CMP AL,0 ; ;作作x x- -0 0比较比较 JGE GE1JGE GE1 ;x0;x0则转则转 MOV AL,MOV AL,- -1 1 JMP EXJMP EX ; ;否则否则x x0 0则赋则赋- -1 1 GE1:GE1: JE ZEROJE ZERO ;x0;x0前提下前提下x=0 x=0则转则转 ( (同同JZ )JZ ) MOV AL,1MOV AL,1 ;x0;x0前提下前提下x0 x0则则x x0 0赋赋+1+1 JMP EXJMP EX ; ;转存结果转存结果 ZERO:ZERO: MOV AL,0MOV AL,0 ;x=0;x=0则赋则赋0 0 EX:EX: MOV y,AL MOV y,AL ; ;存结果存结果 MOV AH,4CH MOV AH,4CH ; ;返回返回DOSDOS INT 21HINT 21H END STARTEND START ; ;汇编结束汇编结束 一个入口一个入口 一个出口一个出口 是否需要是否需要加加JMP EXJMP EX? 唐淫窿虚榔蚤陶融卯完胰谭趾资逾朱差髓奸怕缚香彤氟宙骨障郊塑职桌鱼09第四章2选择与循环结构09第四章2选择与循环结构 分支程序作业分支程序作业: : 1 1、编写程序、编写程序, ,将将DISPDISP单元中存放的单字节内容以十单元中存放的单字节内容以十六进制字符形式输出显示。六进制字符形式输出显示。 2 2、求、求X X、Y Y两个双字节无符号数的差的绝对值存入两个双字节无符号数的差的绝对值存入Z Z单元。单元。 编写上述两程序并调试,对结果进行讨论。编写上述两程序并调试,对结果进行讨论。 连挑因汇桥圃绳念长茂抡幼闷测信倔哩慧良唱劣性针殊诞产义候宫刻腺哟09第四章2选择与循环结构09第四章2选择与循环结构 4.6.3 4.6.3 循环结构程序的设计循环结构程序的设计 P.137 P.137 (a) DO WHILE 结构结构(当型循环结构,较当型循环结构,较少用少用) 先判断条件,再执行先判断条件,再执行 循环体部分有可能一次都不执行。循环体部分有可能一次都不执行。 循环结果处理循环结果处理 循环体循环体 循环初始化循环初始化 循环结束条件?循环结束条件? N Y 地址指针初值地址指针初值 数据初值数据初值 循环次数或条件设定循环次数或条件设定 状态判别处理状态判别处理结果存放结果存放 循环公共操作循环公共操作 搬丛腆侩制迢屠赦湍七计颁星靠于拣哨母双追魏咨傲吊免腿狈盂誓徒忙粤09第四章2选择与循环结构09第四章2选择与循环结构 (b) DOUNTIL 结构结构(直到型循环结构,直到型循环结构,较常用较常用) 先执行,再判断条件先执行,再判断条件 循环体部分至少执行一次循环体部分至少执行一次 循环结果处理循环结果处理 循环体循环体 循环初始化循环初始化 继续循环条件?继续循环条件? N Y 地址指针初值地址指针初值 数据初值数据初值 循环次数或条件设定循环次数或条件设定 状态判别处理状态判别处理结果存放结果存放 循环公共操作循环公共操作 循环可以嵌套循环可以嵌套( (多重循环多重循环) ),但各循环结构之间不能交叉,但各循环结构之间不能交叉 瞅涵衅佰烤婴乐掏晃殉郁星条蔷苦毋巨警楚敞霜颁今俯烁阿搞鲁豺厉锈逛09第四章2选择与循环结构09第四章2选择与循环结构 DATA SEGMENT DATA SEGMENT ; ;数据段数据段 BUFBUF DB 12H,31H,0A5HDB 12H,31H,0A5H ; ;定义三个原始数据定义三个原始数据 SUM DB ?SUM DB ? ; ;定义存放累加和的字节单元,无初值定义存放累加和的字节单元,无初值 DATA ENDSDATA ENDS CODE SEGMENT CODE SEGMENT ; ;代码段代码段 ASSUME CSASSUME CS:CODECODE,DSDS:DATA DATA ; ;段说明段说明 STARTSTART:MOV AXMOV AX,DATA DATA ; ;数据段寄存器赋值数据段寄存器赋值 MOV DSMOV DS,AXAX MOV ALMOV AL,0 0 ; ;累加器清累加器清0 0 MOV SIMOV SI,OFFSET BUFOFFSET BUF; ;取取BUFBUF偏移地址偏移地址指向第一个数指向第一个数 LP:LP:ADD ALADD AL,SISI ; ;加第一个数(寄存器间接寻址)加第一个数(寄存器间接寻址) INC SIINC SI ;SI;SI指向第二个数指向第二个数 ADD ALADD AL,SISI ; ;加上第二个数(寄存器间接寻址)加上第二个数(寄存器间接寻址) ADD ALADD AL,SI+1SI+1 ; ;加上第三个数(寄存器加上第三个数(寄存器相对相对寻址)寻址) MOV SUMMOV SUM,ALAL ; ;存和值到存和值到SUMSUM单元单元( (设和值仍为单字节设和值仍为单字节) ) MOV AHMOV AH,4CH 4CH ; ;返回返回DOSDOS INT 21HINT 21H CODE ENDSCODE ENDS END START END START ; ;汇编到此结束,从汇编到此结束,从STARTSTART起执行起执行 补充补充 例例11将将BUFBUF单元开始的三个单元内容相加存放到单元开始的三个单元内容相加存放到SUMSUM单元中。单元中。 饶绽尉镊乎血涨共袜沉酵垃哪府突看毙磷摊到零嘛僻数洗仁颤袭猪心茨伏09第四章2选择与循环结构09第四章2选择与循环结构 DATA SEGMENT DATA SEGMENT ; ;数据段数据段 BUFBUF DB 12H,31H,0A5HDB 12H,31H,0A5H ; ;定义三个原始数据定义三个原始数据 SUM DB ?SUM DB ? ; ;定义存放累加和的字节单元,无初值定义存放累加和的字节单元,无初值 DATA ENDSDATA ENDS CODE SEGMENT CODE SEGMENT ; ;代码段代码段 ASSUME CSASSUME CS:CODECODE,DSDS:DATA DATA ; ;段说明段说明 STARTSTART:MOV AXMOV AX,DATA DATA ; ;数据段寄存器赋值数据段寄存器赋值 MOV DSMOV 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;SI指向第二个数指向第二个数下一个数下一个数 ADD ALADD AL,SISI ; ;加上第二个数(寄存器间接寻址)加上第二个数(寄存器间接寻址) ADD ALADD AL,SI+1SI+1 ; ;加上第三个数(寄存器加上第三个数(寄存器相对相对寻址)寻址) LOOP LP LOOP LP ;未加完,继续循环;未加完,继续循环 MOV SUMMOV SUM,ALAL ; ;存和值到存和值到SUMSUM单元单元( (设和值仍为单字节设和值仍为单字节) ) MOV AHMOV AH,4CH 4CH ; ;返回返回DOSDOS INT 21HINT 21H CODE ENDSCODE ENDS END START END START ; ;汇编到此结束,从汇编到此结束,从STARTSTART起执行起执行 补充补充 例例11将将BUFBUF单元开始的三个单元内容相加存放到单元开始的三个单元内容相加存放到SUMSUM单元中。单元中。 妮彩粥秘烹虞白扑投疽戍单探若借抚南槛按蔼挞院朝得鼓黍稗甲芒瓦弊洪09第四章2选择与循环结构09第四章2选择与循环结构 1.1.单重循环例(单重循环例(1 1) 例例 从从X X单元开始的单元开始的3030个个连续连续单元单元中存放有中存放有3030个个单字节单字节无符号无符号数,从中找出最大者送入数,从中找出最大者送入Y Y单元单元。 (见下一页面)(见下一页面) 循环次数已知,其流程图如何?入口和出口有什么特点?循环次数已知,其流程图如何?入口和出口有什么特点? 类似的问题:类似的问题: 例例 1010个带符号的字,找出最个带符号的字,找出最大大的一个字。的一个字。 例例 1010个带符号的字,从中找出最个带符号的字,从中找出最小小的一个字。的一个字。 瞥疏冈考胯藐舀豺宋森舒眠钒车前湖医懂诽迎义忍膏烬嫌箍勃诧獭匹卤潭09第四章2选择与循环结构09第四章2选择与循环结构 .MODEL SMALL.MODEL SMALL ; ;小模式小模式 .STACK 200H.STACK 200H ; ;预留预留512512个单元的堆栈空间个单元的堆栈空间 .DATA.DATA ; ;数据段数据段 x DB 11,22,. . . x DB 11,22,. . . y DB ?y DB ? .CODE.CODE ; ;代码段代码段 STST:MOV AX,DATA MOV AX,DATA ;设数据段设数据段 MOV DS,AXMOV DS,AX MOV ALMOV AL,X X ; ;取首元素取首元素 循环初始化循环初始化 MOV BXMOV BX,OFFSET X OFFSET X ;取首元素地址;取首元素地址 MOV CX,29 MOV CX,29 ; ;置循环置循环2929次次 L1: INC BX L1: INC BX ;BX;BX指向新一元素(指针调整)指向新一元素(指针调整) 循环体循环体 CMP ALCMP AL,BX BX ; ;与新的一个数比较与新的一个数比较 JAE L2 JAE L2 ; ;若若(AL)(AL)BXBX,AL,AL维持原值,转维持原值,转L2L2 MOV AL,BX MOV AL,BX ; ;新的这个元素大则送入新的这个元素大则送入ALAL L2L2:DEC CX DEC CX ;CXCX循环计数减循环计数减1 1 循环控制循环控制 JNZ L1 ;JNZ L1 ;未完,转回未完,转回L1L1继续继续循环循环 MOV YMOV Y,AX AX ; ;存最大数结果到存最大数结果到Y Y单元单元 结果处理结果处理 MOV AH,4CHMOV AH,4CH ; ;返回返回DOSDOS INT 21HINT 21H END STEND ST ; ;汇编结束汇编结束 LOOP L1LOOP L1 沿枣叉桅舱扶噶摘孺娠删彰称第潦玖它畏裹身集徊屡痉付卒游笛室蔬犬融09第四章2选择与循环结构09第四章2选择与循环结构 例例 从自然数从自然数1 1开始开始累加,直到累加和不超过累加,直到累加和不超过500500为止,统计为止,统计被累加的自然数的个数,并把统计的个数送入被累加的自然数的个数,并把统计的个数送入N N中,把累加和中,把累加和送入送入SUMSUM单元单元。 循环次数事先未知,流程图形式如何?程序循环次数事先未知,流程图形式如何?程序见下一页面。见下一页面。 1.1.单重循环例(单重循环例(2 2) 眯灾狰说认瑚矗裂勋昆狰蚤箍敛羽梳迸帚伍彬癣妥旬提痞嘎无贾钳劫男借09第四章2选择与循环结构09第四章2选择与循环结构 .MODEL SMALL ;小模式小模式 .STACK 200 ;预留预留200200个单元的堆栈空间个单元的堆栈空间 .DATA ;数据段数据段 N DW ? ; SUM DW ? ; .CODE ;代码段代码段 START:MOV AX , DATA ;数据段寄存器赋值数据段寄存器赋值1141H1141H MOV DS , AX MOV 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)500(AX)500, ,转转L L继续继续循环循环 循环控制循环控制 SUB AX,BXSUB AX,BX DEC BXDEC BX MOV N , BX ;存最终自然数,即个数存最终自然数,即个数 结果处理结果处理 MOV SUM , AX ;存累加和存累加和 MOV AH,4CH ;返回返回DOSDOS INT 21H END START ;汇编结束汇编结束 格付倾逸错磐扮葬濒赖沦鲁逊倾见钒培字冬尚韭搔洲闽赛蠕颓顿浚柯疮籍09第四章2选择与循环结构09第四章2选择与循环结构 补充例补充例1 1 软件延时程序段:软件延时程序段: . . . . . . . . . . . . MOV BX,100 MOV BX,100 L1L1: NOPNOP MOV CX,50MOV CX,50 L2:L2: NOPNOP NOPNOP NOPNOP LOOP L2LOOP L2 NOPNOP DEC BXDEC BX JNZ L1JNZ L1 . . . . . . . . . . . 2.2.多重循环例多重循环例 收殷橡凶口洒冉惰穴埔稽樟胸毯愤殆霜瑰雁擅皱宾掸桨坚原舵衡妊泊翟夸09第四章2选择与循环结构09第四章2选择与循环结构 P157P157例例4.20 4.20 将一个将一个1616位二进制数位二进制数BINBIN转换为十进制数转换为十进制数DECIMDECIM并以非组合并以非组合BCDBCD码形式存放。码形式存放。 分析分析1616位无符号二进制整数最大为位无符号二进制整数最大为6553565535,可能有,可能有5 5位位BCDBCD码。每次将该整数除以码。每次将该整数除以1010,第一次得到的余数即为个位,商,第一次得到的余数即为个位,商再除以再除以1010,第二次得到的商为十位,依次类推,最后可得到,第二次得到的商为十位,依次类推,最后可得到全部全部5 5位。位。 无符号数除法指令无符号数除法指令DIVDIV,当除数为,当除数为1616位数时,得到的余数在位数时,得到的余数在DXDX中,商在中,商在AXAX中,这样不用很麻烦做中,这样不用很麻烦做5 5次除法,即可求出次除法,即可求出DECIMDECIM的各位。的各位。 3.3.数码转换例数码转换例 穷囱狠裂腹修斌衷陡生蠢搀风笼侣伯铜斯壁促债舒演炮辈秒站使胃佳柑瘪09第四章2选择与循环结构09第四章2选择与循环结构 .model small.model small .data.data bin dw 5634hbin dw 5634h decim db 5 dup(0)decim db 5 dup(0) .code.code mov ax,data ;mov ax,data ;取出数据段址取出数据段址 mov ds,axmov ds,ax mov cx,5mov cx,5 ; ;循环循环5 5次,依次得到次,依次得到5 5位非组合位非组合BCDBCD码码 mov bx,10mov bx,10 ; ;作作1616位除数用位除数用 lea di,decim+4lea di,decim+4 ;di;di首先指向最低位首先指向最低位BCDBCD码码 mov ax,binmov ax,bin ; ;取被除数送取被除数送AXAX again: again: xor dx,dxxor dx,dx ; ;除数高除数高1616位清零位清零 div bxdiv bx ; ; MOV DI,DLMOV DI,DL ; ;存余数(教材第存余数(教材第157157页遗漏!)页遗漏!) dec didec di ;SI;SI改指向下一门第一个学生成绩改指向下一门第一个学生成绩 loop againloop again ;DI;DI改指向下一门平均成绩单元改指向下一门平均成绩单元 mov ah,4chmov ah,4ch ; ;返回操作系统返回操作系统 int 21hint 21h endend 高增蜂脑丹胞士痹疙栈夜肥律碾回刻挫疟蛙晾戍甚汇巧搁记溺佐峦凌稿涸09第四章2选择与循环结构09第四章2选择与循环结构 (1 1)阅读)阅读P166P166之之2 2、3 3题,题,P170P170之之10.10. (2 2)完成)完成P176P176之之1111题。题。 眠寡踩援链普栅稿涸治锡销言纯缮骨浇劳鸯歹伍塌躲椭祭肇泅窒蛹搜毁摹09第四章2选择与循环结构09第四章2选择与循环结构
展开阅读全文