微机原理第4章汇编语言程序设计课件.ppt
《微机原理第4章汇编语言程序设计课件.ppt》由会员分享,可在线阅读,更多相关《微机原理第4章汇编语言程序设计课件.ppt(159页珍藏版)》请在三一办公上搜索。
1、第4章 汇编语言程序设计,4.1 汇编语言语法4.2 汇编语言程序实现4.3 汇编语言程序设计方法及应用4.4 汇编语言程序设计举例,微机原理,4.1 汇编语言语法,【例题4.1】实现:123+456sum 的源程序,CODESEGMENT;语句6 ASSUME CS:CODE,DS:DATAMAIN PROC FAR;语句8START:PUSH DS;语句9.;RET;语句17MAIN ENDP;语句18CODE ENDS;语句19,数据段,代码段,DATA SEGMENT;语句1 A DW 123;语句2 B DW 456;语句3 SUM DW?;语句4DATA ENDS;语句5,END
2、START;语句20,名字 指令/伪指令 操作数1,操作数2,段=语句,1.源程序组成,源程序=段,段:数据段、堆栈段、附加段、码段,语句:指令性语句,由CPU执行,如:语句8语句17。指示性语句,指示汇编,如语句1、5、6、19、20。,名字:段 名,如:DATA、CODE 变量名,如:A、B、SUM 过程名,如:MAIN 标号名,如:START,汇编程序构成 暨 本章主要内容,指令性语句本章涉及各色运算符,用以与数据配合构成操作数指示性语句几种起定义作用的伪指令数据定义伪指令符号定义伪指令段定义伪指令,1)组成名字的合法字符有:字母(不分大小写);数字09;特殊符号(“?”,“:”,“”,
3、“_”,“$”)。2)名字的有效长度小于31个西文字符。3)名字以字母开头。4)不能把保留字用作名字。,2.名字命名规则,3.名字属性,(1)变量名,(2)段名:该段起始位置的段地址值,段属性:变量所代表的数据区所在段的 段基址;偏移量:变量所代表的数据区首字节所 在段内偏移地址;类 型:BYTE、WORD、DWORD、DQ、DT长 度:变量所代表的数据区中数据元 素的个数。规 模:变量所代表的数据区中数据所 占空间大小,以字节计。,(3)过程名或标号名,(4)常量名:代表一常数,段属性:过程起始位置或标号处 段地址值偏移量:过程起始位置或标号处 偏移地址值类 型:NEAR、FAR,用于程序跳
4、转,4.1.2 汇编语言伪指令,1.数据定义伪指令 变量名 数据定义伪指令 操作数1,操作数2,DB、DD、DW、DQ、DT,字节、字、双字、4字、5字的变量。,(1)数字常量:十进制、八进制、十六进制、二进制等,缺省形式是十进制;(2)字符常量,用单引号括起来,被存储的是该字符的ASCII码;(3)符号常量,必须是预先已定义的符号;(4)符号“?”,表示预留空间,内容不定;(5)DUP,表示内容重复的数据。具体形式为:次数 DUP(被重复的内容),操作数:,【例】D_A DB 10,A,BC D_B DW 1234H D_C DQ 5678H,D_A 10 41H 42H 43H D_B 3
5、4H 12H D_C 78H 56H 0 0 0 0 0D_C+7 0,(1)DB定义的数据,每个数据元素占据1个存储单元;DW定义的数据,每个数据元素占据2个存储单元;(2)字数据存储时,低字节存储在低地址单元中,高字节存储在高地址单元中;(3)字符被存放时为它的ASCII码,例 A的ASCII码为41H;(4)符号地址具有以下关系:D_B=D_A+3 D_D=D_B+2=D_A+6,注:,ORG 100HD_E DB 3 DUP(?)EVEND_F DW D_ED_G DB 2 DUP(1,3,4)D_H DW$+2,变量 内容 偏移地址D_E?100?101?102 103 00H 10
6、4D_F 01H 105D_G 1 106 3 107 4 108 1 109 3 10A 4 10BD_H 0CH 10C 01H 10D,下一个存储位置从偶地址开始,己定义变量,取该变量偏 移地址,代表当前偏移地址,2.符号定义伪指令,(1)EQU 格式:名字 EQU 表达式,例:VB EQU 641024;VB代表数值表达式的值 A EQU 7 B EQU A2,注意:1.如果表达式中有变量,应在该语句前给出该变量的定义;2.EQU语句不能给某一变量重复定义;3.VB、A、B不占用内存,(2)等号=,格式:名字=表达式,功能:与EQU基本相同,区别是它可以对同一个 名字重新定义。例:CO
7、UNT=10 MOV AL,COUNT;COUNT=5;可重复定义,(3)LABEL,格式:变量/标号 LABEL 类型,功能:定义变量或标号的类型,而变量或标号的段属性和偏移属性由该语句所处的位置确定。,变量的类型有:BYTE、WORD、DWORD、DQ、DT;标号的类型有:NEAR、FAR。,【例】利用LABEL使同一个数据区有一个以上的类型及相关属性。AREAW LABEL WORD;AREAW与AREAB指向相同的数 据区,AREAW类型为字,而 AREAB类型为字节AREAB DB 100 DUP(?)MOV AX,1234HMOV AREAW,AX;(AREAW)=1234HMOV
8、 BL,AREAB;BL=34H,3.段定义伪指令,段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS,BYTE:B,即段可以从任何地址开始;WORD:0B,即段的起始地址必须为偶地址;PARA:0000B,即段从节(PARAGRAPH)边界开始,每16个字节 为1小段,所以,其起始地址必为16的倍数。PAGE:0000 0000B,即段从页边界开始,每256个字节为1页,所 以,其起始地址必为256的倍数。,定位类型:说明段的起始地址应有怎样的边界值:,组合类型:说明程序连接时的段合并方法,1 PUBLEC:将同类别名段组装在一起形成一个逻 辑段;2 STACK:与PUBLIC一
9、样,只用于堆栈段。在汇 编及连接后,系统自动为SS及SP分配 值,在可执行程序中,SP初值指向栈底。3 COMMON:同名段从同一个内存地址开始装入。所以,各个逻辑段将发生覆盖。连接 以后,该段长度取决于同名段中最长 的那个,而内容有效的是最后装入的 那个。,4 MEMORY:与PUBLIC同义,只不过MEMORY定义的 段装在所有同名段的最后。若连接时 出现多个MEMORY,则最先遇到的段按 组合类型MEMORY处理,其他段组合类 型按PUBLIC处理。5 PRIVATE:不组合,该段与其它段逻辑上不发 生关系,即使同名,各段拥有各自 的段基值。缺省值6 AT exp:段地址为表达式exp的
10、值(长度为16位)。此项不能用于代码段。,当几个程序模块进行连接时,其中具有相同类别名的段,按出现的先后顺序被装入连续的内存区。没有类别名的段,与其它无类别名的段一起连续装入内存。,类别:类别的作用是在连接时决定各逻辑段的装入顺序。类别名必须用单引号括起来。,ASSUME 段寄存器名:段名,段寄存器名:段名,ASSUME:用于明确段与段寄存器的关系,说明:该伪指令出现在码段中;本伪指令只是指示各逻辑段使用段寄存器的情况,并没有对段寄存器的内容进行赋值。DS、ES的值必须在程序段中用指令语句进行赋值,而CS、SS由系统负责设置,程序中也可对SS 进行赋值,但不允许对CS赋值。,例:ASSUME
11、DS:DSEG,CS:CSEG,ES:ESEG,SS:SESG,例:ASSUME CS:CODE,DS:DATA,ES:DATA,【例】按下面要求,写出程序框架,数据段从0E000H开始,其中有100字节的数组,其类型属性既是字又是字节;2.堆栈段从小段开始,段组名为STACK;3.代码段中指定段寄存器,主程序从1000H开始,给有关段寄存器赋值;4.程序结束。,DSEG SEGMENT AT 0E000H D_BYTE DB 100 DUP(?)D_WORD EQU WORD PTR D_BYTEDSEG ENDSSSEG SEGMENT PARA STACK DB 200 DUP(?)SS
12、EG ENDSCSEG SEGMENT ORG 1000H ASSUME CS:CSEG,DS:DSEG,SS:SSEG,MAIN PROC FAR XOR AX,AX PUSH AX PUSH DS MOV AX,DSEG MOV DS,AX RET MAIN ENDPCSEG ENDS END MAIN,4.1.3 汇编语句,语句格式:名字 操作 操作数;注释,常量、变量和表达式组成,由常量、变量和运算符组成,1.算术运算符,例(1)ARRAY DW 1*2+3-4,56H MOV AX,ARRAY;汇编后为:MOV AX,1(2)MOV AL,7FH MOD 2;汇编后为:MOV AL,
13、1(3)MOV AH,15/4;汇编后为:MOV AH,3,2.逻辑运算符,例1:MOV AH,11110000BMOV AL,NOT AH;MOV AL,00001111BMOV BL,AH OR AL;MOV BL,11111111BMOV BH,AH XOR AL;MOV BH,11111111B,例2:从端口86H读取一个字节,高位屏蔽后从端口6送出。PORT EQU 86H IN AL,PORT AND1 AL,0FH;AND1为逻辑指令 MOV DX,PORT AND2 0FH;AND2为汇编运算符 OUT DX,AL,3.关系运算符,关系运算符两边的操作数必须是两个数值或同一段中
14、两个存储单元地址,运算结果应为逻辑值,结果为真,表示为0FFFFH;结果为假,则表示为0。,例:A EQU 80H B EQU 88H MOV AL,A EQ B MOV AH,A NE B MOV BL,A LT B MOV BH,A GT B MOV CL,A LE B MOV CH,A GE B,4.分析/数值返回运算符,SEG 变量或标号,返回变量或标号的段地址,OFFSET 变量或标号,返回变量或标号的偏移量,TYPE 变量或标号,LENGTH 变量,SIZE 变量,返回变量或标号的类型值,返回DUP定义的数据占据的单元数;非DUP定义的数据,返回1。,返回DUP定义的数据占据的字节
15、数;非DUP定义的数据,返回类型值。,变量类型值:DB:1,DW:2,DD:4,DQ:8,DT:10。标号类型值:NEAR:-1,FAR:-2。,【例】数据定义如下:DATA SEGMENT AT 2000H BUF1 DB 0,1,2,3,4,5,6,7,8,9 BUF2 DW 5 DUP(0)DATA ENDS则:SEG BUF1=2000H SEG BUF2=2000HOFFSET BUF1=0000H OFFSET BUF2=000AHTYPE BUF1=1 TYPE BUF2=2LENGTH BUF1=1 LENGTH BUF2=5SIZE BUF1=1 SIZE BUF2=10,5
16、.汇编运算符(PTR),类型 PTR 变量/标号,典型应用之一:重新指定变量类型 例:数据定义如下:BUFW DW 1234H,5678H 则下列指令合法:MOV AX,BUFW;临时改变BUFW的字属性为字节属性 MOV AL,BYTE PTR BUFW,典型应用之二:指定内存操作数的类型例:INC BX;汇编将指示出错 INC BYTE PTR BX;正确 INC WORD PTR BXSI;正确,分析:在寄存器间接寻址、寄存器相对寻址、基址变址寻址或相对基址变址寻址等内存寻址方式中,往往很难判断出操作数的类型属性,应对操作数类型加以说明。,典型应用之三:与EQU一起定义一个新的变量 变量
17、或标号 EQU 类型 PTR,例:BUFW DW 1234H,5678H BUFB EQU BYTE PTR BUFW;BUFB的类型 属性为字节,其它属性与BUFW一样。MOV AX,BUFW;AX=1234HMOV AL,BUFB;AL=34H,6.汇编运算符(THIS),格式:THIS 类型 可以像PTR一样建立一个指定类型的地址操作数,该操作数的段地址和偏移地址与下一个存储单元地址相同。,例:BUFBEQU THIS BYTEBUFW DW 1234H,5678H.MOV AX,BUFW;AX=1234HMOV BL,BUFB;BL=34H,BUFB的偏移地址和BUFW完全相同,但它是
18、字节类型;而BUFW则是字类型。,程序组织结构,data segment;定义数据段 data ends;-extra segment;定义附加段 extra ends;-code segment;定义代码段 assume cs:code,ds:data,es:extrastart:mov ax,data mov ds,ax;段地址 段寄存器 code ends end start,DSES,SS,CS,EXE程序的内存映象图,装入模块,文件头,4.2 汇编语言程序实现,开发过程1:源程序的编辑,源程序文件要以ASM为扩展名源程序文件的形成(编辑)可以通过任何一个文本编辑器实现:DOS中的全屏
19、幕文本编辑器EDIT其他程序开发工具中的编辑环境MASM程序员工作平台PWB中的编辑环境EDIT lt301a.asm,开发过程2:源程序的汇编,汇编是将源程序翻译成由机器代码组成的目标模块文件的过程MASM 6.x提供的汇编程序是ML.EXE:ML/c lt301a.asm如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(lt301a.obj);否则MASM将给出相应的错误信息这时应根据错误信息,重新编辑修改源程序后,再进行汇编,开发过程3:目标模块的连接,连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件):LINK lt301a.obj如果没有严
20、重错误,LINK将生成一个可执行文件(lt301a.exe);否则将提示相应的错误信息这时需要根据错误信息重新修改源程序后再汇编、链接,直到生成可执行文件,汇编和连接的依次自动实现,ML汇编程序可自动调用LINK连接程序,实现汇编和连接的依次进行ML lt301a.asm汇编程序ML.EXE可带其他参数,常用ML/Fl/Sg lt301a.asm该命令除产生模块文件lt301a.obj和可执行文件lt301a.exe外,还将生成列表文件lt301a.lst列表文件是一种文本文件,含有源程序和目标代码,对我们学习汇编语言程序设计和发现错误很有用。采用/Sg选项,将在列表文件中得到有些伪指令相应的
21、硬指令,开发过程4:可执行程序的调试,经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行:lt301a操作系统装载该文件进入主存,并开始运行如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误采用DEBUG.EXE调试程序:DEBUG lt301a.exe,Debug与程序调试,前面完成的简单程序示例,但並不是意味编程结束,最重要的是要來看看*.COM 或*.exe加载到内存是怎樣的情形,这也是将来写复杂程序时调试的必要的步驟。最简单的调试工具就是 DOS/Windows 所附的 DEBUG.EXE(Windows 9x 的 DEBUG.EXE 在 C:WIND
22、OWSCOMMAND 子目录内,NT/2000在C:winntsystem32目录,也可拷贝到汇编工作目录使用 H:MASM50)。使用 DEBUG 加载要调试的程序用法如下:(蓝色的字是你必须输入的,记得每次要按 Enter 鍵)H:MASM50.masm50debug Enter就是 DEBUG 后面接上“要调试的程序名”即可,如果程序带有参数,就直接接在“程序名”后面即可。DEBUG 的每個命令都用一个英文字母表示,进入 DEBUG 状态后你会看到屏幕上有一-,表示 DEBUG 已经准备好,等你输入调试参数。,汇编程序返回DOS方法,1.标准方法 MAIN PROC FAR PUSH D
23、S MOV AX,0 PUSH AX RET MAIN ENDP,2.DOS功能调用方法 MOV AH,4CH INT 21H,程序组织结构,data segment;定义数据段 data ends;-extra segment;定义附加段 extra ends;-code segment;定义代码段 assume cs:code,ds:data,es:extrastart:mov ax,data mov ds,ax;段地址 段寄存器 code ends end start,DSES,SS,CS,EXE程序的内存映象图,装入模块,文件头,code segmentmain proc far as
24、sume start:push ds mov ax,0 push ax retmain endpcode ends end start,code segmentmain proc far assume start:mov ax,4c00h int 21hmain endpcode ends end start,代码设计返回DOS方法,4.3 汇编语言程序设计方法及应用,(1)分析问题 包括找出已知条件、问题特点、问题中的规律并归纳出数学模型。注意:有些问题不一定非要写出数学模型,或者根本写不出数学模型。但是,当有了一个数学模型之后,就可使用很多行之有效的计算方法。(2)确定算法 指根据人们在解
25、决实际问题时的逻辑思维中的常规推理,去找算法。如果已有数学模型,可以直接或间接利用一些现有的计算方法。,1.程序设计步骤,4.3.1 概述,(3)绘制流程图,采用流程图:(1)使解题思路清淅,有利于理解和编制程序;(2)有利于修改程序和减少错误等;(3)对于一个复杂的问题,可以画多级流程图,先画出粗框图,再逐步求精,画出细框图。,流程图是程序算法的图形描述,即用图形的方式把解决问题的先后次序和程序的逻辑结构直观地、形象地描述出来;,(4)分配存储空间及工作单元(包括寄存器),8088/8086存储器结构要求存储空间分段使用。因此,数据段、堆栈段、代码段以及附加段要按需要分别定义。工作单元即可以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 汇编语言 程序设计 课件
链接地址:https://www.31ppt.com/p-3048291.html