微机原理与接口技术 第4章 汇编语言程序设计.ppt_第1页
微机原理与接口技术 第4章 汇编语言程序设计.ppt_第2页
微机原理与接口技术 第4章 汇编语言程序设计.ppt_第3页
微机原理与接口技术 第4章 汇编语言程序设计.ppt_第4页
微机原理与接口技术 第4章 汇编语言程序设计.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 汇编语言程序设计,4.1 伪指令 4.2 汇编语言的上机过程 4.3 系统功能调用 4.4 汇编语言程序设计 4.5 汇编语言和C/C+混合编程,4.1 伪指令,汇编源程序: 按严格的语法规则用汇编语言编写的程序,称为汇编语言源程序,简称为汇编源程序或源程序。,汇编程序: 为计算机配置的负责把汇编源程序翻译成目标 程序的一种系统软件。,汇编(过程): 将汇编源程序翻译成一一对应的机器码目标程序的过程称为汇编过程或简称汇编。,4.1.1 表达式,表达式: 是由常量、变量及运算符组成的有意义的式子。,常数: 没有任何属性的纯数值。在程序运行中不发生变化。,如:10010011B、0A5H、

2、”ZHIFUCHUAN”、5.213E-4,变 量:表示存储单元,单元中的数在程序运行期间随时 可以修改。 变量名:存放数据单元的符号地址,标 号:表示存储单元,单元中存放的是机器指令代码,段属性(SEG): 变量或标号对应存储单元所在段的段值 偏移量属性(OFFSET): 变量或标号对应存储单元的起始地址的段内偏移 类型属性(TYPE): 变量类型主要是字节(BYTE)、字(WORD)、双字(DWORD) 标号类型主要是近(NEAR)和远(FAR),变量、标号,存储单元,算术运算符 +、-、*、/、MOD(除法取余)、SHL(左移)、 SHR(右移),例: MOV AX,100*4+5 ;A

3、X=405, 逻辑运算符:AND、OR、NOT、XOR,例: 24H OR 0FH=2FH,按位运算, 关系运算: EQ、NE、LT、LE、GT、GE,例:MOV AX,1234H GT 1024H,关系运算结果总是 一个数值。若关系不 成立,则结果为0,若 关系成立,则结果 为0FFFFH,MOV AX,0FFFFH,1算术运算符、逻辑运算符和关系运算符,(1) SEG(计算段基址),例2:把VARW的偏移地址送BX MOV BX,OFFSET VARW,例3:假设VARW变量是字变量,把VARW的类型值送AL MOV AL, TYPE VARW ;AL =2,例1:把VARW所在段的段值送

4、AX MOV AX,SEG VARW,变量名,2分析运算符SEG、OFFSET、TYPE、 SIZE和LENGTH,(3)TYPE(计算符号类型值),(2)OFFSET(计算偏移地址),3. 组合运算符(属性操作符),(1)定义符号名为新类型PTR,格式: PTR 功能:用于指定或临时改变变量或标号的类型,例:MOV WORD PTR SI,1 ;指明字类型,(2)指定新类型THIS,格式:THIS 功能:为某个符号名建立新类型,例:LABC EQU THIS BYTE MOV LABC,AL,4.1.2 伪指令, 字节定义语句DB,格式:变量名 DB 功能:初值表中的每一项占一个字节, 它们

5、从变量名(符号地址)开始按字节连续存放。,例:COUNT DB 100 DB 0DH,0AH, VARW DB ?,6,?,?,可以使用重复操作符DUP如: BUFFER DB 8 DUP(0),符号地址,DUP可以嵌套如: ARRAY DB 100 DUP(0,2 DUP(1,2),3),1数据定义(变量定义), 字定义语句DW,格式:变量名 DW 功能:初值表中的每一项占一个字单元, 它们从变量名(符号地址)开始按字连续存放。,例:FLAG DW 2FCDH,24H DW ?, 四字节定义语句DD,格式:名字 DD 功能:初值表中的每一项占四个字节数,它们 从符号地址开始按四字节从小地址连

6、续存放。, 10字节定义指令DT,2符号常量定义伪指令EQU、,格式: EQU 功能:将表达式的值赋给符号常量, 等价语句EQU,表达式可以是常数、数值表达式、字符串、存储器符号等,例:COUNT EQU 100 ;符号COUNT代表常数100 BUFF EQU 4*COUNT ;BUFF代表400 HELLO EQU “How are you! ” ;HELLO代表How are you VARW EQU THIS WORD ;变量VARW的类型是字,注意:等价语句的符号常量名不能被重新赋值, 等号语句=,格式: = 功能:将表达式的数值赋给符号常量,数值表达式,3. 段定义伪指令segme

