2016微机技术-第七章-汇编程序设计
- 格式:doc
- 大小:423.00 KB
- 文档页数:22
汇编语言程序设计经典课件1. 引言汇编语言是一种低级程序设计语言,通过使用特定的指令和寄存器对计算机硬件进行直接操作。
本课件旨在帮助读者理解并掌握汇编语言程序设计的基本概念和技巧。
2. 基本概念在开始学习汇编语言之前,有一些基本概念需要了解:2.1 计算机的工作原理•冯·诺依曼体系结构•控制器和算术逻辑单元(ALU) •存储器和寄存器2.2 汇编语言的基本原理•指令集和操作码•寄存器和内存•标志寄存器和条件代码在汇编语言中,数据的表示方式有以下几种:3.1 二进制表示法•正整数、负整数和零•浮点数3.2 十进制表示法•常见数据类型3.3 其他表示法•八进制、十六进制和ASCII码表示法汇编语言包含各种指令,用于执行不同的操作。
以下是一些常见的基本指令:4.1 数据传送指令•MOV指令•XCHG指令4.2 算术和逻辑指令•ADD指令•SUB指令•AND指令•OR指令•XOR指令4.3 跳转指令•JMP指令•JZ指令•JC指令5. 汇编语言的程序结构一个汇编语言程序通常包含以下几个部分:5.1 程序的入口和出口•程序的开始和结束•程序的返回指令5.2 子程序•什么是子程序•如何调用和返回子程序5.3 中断处理程序•什么是中断•如何编写中断处理程序6. 汇编语言的调试和优化6.1 调试工具•机器级调试工具•模拟器和调试器6.2 优化技巧•寄存器的使用•循环优化•数据对齐7. 汇编语言的应用领域汇编语言在很多领域都有广泛的应用,包括但不限于:7.1 嵌入式系统7.2 驱动程序开发7.3 游戏开发7.4 系统安全8. 结语汇编语言是一种能直接与计算机硬件交互的低级语言,它对于理解计算机的工作原理和进行底层编程非常重要。
本课件希望能够为读者提供一个系统而全面的汇编语言程序设计入门指南,并帮助读者在实践中灵活运用所学知识。
微机原理与接口技术汇编语言程序教案第一章:汇编语言概述1.1 汇编语言的概念让学生了解汇编语言的定义、特点和作用。
让学生掌握汇编语言的基本组成元素,如指令、寄存器、操作数等。
1.2 汇编语言的表示方法让学生了解汇编语言的指令格式和操作数表示方法。
让学生掌握汇编语言的助记符及其含义。
1.3 汇编语言与机器代码的关系让学生了解汇编语言与机器代码的转换过程。
让学生掌握汇编语言指令与机器代码之间的对应关系。
第二章:汇编语言的语法规则2.1 指令语句的语法结构让学生了解指令语句的构成,包括操作码、寄存器、操作数等。
让学生掌握不同类型指令的语法规则,如数据传输指令、算术运算指令等。
2.2 伪指令和宏指令让学生了解伪指令和宏指令的概念及其作用。
让学生掌握伪指令和宏指令的语法规则和使用方法。
2.3 汇编语言的程序结构让学生了解汇编语言程序的组成部分,如数据段、代码段、堆栈段等。
让学生掌握汇编语言程序的格式和编写规范。
第三章:汇编语言的编程技巧3.1 寄存器的使用让学生了解寄存器的作用和分类,如AX、BX、CX、DX等。
让学生掌握寄存器在汇编语言编程中的应用技巧。
3.2 数据传输指令让学生了解数据传输指令的用法,如MOV、PUSH、POP等。
让学生掌握数据传输指令在汇编语言编程中的应用技巧。
3.3 算术运算指令让学生了解算术运算指令的用法,如ADD、SUB、MUL、DIV等。
让学生掌握算术运算指令在汇编语言编程中的应用技巧。
第四章:汇编语言程序设计实例4.1 实例一:计算两个数的和让学生了解程序设计的基本步骤,如编写算法、选择寄存器等。
让学生掌握汇编语言编程的基本技巧,如数据传输、算术运算等。
4.2 实例二:排序算法(冒泡排序)让学生了解排序算法的原理和实现方法。
让学生掌握汇编语言编程中循环结构和条件判断的使用技巧。
4.3 实例三:字符串操作让学生了解字符串的基本操作,如字符串长度计算、字符串复制等。
让学生掌握汇编语言编程中字符串操作的相关指令和技巧。
汇编语言程序设计汇编语言是一种底层的计算机语言,它直接与计算机硬件交互,具有灵活性和高效性的特点。
在计算机科学领域,汇编语言程序设计是一门重要的学科。
本文将分析汇编语言程序设计的基本原理和应用,介绍其在实际项目中的应用以及相关的开发工具。
一、汇编语言程序设计的基本原理汇编语言是一种符号化的机器语言,通过使用助记符和标号来描述指令和数据。
它与计算机硬件非常接近,可以直接操作寄存器、内存和其他硬件资源。
汇编语言程序设计的基本原理包括指令的组成、寄存器的使用、内存的管理和流程控制等方面。
1.1 指令的组成汇编语言的指令由操作码和操作数组成。
操作码是指令的功能代码,用于定义指令要执行的操作。
操作数是指令的操作对象,可以是寄存器、内存地址或立即数等。
汇编语言提供了丰富的指令集,包括算术运算、逻辑运算、数据传输、控制转移等多种类型的指令。
1.2 寄存器的使用寄存器是计算机内部用于存储临时数据的高速存储器。
汇编语言通过寄存器来进行数据的传输和运算。
不同的计算机体系结构提供了不同数量和类型的寄存器。
常见的寄存器包括通用寄存器、指令指针寄存器和程序状态寄存器等。
1.3 内存的管理内存是计算机用于存储程序和数据的主要设备。
汇编语言可以通过直接指定内存地址来读取和写入数据。
内存管理的主要任务包括地址转换、数据的加载和存储、内存保护等。
汇编语言通过使用段寄存器和偏移地址的方式来管理内存。
1.4 流程控制汇编语言支持多种流程控制指令,包括条件跳转、无条件跳转、循环和子程序调用等。
通过这些指令,程序可以根据运行结果来选择不同的执行路径,实现复杂的逻辑功能。
流程控制是程序设计中的重要部分,对于优化程序性能和实现复杂算法非常关键。
二、汇编语言程序设计的应用汇编语言程序设计广泛应用于系统级编程、设备驱动、数字信号处理等领域。
以下是汇编语言程序设计在实际项目中的常见应用。
2.1 操作系统开发操作系统是计算机硬件与用户之间的接口,负责管理硬件资源和为应用程序提供服务。
《16/32 位微机原理、汇编语言及接口技术教程》部分习题参考解答第1 章微型计算机系统概述〔习题1.2 〕什么是通用微处理器、单片机(微控制器)、芯片、嵌入式系统?〔解答〕通用微处理器:适合较广的应用领域的微处理器,例如装在机、笔记本电脑、工作站、服务器上的微处理器。
单片机:是指通常用于控制领域的微处理器芯片,其内部除外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。
芯片:称数字信号处理器,也是一种微控制器,其更适合处理高速的数字信号,内部集成有高速乘法器,能够进行快速乘法和加法运算。
嵌入式系统:利用微控制器、数字信号处理器或通用微处理器,结合具体应用构成的控制系统,其典型的特点是把计算机直接嵌入到应用系统之中。
〔习题1.5 〕说明微型计算机系统的硬件组成及各部分作用。
〔解答〕:也称处理器,是微机的核心。
它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。
存储器:存储器是存放程序和数据的部件。
外部设备:外部设备是指可与微机进行交互的输入()设备和输出()设备,也称设备。
设备通过接口与主机连接。
总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。
习题1.6 〕什么是总线?微机总线通常有哪3 组信号?各组信号的作用是什么?〔解答〕总线:传递信息的共用通道,物理上是一组公用导线。
3 组信号线:数据总线、地址总线和控制总线。
(1)地址总线:传输将要访问的主存单元或端口的地址信息。
(2)数据总线:传输读写操作的数据信息。
(3)控制总线:协调系统中各部件的操作。
习题1.7 〕简答如下概念:(1)计算机字长(2)取指-译码-执行周期(3)(4)中断(5)总线解答〕(1)处理器每个单位时间可以处理的二进制数据位数称计算机字长。
(2)指令的处理过程,即指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。
第七章汇编语言程序设计7.1 概述汇编语言是一种面向机器的语言。
它是与计算机硬件密切关联的,因而熟悉计算机硬件是汇编语言程序员必须具备的条件。
1.汇编语言程序设计的基本步骤(1)描述问题(2)确定算法。
(3)绘制流程图。
(4)分配存储空间和工作单元。
(5)编写程序。
(6)上机调试。
2.编程环境从80286开始,微处理器有实模式和保护模式两种基本工作模式;为了解决80286中不能在保护模式下运行8086/8088应用程序的问题,从80386开始在保护模式中引入了虚拟8086工作方式。
7.2 分支程序设计分支程序就是根据不同的情况或条件执行不同功能的程序,它具有判断和转移功能,在程序中利用条件转移指令对运算结果的状态标志进行判断实现转移。
7.2.1 分支程序的结构形式分支程序结构有2种基本形式,即二路分支结构和多路分支结构,如图7.1所示。
两种结构的共同特点是:在某一特定条件下,只执行多个分支中的一个分支。
(A)二路分支结构 (B)多路分支结构图7.1 分支程序的结构形式7.2.2 二路分支程序设计方法例7.2.1有一函数,任意给定自变量X值(-128≤X≤127),当X≥0时函数值Y=1、当X<0时Y=-1;设给定的X值存入变量XX1单元,函数Y值存入变量YY1单元。
求函数Y值的程序如下所示:DATA SEGMENTXX1 DB XYY1 DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,XX1CMP AL,0JNS AA2MOV AL,-1JMP AA1AA2: MOV AL,1AA1: MOV YY1,ALMOV AH,4CHINT 21HCODE ENDSEND START7.2.3 多路分支程序设计方法常用的多路分支程序设计有三种方法,即逻辑分解法、地址表法和转移表法,下面举例说明。
例7.2.2某工厂有5种产品的加工程序1到5分别存放在WORK1,WORK2…WORK5为首地址的内存区域中,分别键入1,键入2…键入5转入选择其对应的加工程序。
下面用不同方法编制其程序。
(1)逻辑分解法CODE SEGMENTASSUME CS:CODESTART: MOV AH,1INT 21HCMP AL,31HJ Z WORK1CMP AL,32HJZ WORK2CMP AL,33HJ Z WORK3C MP AL,34HJ Z WORK4C MP AL,35HJ Z WORK5J MP WORK0WORK1: ┇WORK2: ┇WORK3: ┇WORK4: ┇WORK5: ┇WORK0: MOV AH,4CHI NT 21HCODE ENDSE ND START(2)地址表法表地址=表首址+(键号-1)×2DATA SEGMENTTABLE DW WORK1,WORK2,WORK3,WORK4,WORK5;地址表DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAM OV DS,AXL EA BX,TABLEM OV AH,1I NT 21HA ND AL,0FHD EC AL ;键号减一A DD AL,AL ;键号乘2S UB AH,AHA DD BX,AX ;形成表地址JMP WORD PTR[BX] ;转移WORK1: ┇WORK2: ┇WORK3: ┇WORK4: ┇WORK5: ┇┇MOV AH,4CHINT 21HCODE ENDSEND START7.3 循环程序设计7.3.1 循环程序的结构形式循环程序由五部分组成:1)初始化部分:它是循环的准备部分,为程序操作、地址指针、循环计数、结束条件等设置初始值。
2)循环工作部分:这是循环程序的核心部分,它以初始化部分设置的初值为基础,动态地执行功能相同的操作。
3)循环修改部分:与工作部分协调配合,修改循环工作部分的变量、指针等,为下次重复操作作准备。
4)循环控制部分:修改控制量用以判断和控制循环的走向,即根据控制量的状态标志条件,决定是继续循环还是退出循环。
5)循环结束部分:退出循环后,对循环结果进行处理部分。
常用的基本结构形式有两种,如图7.2和图7.3所示。
图7.2先执行后判断结构形式的特点是先执行循环工作部分,然后再判断循环是否结束。
所以这种循环结构称为不允许零次循环结构,即不论循环是否满足,至少要执行一次循环体工作部分。
图7.3 先判断后执行结构形式的特点是先判循环是否结束,若未结束就执行循环工作部分,否则退出循环。
因为这种循环结构有可能循环工作部分一次也不执行,所以这种循环结构称为允许零次循环结构。
图7.2 先执行后判断结构 图7.3 先判断后执行结构7.3.2 循环程序的设计方法例7.3.1某个数据段中,偏移地址1000H 单元开始连续存放255个8位无符号整数x 1、x 2、…x 254、x 255。
试写程序求这些数据的和,并其存入SUM1单元中。
8位无符号数在0~255之间,255个数的和一定是一个不超过16位二进制的数。
所以存放和的单元取字单元;求和运算采取16位累加求和方式,即先0送DH ,AX 为累加和,每次将内存的数取入DL 中后进行AX 与DX 相加。
1. 计数控制循环因该例是对255数相加求和,则取255为计数控制循环条件。
(1)先执行后判断结构形式的计数控制循环DATA SEGMENTO RG 1000HNUMBER1 DB x1,x2,…x254,x255SUM1 DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA BX,NUMBER1MOV AX,0M OV DH,0MOV CL,255 ;计数初值AA1: MOV DL,[BX] ;取数A DD AX,DX ;求和I NC BX ;修改地址指针S UB CL,1 ;计数J NZ AA1 ;判转M OV SUM1,AX ;存和M OV AH,4CHI NT 21HCODE ENDSEND S TART2. 条件控制循环在例7.3.1中,如果末尾的数与其它数均不相同,则可取x255为结束循环的控制条件。
(1)先执行后判断结构形式的条件控制循环DATA SEGMENTO RG 1000HNUMBER1 DB x1,x2,…x254,x255SUM1 DW ?DATA ENDSCODE SEGMENTA SSUME CS:CODE,DS:DATASTART: MOV AX,DATAM OV DS,AXL EA BX,NUMBER1M OV AX,0M OV DH,0AA1: MOV DL,[BX] ;取数A DD AX,DX ;求和I NC BX ;修改地址指针C MP DL,x255J NZ AA1 ;判转M OV SUM1,AX ;存和M OV AH,4CHI NT 21HCODE ENDSE ND S TART设计循环程序时,一般有以下几个步骤:1)根据问题,确定是选取先执行后判断结构形式,还是先判断后执行结构形式。
2)必须选择恰当的循环条件来控制循环的运行和结束。
其中,计数器控制法适用于循环次数已知的情况,条件控制法适用于循环次数未知的情况。
3)根据重复执行的任务,确定适合于循环的工作部分。
4)根据循环程序控制方法的不同,来设置循环参数的初值。
5)考虑循环参数的修改部分,分析并确定参数的每次修改方法。
7.3.3 单重循环例7.3.3编制在CRT上显示“中”字形的源程序。
DATA SEGMENTNUMBER1 DB 0AH,0DH ;0AH、0DH分别是换行、回车的ASCII码D B ‘ A ’,0AH,0DH ;单引号内空白处共有6个空格D B ‘AAAAAAA’,0AH,0DHD B ‘A A A’,0AH,0DHD B ‘A A A’,0AH,0DHD B ‘AAAAAAA’,0AH,0DHD B ‘ A ’,0AH,0DHD B ‘ A ’,0AH,0DHDATA ENDSCODE SEGMENTA SSUME CS:CODE,DS:DATASTART: MOV AX,DATAM OV DS,AXLEA BX, NUMBER1M OV CX,65 ;计数初值为7×9+2AA1: MOV DL,[BX]I NC BXM OV AH,2I NT 21HL OOP AA1M OV AH,4CHI NT 21HCODE ENDSE ND START7.3.4 多重循环所谓多重循环程序即循环体中又包含循环结构。
例7.3.7编制键入一个3~9间的数字,输出一个用“*”组成的三角形的源程序。
例如键入5,输出的三角形如下所示。
** ** * ** * * ** * * * *下面我们采用正计数法来编制此源程序。
CODE SEGMENTA SSUME CS:CODESTART: MOV AH,1I NT 21HC MP AL,33HJ C STARTC MP AL,3AHJ NC STARTA ND AL,0FHM OV BL,AL ;外循环计数控制值送BLM OV BH,0 ;为内循环计数控制作准备AA1: MOV DL,0AHM OV AH,2I NT 21HM OV DL,0DHM OV AH,2I NT 21HI NC BH ;设置内循环计数控制值C MP BL,BH ;判断循环是否结束J NC AA2M OV AH,4CHI NT 21HAA2: XOR CL,CL ;设置内循环计数控制初值0AA3: MOV DL,’* ’M OV AH,2I NT 21HI NC CL ;内循环计数加一C MP CL,BH ;判断内循环是否结束J NZ AA3J MP AA1 ;返回外循环CODE ENDSE ND START7.4 子程序设计采用子程序结构具有简化程序设计过程;节省程序设计时间;缩短程序的长度;节省存储空间;增加程序的可读性;便于对程序的修改和调试;方便程序的模块化和结构化的程序设计等优点。
为了使所编制的子程序做到通用性,在设计子程序时,同时要建立子程序的文档说明。
子程序的说明文件一般应包括以下几项内容:1)子程序名:一般取具有象征意义的标识符,供调用子程序时使用。
2)子程序的功能:说明子程序完成的具体任务。
3)子程序占用的寄存器和工作单元:说明子程序执行时需要使用哪些寄存器;子程序执行后,哪些寄存器的内容被改变,哪些寄存器的内容保持不变。
4)子程序的输入参数:说明子程序运行所需的参数以及存放位置。