版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1章基础知识,循环和分支编程,1)分析问题的含义并确定算法。这一步是编译一个高质量程序的关键,所以我们不应该一拿到标题就急于写程序,而是要仔细分析和理解标题的含义,找出合理的算法和合适的数据结构。2)根据算法绘制程序框图。这对初学者来说尤其重要,这样可以减少出错的可能性。当图片被框住时,该算法可以从粗到细逐步实现。3)根据框图编写程序。4)在计算机上调试程序。任何程序都必须经过调试,以检查您的设计思想是否正确,以及您的程序是否符合您的设计思想。在调试程序的过程中,你应该善于使用机器提供的调试工具(如DEBUG),你会发现它会给你提供很大的帮助。汇编语言程序的编译和问题分析的步骤如下:序列、分
2、支、循环程序和子程序的设计是汇编语言程序设计的基本内容。在此基础上,我们应该掌握汇编语言编程的基本方法和技巧,包括递归子程序设计,COM和EXE格式程序的结构和特点,以及多模块编程方法。1.汇编语言编程的基本方法,概述,概述,2。程序1的基本结构。序列结构程序2。分支结构程序3。循环(重复)结构程序序列结构分支结构循环(重复)结构序列结构程序完全按照指令编写前后的顺序执行每个指令,这是最基本和最常见的程序结构特征,如序列和简单结构,它只适用于简单的问题,如例1中的计算,例2中的移位,第2节:循环结构,第1章:基础知识,循环和分支程序设计,MOV AX,0;累加和求和寄存器清零,为0 MOV B
3、X,副秘书长;阵列起始地址被发送到BX 50岁的MOVCX;循环控制计数再次初始化:addax,BX ADD BX,2;数组地址增加2,BX指向下一个元素deccx循环控制计数减1。如果计数不是0,继续循环MOV S,ax;当计数为0时,循环结束,并将其存储在S中,以确保循环的正常执行和结束:正确初始化循环控制计数和正确检测循环条件必须确保能够达到循环结束条件(例如,循环中有一条修改循环控制值的指令),并且指令系统提供了一条专门用于循环结构的循环控制指令,这使得循环结构更容易实现。循环控制指令,循环控制指令的传输范围是:-128 127字节,再次循环,(段内短传输),(CX) 0和ZF=1?(
4、CX) 0,ZF=0?在前面的求和示例中,可以使用一条循环指令来代替两条指令:80,MOV,MOV,再一次,再一次,循环编程方法,并且控制循环的方法可以分为两类:循环数已知时使用循环计数,循环数不确定时使用条件循环。让我们设置:字符串。例如,字变量num中的数字由16位二进制数字分隔,逐位转换为ASCII码,并以16字节为单位存储,从最高有效位开始以binbuf作为起始地址。让:(数)=4230H,要求逐位分离4230h=0.10001.001.0000b,并将其转换为:30 . 31 . 30 . 30 . 31 . 30 . 30 . 31 . 30 . 31 . 30 . 30,首先(数
5、)-(DX),然后讨论如何分离每个二进制位并将其转换为ASCII码。分析如下:根据上述分析,依次向左移动DX中的二进制数可以使每一位的分离(AND)和ASCII码转换(ADD)操作完全相同,便于组织循环,循环次数是已知的(16次)。例如,要将十进制数转换为八进制数,方法:(number)/8保留余数,除法循环的次数事先未知,并且只有当商为0时循环才结束。这个例子是一个条件循环,这个例子是一个计数循环,下一步,(DX)=0.100001.0001.0000,1.00001.00000 (RolDX,1),0.000001 (and?1),0 0 0 0 0 0 0 0,0 0 1 0 0 0 0
6、 0 0 0 0(添加?30H),0 0 1 1 0 0 0 0 0,30,0 0 0 1 0 0 0 1 0 1 0 0 0 1(ROL DX,1),0 0 0 0 0 0 0 1 (AND),0 0 0 0 0 0 0 1,0 0 1 0 0 0 0(ADD),0 0 1 0 1 0 0 0 1,31,0 1 0 0 0 1 0 0 1 0 1 0 0 0 0(ROL DX,1), 0 0 0 0 0 0 1 (AND),0 0 0 0 0 0 0 0,0 0 1 0 0 0 0(ADD),0 0 1 0 0 0 0,30 31 30 30 30 30 30 31 30 30 30 30
7、30 30 31 30 30 30 30 30,1。2。16。binbuf,return,30,计算AX中包含“1”的二进制数的总数,程序段如下:MOVCX,0再次:ANDAX,AX;(AX)=0?JZKIT;是的,退出环路SALAX,1;否则,(AX)的最高移位进入CF位JNCNEXT;在CF1,转到下一步,再次循环inccxCF=1,计数器(CX) (CX) 1下一个:再次是JMP;Re-loop QUIT:上述程序是等价的循环程序结构:首先判断条件,然后执行循环。课堂练习:用圆形结构完成从1到100的自然数的求和。下一步,当型循环和直到型循环:存储模型和简化的段定义伪指令。较新的汇编器(
8、MASM5.0和MASM6.0)不仅支持完整的段定义伪指令,还提供了新的简单易用的存储模型和简化的段定义伪指令。1存储模型伪指令存储模型的功能是什么?存储模型决定了程序的大小,也决定了子程序调用、指令传输和数据访问的默认属性(近或远)。当使用简化段定义的源程序格式时,必须有一个存储模型。在段定义语句之前的model语句,解释如何在内存中放置每个段。MODEL伪指令的常用格式如下:MODEL存储模型,在DOS下用汇编语言编程时,可以根据程序的不同特点选择前六个模型,一般可以选择SMALL模型。此外,TINY模型将生成COM程序,而其他模型将生成EXE程序。平面模型只能在32位x86处理器上运行,
9、在操作系统下不允许使用这种模型。当用高级语言混合编程时,它们的存储模型应该是一致的。2简化的段落伪指令和简化的段落定义语句写得很简单。声明。代码。数据和。STACK分别代表代码数据段和堆栈段的开始,一个段的开始自动结束前一个段。必须有存储模型语句。采用简化分段指令前的模型。3与简化线段定义相关的预定义符号。汇编程序给出一组与简化段定义相关的预定义符号,这些符号可以出现在程序中,并被汇编程序识别和使用。相关的预定义符号如下:(1)由定义的代码段名称或段组名称。代码伪指令。(2)数据由。数据伪指令,或通过。数据。数据?由定义的段组名。CONST和。STACK。(3)栈栈段的段名或段组名。在完整的段
10、定义的情况下,在程序开始时,有必要加载具有段名的数据段寄存器。例如,mov ax,data_seg1mov ds,ax,如果使用简化的段定义,则数据段仅由定义。数据,但没有给出段名。此时,mov ax、数据mov ds、ax可用于给出数据段的段名。,返回,参考答案2:型号小。代码移动ax,数据移动ds,ax xor ax,ax移动CX,100再次3360添加ax,CX循环再次移动ax,4c 00提示21h结束,参考答案1:小模型。数据编号dw1。代码mov ax,数据mov ds,ax mov ax,0mov CX,100再次3360 add ax,num Inc num循环再次mov ax,
11、4c00h int 21h end,(以下示例可由汇编程序版本5编译。x或6。x),思考问题:显示以下数组中的数据:ARRAY DB 1,3,7,8,5,4,6,8,第1章,基础知识,循环和分支编程,code_seg segment main proc far假定cs:code_seg start: mov bx,8222h mov ch,4;四个循环后,旋转: mov cl,4。将rol bx、cl从高4位循环到低4位;流通BX mov al,bl;思考:四位二进制对应一位十六进制。循环4次,首先显示每个循环的高4位:将rol判断结果与10进行比较。第一章基础知识,循环和分支编程,等等;取出
12、要转换的4位二进制数,并将其存储在al寄存器cmp al,10中;判断它是否是十进制字符jae changetoa _ f;如果大于10,跳转到changetoa_f进行十六进制转换,加1,30h0-9十六进制转换jmp disp change toa _ f: addal,37ha-f disp: mov dl,al的十六进制转换。结果mov ah,02 int 21h dec ch显示在屏幕上;使用dec和jnz实现循环操作,而不是循环jnz旋转的功能,第1章基础知识、循环和分支编程、movax、4c00hint21h主endp code _ segends end start在程序结束时
13、,数字y的ADDRess存储在addr单元中,程序准备将数字y中的1存储在COUNT单元中。算法:要测量Y中1的个数,我们应该一点一点地测试它。一种简单的方法是根据最高有效位是否为1来计数,然后将位数一个接一个地移动到最高位。循环的结束可以由计数值16来控制,但是一个更好的方法是将测试号是否为0作为结束条件与上述方法结合使用,这可以在许多情况下缩短程序的执行时间。此外,考虑到y本身为0的可能性,应采用WHILEDO结构。第1章基础知识,循环和分支编程,程序框图,第1章基础知识,循环和分支编程,程序示例:在附加段中,有一个带有第一个地址列表的未排序字数组。数组的长度存储在数组的第一个字中,数组的
14、第一个地址存储在DI寄存器中。AX寄存器保存一个数字。需要编译一个程序来找到数组中的数字,如果找到了,就从数组中删除它。算法:这个程序应该首先找出数组中是否有(AX),如果没有,就结束程序,不对数组做任何处理。如果找到这个元素,它前面的元素(这意味着地址比这个元素高)应该向后移动一个字(也就是说,向低地址方向移动),并且应该修改数组长度值。如果找到的元素正好在数组的末尾,您不必移动任何元素,只需修改数组长度值。这里,第一部分中的搜索元素可以使用字符串处理指令,第二部分中的删除元素可以使用循环结构。由于元素的位置在搜索结束时是已知的,因此可以将其设计为循环数已知的情况。第1章基础知识,循环和分支程序设计,流程图:第1章基础知识,循环和分支程序设计,程序:数据段列表DW 10,0,11 99数据段结束代码段假定为cstart:代码段,s :数据段主进程开始: mov ax,数据段;代码段地址空间分配。设置DF=0,并自动增加地址movax,33;设置AX寄存器lea di、LIST、第1章基础知识、循环和分支编程、pushdi的值。按下LIST的第一个地址,改变以后数组元素的个数,你可以弹出这个;地址movcx,s:di。数组编号放入CX,adddi,2repnz scasw将A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年国家开放大学电大《金融风险管理》名词解释题题库及答案
- 2026年川北幼儿师范高等专科学校单招职业适应性测试题库含答案详解(a卷)
- 2026年广元中核职业技术学院单招职业适应性考试题库及答案详解(网校专用)
- 2026年广西培贤国际职业学院单招职业倾向性测试题库及答案详解(必刷)
- 2026年广东省单招职业适应性考试题库含答案详解(典型题)
- 2026年广东松山职业技术学院单招综合素质考试题库附答案详解(轻巧夺冠)
- 2026年广州体育职业技术学院单招职业技能考试题库带答案详解(b卷)
- 2026年嵩山少林武术职业学院单招职业倾向性考试题库及一套参考答案详解
- 2026年山西艺术职业学院单招职业适应性考试题库及答案详解(网校专用)
- 2026年平凉职业技术学院单招职业适应性考试题库带答案详解(考试直接用)
- 【初中 物理】二力平衡课件-2025-2026学年人教版物理八年级下册
- 【华信咨询】中国智算中心(AIDC)产业发展白皮书(2024年)
- 2026年及未来5年市场数据中国吡咯喹啉醌PQQ行业发展潜力分析及投资战略数据分析研究报告
- 重建祠堂施工方案(3篇)
- 酒店餐厅外包协议书
- 2026年湖南城建职业技术学院单招职业技能测试模拟测试卷附答案
- 燃气管道安装质量控制管理措施
- 2025年公安专业科目考试真题及答案
- 儿童肥胖疾病科普
- 水电预埋施工流程方案
- 2025“Z世代眼中的世界”全球青年调查研究报告
评论
0/150
提交评论