7、nt和ends,段定义的一般格式:, SEGMENT 定位方式连接方式类型名, ENDS,段开始语句,段结束语句,例:一个简单的数据段 DSEG SEGMENT BUFFER DB 8 DUP(0) DSEG ENDS, 定位方式(定位类型),定位类型指出了对当前段起始地址的要求,有4个选项,PAGE 指定起始地址的低8位是0,即其值能被256整除(称页边界) PARA 指定起始地址的低4为是0,即其值能被16整除(称段边界) WORD指定起始地址的最低位是0,即其值能被2整除(称为字边界) BYTE 指定起始地址是任意值,缺省定位,定位类型是用来确定程序段与程序段之间的衔接,如BYTE 使得

8、当前段紧接前一段,而PAGE可能导致最大的段间隔, 连接方式(组合类型),连接方式告诉连接程序本段可按某种方式连接,PUBLIC告诉连接程序本段与其它同名同类别 的段连接起来,公用一个起始点。 STACK 表示是堆栈段,连接方式同上。 NONE 表示本段不与任何段连接。 COMMON表示本段与同名同类别的段共用同一段地址, 即同名同类段相重叠。 MEMORY本段连接时定位在所有段之上,即高地址处。 AT 表达式表示本段定位在表达式值指定的段地址处。,隐含连接方式,一个源程序至少有一个堆栈段, 类别名,类别名是由程序员指定的字符串,没有给出类别时, 这个段的类别就为空。,例:某个源程序,4. 设

9、定段寄存器伪指令ASSUME,格式:ASSUME 段寄存器:段定义名1,段寄存器:段定义名2, 功能:告诉汇编程序在汇编时,段寄存器的符号基址,5. ORG伪指令,格式:ORG 功能:把以下语句定义的内存数据或程序,从表达式 指定的起点开始连续存放。,6. 汇编结束伪指令END,格式:END 表达式 功能:告诉汇编程序源文件结束,并给出执行程 序的入口地址,程序的启动地址,7过程定义伪指令PROC和ENDP,格式: PROC 过程类型 RET ENDP,段间为FAR 段内为NEAR,4.1.3 汇编语言程序的基本框架,完整段定义的框架如下: STACK SEGMENT STACK ;定义堆栈段

10、 STACK ENDS DATASEGMENT;定义数据段 DATAENDS CODESEGMENT;定义代码段 ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX;数据段段地址送DS中 MOV AH,4CH ;程序结束返回DOS INT 21H CODEENDS;代码段结束 END START,4.2 汇编语言的上机过程,编辑程序,源程序文件 .asm,汇编语言程序的开发过程,4.3 系统功能调用,调用方法: 准备入口参数 功能调用号送AH寄存器 软中断指令 INT 21H,1. 从键盘接收一个字符(01H号功能),功能:

11、从键盘读一字符,并将该字符回显在显示器上 入口参数:无 出口参数:AL=读到字符的ASCII码 说明:如果读到的字符是Ctrl+c或Ctrl+Break则结束程序,例: MOV AH,1 INT 21H ,2. 从键盘接收一串字符(0AH号功能),功 能:从键盘读一字符串。 入口参数: DS:DX=缓冲区首址,缓冲区的第 一个字节放缓冲区最大容量数 出口参数:接收到的字符串在缓冲 区中第三个字节开始 说 明: 缓冲区第二个字节存放实际读入 的字符数。 字符串以回车结束 如果输入字符串超过了缓冲的区容 量, 超出的部分丢失,同时响铃 如果在输入时按Ctrl+C或Ctrl+Break, 则结束程序

12、,例: BUF DB 20 DB ? DB 20 DUP(?) MOV DX,OFFSET BUF MOV AH,0AH INT 21H ,3. 显示一个字符(02H号功能),功能:寄存器DL中的字符从屏幕上显示输出 入口参数:DL=要输出字符的ASCII码 出口参数:无,例: MOV DL,A MOV AH,2 INT 21H ,4. 显示一串字符(09H号功能),功 能:将指定缓冲区中的字符串从屏幕上显示输出 入口参数:DS:DX=要输出字符的首址,字符串以字符 为结束标志 出口参数:无,5. 返回操作系统(4CH号功能),功 能:结束当前正在执行的程序,并返回操作系统 入口参数:无 出口

13、参数:无,回到DOS提示符下C:,例: MOV AH,4CH INT 21H ,4.4 汇编语言程序设计,8086系列汇编语言源程序是建立在段结构基础上的,(1)使用段定义伪指令来构成一个由若干指令 和数据组成的程序。,(2)一个程序究有几个段,完全根据实际情况 来确定,通常是按照程序中的用途来划分 段的,如存放数据的段,作为堆栈的段, 存放程序的段,存放子程序的段等,4.4.1 顺序程序设计,没有分支、 没有循环 的直线运行程, 即顺序结构。,DATASEGMENT ADW 1234H BDW 5678H CDW ? DATA ENDS CODESEGMENT ASSUME CS:CODE,

