




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章汇编语言的程序设计,4.6.2基本程序结构的设计顺序结构,分支结构,循环结构是用汇编语言进行程序设计的基本程序结构。下面主要学习形成这些结构的程序控制方法和指令用法。,例在显示器上显示“HOWDOYOUDO!”.MODELSMALL;小模式.DATA;数据段STRINGDBHOWDOYOUDO!$.STACK200;堆栈段,预留200字节.CODE;代码段START:MOVAX,DATA;取数据段地址MOVDS,AXMOVDX,OFFSETSTRING;取字符串首地址MOVAH,9;9号DOS功能调用,输出字符串INT21HMOVAH,4CH;返回DOSINT21HENDSTART;汇编结束,简化段的定义,汇编语言程序调试过程,编辑建立汇编语言源程序源文件.ASM汇编目标文件.OBJ列表文件.LST交叉引用文件.CRF链接可执行文件.EXE连接映象文件.MAP调试最终程序,EDIT,MASM,LINK,DEBUG,试运行、验证、诊断、修改,写字板、记事本,标号:,条件满足?,处理,N,Y,IFTHEN结构,程序结构:一个入口,一个出口测试/比较指令(TEST/CMP)条件转移指令(Jx标号)处理体标号:其他指令,4.6.2分支结构程序的设计P.135,程序结构:TEST/CMP指令Jx标号1处理体P1JMP标号2标号1:处理体P2标号2:其他指令,条件满足?,处理P1,处理P2,标号1:,标号2:,N,Y,IFTHENELSE结构,标号1:,条件1成立?,P1,N,Y,CASE结构,程序结构:TEST/CMP指令(测试条件1)Jx标号1;不满足转标号1处理体P1JMP标号n+1标号1:TEST/CMP指令(测试条件2)Jx标号2;不满足转标号2处理体P2JMP标号n+1标号2:TEST/CMP指令(测试条件3)Jx标号3;不满足转标号3处理体P3JMP标号n+1标号3:TEST/CMP指令(测试条件4)标号n+1:(公共出口),条件2成立?,条件n成立?,Pn+1,标号2:,标号n:,标号n+1:,P2,Pn,N,N,Y,Y,4.6.21.二路分支结构程序设计P.135,例从键盘输入一位数字,判断其奇偶性,并在屏幕输出一个标志,若为奇数,则输出1,否则输出0。画出流程图。,偶数?,AL-30H,AL-31H,Y,N,输出AL,一个入口,一个出口,NAMEP124TITLE判断从键盘输入一位数字的奇偶性,并在屏幕输出1(奇数)或0(偶数)标志。CODESEGMENT;代码段ASSUMECS:CODEBEGIN:MOVAH,01H;1号DOS中断调用INT21H;键入一位数字送AL且显示TESTAL,01H;测试最低位JZEVN;偶数,转MOVAL,31H;奇数,置“1”JMPDISPEVN:MOVAL,30H;偶数,置“0”DISP:PUSHAXMOVAH,2;2号DOS中断调用MOVDL,0AH;输出换行INT21HMOVDL,0DH;输出回车INT21HPOPAXMOVAH,2;2号DOS中断调用MOVDL,AL;输出奇数/偶数标志INT21HMOVAH,4CH;返回DOSINT21HCODEENDSENDBEGIN;汇编到此结束,NAMEP124TITLE判断从键盘输入一位数字的奇偶性,并在屏幕输出1(奇数)或0(偶数)标志。CODESEGMENT;代码段ASSUMECS:CODEBEGIN:MOVAH,01H;1号DOS中断调用INT21H;键入一位数字送AL且显示TESTAL,01H;测试最低位JZEVN;偶数,转MOVAL,31H;奇数,置“1”JMPDISPEVN:MOVAL,30H;偶数,置“0”DISP:PUSHAXMOVAH,2;2号DOS中断调用MOVDL,0AH;输出换行INT21HMOVDL,0DH;输出回车INT21HPOPAXMOVAH,2;2号DOS中断调用MOVDL,AL;输出奇数/偶数标志INT21HMOVAH,4CH;返回DOSINT21HCODEENDSENDBEGIN;汇编到此结束,CODESEGMENT;代码段ASSUMECS:CODEBEGIN:MOVAH,01H;1号DOS系统调用INT21H;键入一位数字送AL且显示TESTAL,01H;测试最低位JZEVN;偶数,转MOVAL,31H;奇数,置“1”标志JMPDISPEVN:MOVAL,30H;偶数,置“0”标志DISP:MOVAH,2;2号DOS系统调用PUSHAX;保存AX中标志内容(因为2号INT21H会将DLAL)MOVDL,0AH;输出换行INT21HMOVDL,0DH;输出回车INT21HPOPAX;弹出AX中标志内容MOVAH,2;2号DOS系统调用MOVDL,AL;输出奇数/偶数标志INT21HMOVAH,4CH;返回DOSINT21HCODEENDSENDBEGIN;汇编到此结束,一个入口,一个出口,4.6.22.多路分支结构程序设计,例任意给定x值(-128x+127),求以下符号函数y的值。1,当x0y=0,当x=0-1,当x0画出程序流程图,见教材P136图4.6。,NAMEP124TITLE判断从键盘输入一位数字的奇偶性,并在屏幕输出1(奇数)或0(偶数)标志。CODESEGMENT;代码段ASSUMECS:CODEBEGIN:MOVAH,01H;1号DOS中断调用INT21H;键入一位数字送AL且显示TESTAL,01H;测试最低位JZEVN;偶数,转MOVAL,31H;奇数,置“1”JMPDISPEVN:MOVAL,30H;偶数,置“0”DISP:PUSHAXMOVAH,2;2号DOS中断调用MOVDL,0AH;输出换行INT21HMOVDL,0DH;输出回车INT21HPOPAXMOVAH,2;2号DOS中断调用MOVDL,AL;输出奇数/偶数标志INT21HMOVAH,4CH;返回DOSINT21HCODEENDSENDBEGIN;汇编到此结束,NAMEP124TITLE判断从键盘输入一位数字的奇偶性,并在屏幕输出1(奇数)或0(偶数)标志。CODESEGMENT;代码段ASSUMECS:CODEBEGIN:MOVAH,01H;1号DOS中断调用INT21H;键入一位数字送AL且显示TESTAL,01H;测试最低位JZEVN;偶数,转MOVAL,31H;奇数,置“1”JMPDISPEVN:MOVAL,30H;偶数,置“0”DISP:PUSHAXMOVAH,2;2号DOS中断调用MOVDL,0AH;输出换行INT21HMOVDL,0DH;输出回车INT21HPOPAXMOVAH,2;2号DOS中断调用MOVDL,AL;输出奇数/偶数标志INT21HMOVAH,4CH;返回DOSINT21HCODEENDSENDBEGIN;汇编到此结束,;P.136求x的符号函数的完整程序.MODELSMALL;小模式.DATA;数据段xDB-18yDB?.CODE;代码段START:MOVAX,DATA;取数据段MOVDS,AXMOVAL,x;取xCMPAL,0;作x-0比较JGEGE1;x0则转MOVAL,-1JMPEX;否则x0则赋-1GE1:JEZERO;x0前提下x=0则转(同JZ)MOVAL,1;x0前提下x0则x0赋+1JMPEX;转存结果ZERO:MOVAL,0;x=0则赋0EX:MOVy,AL;存结果MOVAH,4CH;返回DOSINT21HENDSTART;汇编结束,一个入口,一个出口,是否需要加JMPEX?,分支程序作业:1、编写程序,将DISP单元中存放的单字节内容以十六进制字符形式输出显示。2、求X、Y两个双字节无符号数的差的绝对值存入Z单元。编写上述两程序并调试,对结果进行讨论。,4.6.3循环结构程序的设计P.137,(a)DOWHILE结构(当型循环结构,较少用)先判断条件,再执行循环体部分有可能一次都不执行。,循环结果处理,循环体,循环初始化,循环结束条件?,N,Y,地址指针初值数据初值循环次数或条件设定,状态判别处理结果存放,循环公共操作,(b)DOUNTIL结构(直到型循环结构,较常用)先执行,再判断条件循环体部分至少执行一次,循环结果处理,循环体,循环初始化,继续循环条件?,N,Y,地址指针初值数据初值循环次数或条件设定,状态判别处理结果存放,循环公共操作,循环可以嵌套(多重循环),但各循环结构之间不能交叉,DATASEGMENT;数据段BUFDB12H,31H,0A5H;定义三个原始数据SUMDB?;定义存放累加和的字节单元,无初值DATAENDSCODESEGMENT;代码段ASSUMECS:CODE,DS:DATA;段说明START:MOVAX,DATA;数据段寄存器赋值MOVDS,AXMOVAL,0;累加器清0MOVSI,OFFSETBUF;取BUF偏移地址指向第一个数LP:ADDAL,SI;加第一个数(寄存器间接寻址)INCSI;SI指向第二个数ADDAL,SI;加上第二个数(寄存器间接寻址)ADDAL,SI+1;加上第三个数(寄存器相对寻址)MOVSUM,AL;存和值到SUM单元(设和值仍为单字节)MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART;汇编到此结束,从START起执行,补充例1将BUF单元开始的三个单元内容相加存放到SUM单元中。,DATASEGMENT;数据段BUFDB12H,31H,0A5H;定义三个原始数据SUMDB?;定义存放累加和的字节单元,无初值DATAENDSCODESEGMENT;代码段ASSUMECS:CODE,DS:DATA;段说明START:MOVAX,DATA;数据段寄存器赋值MOVDS,AXMOVAL,0;累加器清0MOVSI,OFFSETBUF;取BUF偏移地址指向第一个数MOVCX,03H;设置循环3次LP:ADDAL,SI;加第一个数(寄存器间接寻址)INCSI;SI指向第二个数下一个数ADDAL,SI;加上第二个数(寄存器间接寻址)ADDAL,SI+1;加上第三个数(寄存器相对寻址)LOOPLP;未加完,继续循环MOVSUM,AL;存和值到SUM单元(设和值仍为单字节)MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART;汇编到此结束,从START起执行,补充例1将BUF单元开始的三个单元内容相加存放到SUM单元中。,1.单重循环例(1),例从X单元开始的30个连续单元中存放有30个单字节无符号数,从中找出最大者送入Y单元。(见下一页面)循环次数已知,其流程图如何?入口和出口有什么特点?类似的问题:例10个带符号的字,找出最大的一个字。例10个带符号的字,从中找出最小的一个字。,.MODELSMALL;小模式.STACK200H;预留512个单元的堆栈空间.DATA;数据段xDB11,22,.yDB?.CODE;代码段ST:MOVAX,DATA;设数据段MOVDS,AXMOVAL,X;取首元素循环初始化MOVBX,OFFSETX;取首元素地址MOVCX,29;置循环29次L1:INCBX;BX指向新一元素(指针调整)循环体CMPAL,BX;与新的一个数比较JAEL2;若(AL)BX,AL维持原值,转L2MOVAL,BX;新的这个元素大则送入ALL2:DECCX;CX循环计数减1循环控制JNZL1;未完,转回L1继续循环MOVY,AX;存最大数结果到Y单元结果处理MOVAH,4CH;返回DOSINT21HENDST;汇编结束,LOOPL1,例从自然数1开始累加,直到累加和不超过500为止,统计被累加的自然数的个数,并把统计的个数送入N中,把累加和送入SUM单元。循环次数事先未知,流程图形式如何?程序见下一页面。,1.单重循环例(2),.MODELSMALL;小模式.STACK200;预留200个单元的堆栈空间.DATA;数据段NDW?;SUMDW?;.CODE;代码段START:MOVAX,DATA;数据段寄存器赋值1141HMOVDS,AXMOVAX,0;累加和单元清0初始化MOVBX,0;自然数单元置0L:INCBX;BX加1得新一个自然数循环体ADDAX,BX;加入新一个自然数CMPAX,500;累加和与500比较,有符号数还是无符号数?JBEL;(AX)500,转L继续循环循环控制SUBAX,BXDECBXMOVN,BX;存最终自然数,即个数结果处理MOVSUM,AX;存累加和MOVAH,4CH;返回DOSINT21HENDSTART;汇编结束,补充例1软件延时程序段:.MOVBX,100L1:NOPMOVCX,50L2:NOPNOPNOPLOOPL2NOPDECBXJNZL1.,2.多重循环例,P157例4.20将一个16位二进制数BIN转换为十进制数DECIM并以非组合BCD码形式存放。分析16位无符号二进制整数最大为65535,可能有5位BCD码。每次将该整数除以10,第一次得到的余数即为个位,商再除以10,第二次得到的商为十位,依次类推,最后可得到全部5位。无符号数除法指令DIV,当除数为16位数时,得到的余数在DX中,商在AX中,这样不用很麻烦做5次除法,即可求出DECIM的各位。,3.数码转换例,.modelsmall.databindw5634hde
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年安全工程师考试应急管理及事故调查模拟试卷
- 儿童营养需求与饮食指南
- 2025年场(厂)内专用机动车辆维修人员考试试卷(汽车维修行业品牌知名度提升策略研究)
- 2025年劳动保障协理员(初级)考试试卷:劳动保障基础知识与社会保障法规应用案例分析集
- 2025年风力发电项目提案报告范文
- 2025年电子商务师(中级)职业技能鉴定试卷:电子商务平台数据分析与客户行为预测试题
- 农村家庭农场的经营管理协议
- 2025年消防工程师考试题库-消防设施设备选型与防火分区试题
- 大货车司机聘用协议
- 2025年辅导员招聘考试题库:校园文化建设案例分析与评估试题
- 2025年广东省广州市越秀区第十六中学中考二模数学试卷(含部分答案)
- 2025年湖南省中考语文试卷真题及答案详解(精校打印版)
- 2025年湖北省高考政治试卷真题(含答案解析)
- 供电施工安全培训课件
- 北京市西城区2023-2024学年六年级下学期数学期末检测试卷(含答案)
- 2024年北京东城区中考地理试卷真题及答案详解
- 发动机质保协议书合同
- 2025年中国建筑钢结构产品市场调查研究报告
- DB31T 1201-2019 老年照护统一需求评估规范
- 云南省昆明市 2022-2023学年高一下学期期末英语试题(含答案)
- 诊所合伙投资协议书
评论
0/150
提交评论