学习一门语言,我们首先学其基本的数据类型和逻辑表达式的一些基本语句。为了使程序具有更加良好的运行效率,我们还需要学习它的一些设计结构。这一篇我们将以此为大家讲解一些常见的程序结构,以及其在汇编语言中的设计方法。

一个好的程序应满足以下几个要求:

  1. 结构化、简明、易读、易调试、易维护;
  2. 执行速度快;
  3. 占用存储空间尽量少。

常见程序结构:

  • 顺序结构
  • 分支结构
  • 循环结构
  • 子程序结构

一、顺序结构

按照程序的书写顺序执行,这样的程序结构就叫做顺序结构。

例:设变量X、Y均为16位无符号数,试写一个求表达式2X + Y值的程序:

DSEG   SEGMENT X           DW  34H   ; 表示将十六进制数 34H 存放到 X 中Y           DW  56HZ            DW  ?,?   ; ?表示为空,也可以不写
DSEG    ENDS
CSEG    SEGMENT  ASSUME    CS: CSEG , DS: DSEG
START:  MOV   AX, DSEG    MOV   DS, AX      ; 让DS指向自己定义的数据段MY_D     SEGMENT
XOR   DX , DX           MOV   AX , XADD   AX , AX               ADC   DX , 0      ; ADC能够把进位加到DADD   AX , Y                 ADC   DX,0  MOV   Z , AX    MOV   Z+2 , DX   MOV   AH , 4CH     ; 因为程序都执行完成要返回dos,要将中断号4ch送AH INT    21H         ; 调用dos中断21h,中断调用号为AH( 即4ch),返回dos
CSEG  ENDSEND    START

汇编语言中的AX、BX、CX、DX作为CPU内部的通用寄存器中的数据寄存器助记专符用来存放参与运算的数据或是存储运算的结果。这四个数据寄存器都是16位的,实际由两个8位寄存器组合而成,这是为了灵活处理8位数据。

二、分支结构

顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。

例:判断MEMS单元的数据,若数据>0,结果为1;若数据<0,结果为-1;若数据=0,结果为0;将结果存入MEMD单元:

MY_D     SEGMENT MEMS    DB  08H MEMD    DB  ?
MY_D        ENDS
MY_C    SEGMENT ASSUME  DS:MY_D , CS:MY_C
START:      MOV  AX , MY_D    ; 获取数据段的段地址 MOV   DS, AX MOV      AL, MEMS  ; 将待比较元素放入AL中          CMP    AL, 0     JGE     NEXT      ; 有符号数如果>=0,则转向next            MOV      AL, -1    ; 如果不满足 >=0, 则顺序执行,给AL赋值-1            JMP      DONE      ; 无条件跳转指令
NEXT: JE    DONE      je      ; 表示等于就跳转          MOV    AL, 1     ; 如果不等于的话则赋值为1
DONE: MOV  MEMD, AL MOV  AX , 4C00H            INT   21H
MY_C  ENDS
END    START

三、循环结构

在程序设计中遇到需要按照一定的规律或条件,多次重复执行一组指令的情况时,可以用循环程序实现。循环结构一般根据某一条件判断为真或为假来确定是否重复执行循环体,条件永真或无条件的循环就是逻辑上的死循环。

循环程序通常由三部分组成:

  • 循环初始化
  • 循环体
  • 循环控制部分

例:计算1~100的数字之和,并将结果存入变量SUM中:

DATA    SEGMENTSUM  DW ?     ; 用于存储计算结果
DATA    ENDS
CODE    SEGMENTASSUME  CS:CODE , DS:DATA
START:  MOV     AX , DATAMOV     DS , AX   XOR     AX , AX   ; 将AX清零,将CF标志位也清零MOV     CX , 100
AGAIN:  ADD      AX , CXLOOP       AGAIN     ; 执行LOOP指令时,CPU自动将CX的值减1,若CX=0,则结束循环;MOV        SUM , AX MOV        AH, 4CH   INT        21H
CODE    ENDS
END     START 

四、子程序结构

为了简化编程,常把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,这就是子程序。子程序的调用过程是通过CALL指令实现的,子程序的返回则通过RET指令完成。为了使子程序结构清晰,可以使用过程定义伪指令PROC和ENDP来定义子程序。

例:编写子程序将寄存器AX内容乘10,结果仍存在AX中:

主程序:
X       EQU 1000
CODE    SEGMENTASSUME  CS:CODE
START:  MOV  AX, X      CALL  MUL10  MOV  AX, 4C00HINT  21H
MUL10   PROC    PUSHF                   PUSH  BX            ADD  AX, AX         MOV  BX, AX         ADD  AX, AX         ADD  AX, AX         ADD  AX, BX         POP BX    ; 弹出堆栈,恢复现场        POPF                RET
MUL10   ENDP
CODE    ENDS
END     START