14、DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,A ADD AX,B MOV C,AX MOV AH,4CH INT 21H CODEENDS END START,最简单的程序,4.4.2 分支程序设计,两种分支结构示意图,例:编一个程序。从外设71H取一个数M,判断其值是否在10和 20之间,即10M20。如果M20,则送0FFH给外设73H; 如果M10,则送00H给外设73H;如果10M20, 则送88H给外设73H。, 分析 根据题意需要两次判断M的大小,根据判 断结果把00H或0FFH或88H输出到73H端口。,4.4.3 循环程序设计,开始,判

15、断,循环体,结束处理,结束,初始化,循环控制, ,循环程序举例,例: 求两个多字节数之 和。这两个数 在10050H开 始的单元中, 连续存放, 低位在小地 址一端,结果 放在两个数 之后。设这 两个多字节 数均为八个 字节长。,4.4.4 子程序设计,子程序:也叫过程,相对主程序而言,是一个子的程序段, 它能被主程序调用,也能被其它子程序调用,一般把有公用性、重复性或有相对独立性 的程序设计成子程序,参数传递必须设计好子程序中用到了哪些寄存器或 存储单元。哪些是需要调用程序提供的, 哪些是结果提供给调用程序的。,子程序设计与应用应注意的问题,寄存器传递参数,存储单元传递参数,堆栈传递参数,参

16、数传递,两个6字节数相加。将一个字节相加的程序段设计为子 程序。主程序分6次调用该子程序,但每次调用的参数不同。,例:,DATASEGMENT ADD1DB FEH,86H,7CH,35H,68H,77H ADD2DB 45H,BCH,7DH,6AH,87H,90H SUM DB 6 DUP(0) COUNTDB 6 DATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATA MADD: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ADD1 MOV DI,OFFSET ADD2 MOV BX,OFFSET SUM MOV CX,COUNT

17、;循环初值为6 CLC AGAIN: CALL SUBADD ;调用子程序 LOOP AGAIN ;循环调用6次 MOV AH,4CH INT 21H,;子程序入口参数:SI,DI,BX 出口参数:SI,DI,BX SUBADD PROC ;完成一个字节相加 PUSH AX ;保护AX的值 MOV AL,SI ;SI是一个源操作数指针 ADC AL,DI ;DI是另一个源操作数指针 MOV BX,AL ;BX是结果操作数指针 INC SI INC DI INC BX POP AX;恢复AX的值 RET SUBADD ENDP CODE ENDS END MADD,4.5 汇编语言和C/C语言混

18、合编程,混合语言编程:采用两种或两种以上的编程语言组合编程,彼此相互调用,进行参数传递,共享数据结构及数据信息,是一种有效的程序设计方法。 汇编语言和C/C语言混合编程的方法有两种: (1)在C/C源程序中直接插入汇编源代码,这种方法称为嵌入式汇编。 (2)在C/C源程序中调用外部的汇编语言过程,4.5.1 嵌入式汇编,在需要的地方写上汇编指令,并在嵌入的汇编指令前加上关键字asm或_ _asm即可。 格式1:asm 格式2:_ _asm 格式3:_ _asm汇编指令 注:格式1适用于在C程序中嵌入汇编指令, 格式2和格式3则适用于在Visual C+程序中嵌 入汇编指令。,#include

19、void main( ) int array10; int i ; for(i=0;i=8;i+) arrayi=i ; _asm mov array9*type int,90 /*数值90传送给数组元素 array9*/ for(i=0;i=9;i+) printf(%5d,arrayi); printf(n); ,嵌入式汇编举例,运行结果: 0 1 2 3 4 5 6 7 8 90,4.5.2 C/C+程序调用汇编程序(1),1汇编程序的编写 (1)汇编过程的进入 汇编过程的进入一般以两条指令开始,即: push bp mov bp sp (2)局部数据分配(可选择) 加上一条指令sub

20、sp, space 其中space是以字节计算的局部数据区的总大小 (3)用堆栈传递参数及对参数的访问 通过参数与bp的位移量来确定 设参数为x,它与bp的位移量可以这样来计算: 2返回地址字节数参数x与bp间的参数所占的总字节数,(4)结果和值的返回 返回值的数据类型是简单型,而且长度不超过4字节 返回值超过4个字节 NEAR AX FAR DX:AX (DX装段地址,AX装偏移地址)。,4.5.2 C/C+程序调用汇编程序(2),(5)退出汇编程序 如果保存了对应的寄存器值,以入栈时的相反顺序将其一一弹出堆栈,恢复所保存的寄存器值; 如果分配了局部数据空间,用mov sp,bp恢复sp 的原值,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论