语言主程序和子程序的写法_汇编语言程序设计第三篇——汇编程序结构相关推荐

  1. 琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记

    琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记 2011年12月20日 基础篇 第1章 背景知识 1 1.1 Win32的软硬件平台 1.1.1 80x86系列处理器简史 1.1 ...

  2. C语言程序设计有哪几种结构,第章c语言程序设计的三种基本结构.ppt

    第章c语言程序设计的三种基本结构 北京科技大学 计算机系 第2章 C语言程序设计 的三种基本结构 2.1 顺序结构程序设计 2.1.1 C语句 2.1.2 字符数据的输入与输出 2.1.3 格式输入与 ...

  3. 计算机帮教助教活动总结,【助教总结】_助教总结范文三篇

    教师是一种很神圣的职业,不仅是正式教师,就连助教的作用也尤为重要:那么对于担任过助教的人来说,助教总结是一项非常重要的工作.让我们来看看助教总结范文吧. 第一篇:助教总结 700字 一年的数学助教工作 ...

  4. 伪指令endp告诉汇编程序_汇编语言程序设计第二篇——80X86汇编语言伪指令

    一.伪指令详解 伪指令在百度百科中的定义为: 伪指令(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编程序提供汇编信 ...

  5. python语言的实验心得体会范文_实验心得体会四篇

    实验心得体会四篇 导读: 本文 实验心得体会四篇,仅供参考,如果能帮助到您,欢迎点 评和分享. 下面是整理的实验心得体会范文,欢迎阅读参考. 实验心得体会 ( 一 ) 时间过得真快,不经意间,一个学期 ...

  6. mysql怎么分组计算逾期率_转行数据分析第三篇:mysql查询入门练习题

    这篇练习题是我在学sql入门的时候做的,应该算是在网上能找到的习题里最基础的一篇,非常适合新手练习,如果你接触sql不超过半个月,建议可以看一下<sql必知必会>或<mysql必知必 ...

  7. MySQL代做题_转行数据分析第三篇:mysql查询入门练习题

    这篇练习题是我在学sql入门的时候做的,应该算是在网上能找到的习题里最基础的一篇,非常适合新手练习,如果你接触sql不超过半个月,建议可以看一下<sql必知必会>或<mysql必知必 ...

  8. c语言课程设计文献检索,文献检索课学习心得三篇(2)

    文献检索课学习心得 篇[3] 内容提要:通过本次文献信息检索课程的学习,有利于培养我们的信息意识.自学意识和知识创新能力,使我们养成了自主学习的习惯和独立获取信息的能力,了解了信息社会中文献信息检索的 ...

  9. 消防给水及消火栓系统技术规范_技术实务第三篇第二章:消防给水及消火栓系统学习笔记...

    第一部分:消防给水及消火栓系统历年章节考试占分 2015年单选五题多选一题共7分:2016年单选五题多选1题共7分:2017年单选五题多选一题共7分:2018年单选七题多选一题共9分:历年真题会在本篇 ...

最新文章

  1. 关联规则推荐及Apriori算法
  2. linux修改selinux
  3. 【OpenCV3】cv::convertScaleAbs()使用详解
  4. 陶哲轩实分析命题 11.10.7
  5. lua和unity如何交互_Unity中C#对象与Lua之间交互的原理
  6. 如何判断一个字符串的编码类型?
  7. [嵌入式][分享][交流]发布一个消息地图的模块
  8. 黑龙江科技大学计算机考研复试科目,2020年黑龙江科技大学计算机应用技术考研经验分享...
  9. linux 动态库构造函数,Linux共享库全局构造函数的相互依赖性
  10. OpenJudge NOI 3.3 3340:RPN Calculator
  11. Github无法拉代码
  12. npm 更新_npm 的安全困扰:仅有 9.27% 的 npm 开发者使用 2FA
  13. android项目导入zoom视频会议流程
  14. 2022腾讯QQ春节红包活动 虎跃星辰玩法总攻略
  15. 爬虫之模拟强智系统登录
  16. Burpsuite简单代理配置
  17. 改oracle sockets,安装GI最后检查时出现warning - Domain Sockets,PRVG-11750
  18. 3D Models (3D 模型)
  19. 软件测试--黑盒测试用例、测试步骤设计方法(正交实验法、功能图法、其他用例设计方法)
  20. for(Map.EntryString, String entry:params.entrySet())

热门文章

  1. [云炬创业学笔记]第三章商业创意的发掘与评估测试3
  2. 科大星云诗社动态20210504
  3. (Q 2)netstat命令 检测TCP/IP 网络链接是否存在异常
  4. pls-00302: 必须声明 组件_手把手教你开发vue组件库
  5. 模拟标准c++中的Rtti
  6. 期待着DELPHI的浴火重生
  7. Makefile中的patsubst函数
  8. JAVA去掉指定字符
  9. 如何复制带格式的Notepad++文本?
  10. 《2020总结-2021展望》