微机原理.ppt
《微机原理.ppt》由会员分享,可在线阅读,更多相关《微机原理.ppt(135页珍藏版)》请在三一办公上搜索。
1、第4章 汇编语言程序设计,4.1 汇编语言源程序4.2 伪指令4.3 DOS功能调用4.4 汇编语言程序设计基础,本章重点:结合实例理解汇编语言程序设计的基本步骤;掌握汇编语言程序设计的基本方法;熟练运用循环、分支和子程序的程序设计方法解决问题。本章难点:依据所要解决的问题,选择正确的程序设计方法,正确地运用指令编写实用的汇编原程序。,1、计算机语言的三层结构 语言的三层结构用来编写计算机程序的语言,即程序设语言,包括机器语言、汇编语言和高级语言,分别位于三个层次。1)机器语言 是位于最底层的程序设计语言,是使用二进制代码表示的指令系统。用机器语言编写的程序称为“目标程序”。难辨认,难记忆,易
2、出错。,4.1 汇编语言源程序,2)汇编语言 使用助记符来表示指令的操作码和操作数,使用标号和符号来代表地址、常量和变量,便于识别和记忆。汇编语言的一条语句对应一条机器语言指令,用汇编语言编写的程序,称为“汇编语言程序”。“汇编语言程序”不能直接由计算机识别,需要通过一种起翻译作用的“汇编程序”将其翻译成机器语言,由计算机执行。缺点:使用汇编语言编写程序,必须要熟悉机器的指令系统,寻址方式、寄存器的设置和使用方法,它是一种面向机器的低级语言,不能被直接移植到其他机器上。,3)高级语言 高级语言是一种面向问题或过程的语言,它独立于机器,其编写的程序是可以移植的。高级语言的一个语句相当于许多条汇编
3、语言指令或机器语言指令。高级语言编写的程序也必须翻译成机器语言后才能执行,实现这种翻译的程序叫做“编译程序”,不同的高级语言有不同的编译程序。用汇编语言或高级语言编写的程序称为“源程序”,4)汇编语言和高级语言的区别和联系 高级语言种类:Basic,Fortran,Pascal,C,C+,VC,VB,VF等。特点:更接近英语自然语言和数学表达式,可读性强;更容易掌握,常被非计算机技术人员采用;对于同一个问题高级语言比汇编语言简便得多,常用于科学计算和事务处理;高级语言的一个语句相当于多条汇编语言(或机器语言)指令,因此目标代码容量大。汇编语言优势 几乎直接使用目标代码;可对I/O端口直接调用实
4、时性好;汇编程序效率高、省内存、运行速度快;常被计算机高级技术人员使用;可嵌入各种高级语言。,2、汇编语言的相关定义 汇编语言:是一种用助记符来表示指令的操作码和操作数,用标号和符号来代替地址、常量和变量的符号语言。汇编:把汇编语言编写的程序翻译成由机器代码组成的目标程序的过程。汇编程序:用来把汇编语言编写的程序自动翻译成目标程序的软件 源程序:用汇编语言编写的程序,3、汇编程序的建立及汇编过程 用文本编辑器EDIT建立后缀为.ASM的汇编源文件。用宏汇编MASM对源文件进行汇编,生成后缀为.OBJ的目标程序 用连接程序LINK对目标程序进行链接,形成一个以.EXE为扩展名的可执行文件 运行程
5、序 用DEBUG命令调试程序,汇编过程,汇编程序建立过程,汇编语言是一种面向机器的语言,CPU不同的机器有不同的汇编语言,1、分段结构 程序按段编写,与8086内存分段编址相对应。每段由伪操作SEGMENT开始、由ENDS结束。程序可由多个段构成,至少有一个代码段。程序最后为END结束语句,后跟一启动地址。启动地址指示程序开始执行的第一条语句。程序中设有返回DOS的功能。使程序执行完后返回DOS系统的命令接受状态。程序中用到内存操作数时,应按操作数的寻址方式,给相应的段寄存器赋值,4.1.1 汇编语言源程序的结构,2、分段结构特点 代码段中存放源程序所有指令码。数据、变量等存放在数据段和附加段
6、。堆栈段可以直接利用系统中的堆栈,也可以自己定义。具体源程序中需要多少个段是需要决定,一般都可以是多个数据、代码、附加、堆栈段,但是一个源程序模块只可以有一个代码段,一个数据段,一个附加段和一个代码段。,3、源程序的一般格式 每一个段有一个名字,以符号SEGMENT作为段的开始,以语句ENDS作为段的结束。这两者都必须有名字,而且名字必须相同。由若干个段组成一个源程序,整个源程序以语句END作为结束。8086的源程序是由若干段组成的,而一个段又是由若干个语句行组成的。所以,语句行是汇编源程序的基础。一个语句行也是由4个部分组成 标号 操作码 操作数;注释;各部分之间至少要用一个空格作为间隔。,
7、4、汇编语言程序框架如下:stack SEGMENT PARA stack DB 100 DUP(stack)stack ENDS data SEGMENT data ENDS code SEGMENT ASSUME CS:code,DS:data,ES:data start:MOV AX,data MOV DS,AX MOV ES,AX MOV AL,4CH INT 21H code ENDS END start,堆栈段,数据段,代码段,1、程序由数条语句构成,每条语句占一行。语句分两类:指令性语句(指令语句):由指令助记符组成,能译成机器代码,可被CPU执行,完成一定的操作功能的语句。指示
8、性语句(伪指令语句):为汇编程序在翻译汇编语言源程序时提供有关控制信息,不被CPU执行,没有相应的机器代码的语句。指令性(指令)语句与指示性(伪指令)语句区别:程序经汇编、连接和装入内存后,在执行程序之前指示性语句的功能已经完成,故又称伪操作,而指令性语句的功能尚未完成,需控制CPU去执行才能完成。,4.1.2 汇编语言语句类型及格式,2、格式指令性语句(指令语句)格式:标号:前缀 操作码 操作数,操作数;注解指示性语句(伪指令语句)格式:名字 伪操作 操作数,操作数;注解3、标号和名字 需要“标号”时需要加“:”,名字则没有这个要求。4、操作数 指令性语句操作数个数:0,1,2 指示性语句操
9、作数个数:至少1个,多个的时候用“,”隔开。,【例4-1】求从1开始连续50各奇数之和,并将结果存放在名字为SUM的字存储单元中。流程图如图,;定义数据段;SUM定字类型,初值0;定义数据段结束;定义堆栈段;200字节内容为0连续空间;定义堆栈段结束;定义代码段;ASSUME伪指令定义各段;DS指向DATA段首地址;CX置循环次数50;累加器AX清零;BX置常数1,第一个奇数,DATA SEGMENT SUM DW 0DATA ENDSSTACK SEGMENT DB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODE
10、START:MOV AX,DATA MOV DS,AX MOV CX,50 MOV AX,0 MOV BX,1,;累加50个奇数的和;求下一各奇数;循环器计数值减1;CX不为零转移至NEXT;累加的和送到SUM中;调用4CH功能;返回DOS状态;代码段结束;整个程序汇编结束,NEXT:ADD AX,BX INC BX INC BX DEC CX JNE NEXT MOV SUM,AX MOV AH,4CH INT 21HCODE ENDS END START,4.1.3 语句的构成,1、语句行定义及组成 语句行:由标记及分隔符按照一定规则组织起来。标记:是汇编语言源程序的最小的,具有意义的单位
11、。组成:标识符(Identifiers)、保留字(Reserved Words)、界符(Delimiters)、常数(Constants)和注释(Comments),所有这些都称为标记。,2、标识符功能:A.便于理解和书写所使用的一些字符串;B.常作为一程序段的开头;C.常作为一数据块的开头。注意事项:A.不能以数字开头;B.可由字母、数字和下划线组合而成 C.最大长度不能超过31个字符。3、保留字(关键字)凡是8086汇编指令、伪指令、寄存器名等都是保留字。保留字不能用于表示标识符。例如:等,4、界符 一个程序中或一条指令中两个部分的分割符号 例如:,“,”就是界符5、常数 二进制尾部加 十
12、进制尾部加或不加 八进制尾部加或 十六进制尾部加,如果以字母AF开头需在字目前加“”引号括起来的字符代表常数代表ASCII码的41H、42H、43H、44H。,6、注释 功能:便于理解和阅读程序。注意事项:A.注释用分号“;”打头,可以加在任何一行程序中,直到行尾为止。B.如果一行写不下,要延续到下一行,则下一行仍要以分号开头 C.注释被略去而不作处理。,在8086汇编语言中,有数值表达式和地址表达式两种。由各种常量与运算符连接成的式子,称为数值表达式。将常量、变量、标号、寄存器内容和运算符、操作符组合成的有意义的式子,称为地址表达式。单个常量,变量、标号是表达式的最简形式。在汇编过程中,汇编
13、程序按操作运算符约定的优先规则对表达式进行计算,得到一个数值或一个地址。表达式由操作数和运算符组成,在汇编时一个表达式得到一个值,如在立即数时,我们可以把表示为X。,4.1.4 表达式,1、操作数代表一个数据和地址 1)数据:常数或标号。对于数据,最简单的表达方式就是用常数形式,如100H。汇编语言源程序中也常常用标号来表示数据,如用PORT表示一个端口号,而在源程序中又对PORT作了定义,使它等于某个常数。2)地址:标号 在源程序中,存储器地址常常用标记符(也叫标号)表示。如规范程序中的START、NEXT等。程序中的地址标号常常作为转移指令的转移地址或调用指令的调用地址。这些标号所代表的地
14、址值实际上包括了两个分量,一个是段值,另一个是偏移量。,2、操作运算符 用运算符可以对一个操作数或几个操作数进行运算,这就构成了一个表达式,从而也得到一个新的值。8086汇编中有5类运算符,即:1)算术运算符(+、-、*、/、MOD)2)逻辑运算符(AND、OR、NOT、XOR)3)关系运算符(EQ、NE、GT、GE、LT、LE)真:FFFFH;假:0 4)分析操作符(SEG、OFFSET、TYPE、LENGTH、SIZE、HIGH、LOW)5)修改属性操作(PTR、THIS),)算数运算符、X、/MOD(SHL SHR)对数据进行运算,运算结果仍为数据,但对地址不能进行乘除运算如:20A11
15、04021hSHL 284HMOD取除法中的余数/整除/,)逻辑运算符AND OR NOT XOR 只能对常数进行运算,得到的结果也是常数既可以做指令助记符,又可以做汇编语言的运算符指令助记符是在程序执行时运算的,运算符是在汇编过程中进行的。例如 AND DX,PORT AND 0FEH如果PORT值为90H,则相当于AND DX,90H 如果PORT值为80H,则相当于AND DX,80H,3)关系运算符EQ NE LT GT LE GE=!=两个参与运算的数必须同是数值,或同是内存单元的地址,而结果总是一个数值。如果关系成立:其结果为0FFFFH否则:其结果为0例如:MOV DX,PORT
16、 LT 5 如果PORT小于5,相当于MOV DX,0FFFFH 否则,相当于MOV DX,0 关系运算符一般不单独使用,而是和逻辑运算符结合起来使用,例如:MOV BX,(PORT LT 5)AND 20)OR(PORT GE 5)AND 30)当PORT小于时,相当于?当PORT大于时,相当于?注意:加括号表示优先级高,先进行运算。)分析操作符OFFSET 分离操作符SEG HIGHTYPE LOWSIZELENGTH,SEG 取符号地址(变量或标号)的段地址 例 MOV AX,SEG yy OFFSET 取符号地址(变量或标号)的偏移地址 例 MOV BX,OFFSET yy,bb SE
17、GMENT yy DB 6 dup(?)bb ENDScc SEGMENT ASSUME CS:cc,DS:aa,ES:bbstart:CLD MOV AX,SEG yy MOV ES,AX MOV DI,OFFSET yy MOV CX,6.cc ENDS END start,aa SEGMENTxx DB Hello!aa ENDSbb SEGMENT yy DB 6 dup(?)bb ENDScc SEGMENT ASSUME CS:cc,DS:aa,ES:bbstart:CLD MOV AX,aa MOV DS,AX LEA SI,xx MOV AX,SEG yy MOV ES,AX
18、MOV DI,OFFSET yy MOV CX,6 REP MOVSB MOV AH,4CH INT 21H cc ENDS END start,D:DEBUG hello1.exe-U;查看程序代码 129F:0000 FC CLD129F:0001 B89D12 MOV AX,129D129F:0004 8ED8 MOV DS,AX129F:0006 8D360000 LEA SI,0000 129F:000A B89E12 MOV AX,129E129F:000D 8EC0 MOV ES,AX129F:000F BF0000 MOV DI,0000129F:0012 B90600 MOV
19、 CX,0006129F:0015 F3 REP129F:0016 A4 MOVSB129F:0017 B44C MOV AH,4C129F:0019 CD21 INT 21、,例 A1DB 20H,30HA2DW 0438HMOV AL,TYPE A1MOV AH,TYPE A2汇编时形成指令MOV AL,1MOV AH,2,TYPE 取符号地址(变量或标号)的类型属性,LENGTH 取变量的长度属性例 A1DW 100 DUP(?)A2DW 1,2,3MOV CX,LENGTH A1MOV AH,LENGTH A2汇编时形成指令MOV CX,100;使用DUP时,返回此变量;包含的单元数为
20、100个字。MOV AH,1;对其他情况则返回1。,SIZE 取变量的总字节数SIZE=LENGTH*TYPE例 A1DW 100 DUP(?)A2DW 1,2,3MOV CX,SIZE A1MOV AH,SIZE A2汇编时形成指令 MOV CX,200;LENGTH返回1,TYPE返回2 MOV AH,2;LENGTH返回1,TYPE返回2,例如:ABC DW 100 DUP(?)OFFSET:求偏移地址MOV DX,OFFSET ABC,SEG:求段地址 MOV AX,SEG ABC MOV DS,AXTYPE:求标识符类型值 LENGTH:求为标示符分配的相数SIZE:求为标识符分配的
21、字节数TYPE ABC;等于2LENGTH ABC;等于100SIZE ABC;等于200,HIGH和LOW字节分离运算符格式:HIGH/LOW 变量或标号功能:对一个数或地址表达式,HIGH从中分离出高位字节,LOW分离出低位字节。例:K1EQU0ABCDHK2EQU1234HMOVAH,HIGH K1MOVBL,LOW K2汇编时形成指令MOVAH,0ABHMOVBL,34H,)属性操作符a、PTR 定义某内存单元类型,在汇编语言将指令语句翻译成目标代码的过程中,要求指令语句有非常明确的操作数地址的类型,以便准确的访问内存单元,尤其在双操作数指令中,两个操作数的类型必须一致,否则就会出错。
22、格式:类型 PTR 标识名/内存单元/表达式地址例如:MOV AX,WORD PTR D1;定义标号D1;指向的内存单元为字单元。类型:BYTE、WORD、DWORD、NEAR、FAR。作用:以PTR前导类型为准,赋予地址表达式一个新的临时类型,原有的段属性和偏移量保持不变,其本身并不分配单元。,LABC和LABD具有相同的段地址和偏移量,但LABC是字节类型,LABD是字型量。,b、THIS指定新类型 格式:THIS 类型类型:BYTE、WORD、DWORD、NEAR、FAR。作用:同PTR,THIS应与EQU、或LABEL等伪操作命令连用。例:LABC EQU THIS BYTE LABD
23、 EQU 4321H,2255H(或MOV AL,BYTE PTR LABD)MOV AL,LABC;AL=21H MOV AX,LABD;AX=4321H,3、表达式的计算顺序规则:1)一般先执行优先级别高的运算 2)优先级相同的运算,自左向右 3)括号可改变运算顺序,伪指令用来指示汇编程序应该如何去处理汇编语言源程序,它们在汇编时被汇编程序解释执行、只有部分语句可以申请存储空间以、全部都不产生任何目标代码。,4.2 伪指令,1、作用:A.定义变量的类型;B.给寄存器赋初值;C.给变量分配存储空间。2、特点:A.不占用内存 B.无目标代码3、格式变量名 数据定义符 操作数,操作数,.;注释
24、数据定义符:DB、DW、DD、DQ、DT分别定义字节、字、双字、4个字、10个字节的类型变量。变量名:指示内存操作数的地址(符号地址)操作数:指示内存操作数的内容顺序存入变量名指向的内存单元中,数值不超过定义所类型的范围。,4.2.1 数据定义伪指令,4、功能:用来定义程序中所用的内存操作数,并用变量与存储单元建立联系。5、重复操作符DUP变量名 数据定义符 n DUP(初始值);注释 n表示重复次数,初始值可以是常量或“?”,后者“?”表示只定义n个大小随机的区域。6、注意事项:1)操作数可以是常量,或者是表达式。2)不同类型定义同样的初值占用的空间不同;3)定义多个字符的字符串只能用DB定
25、义 4)DB和DW在定义字符时候是有区别的,DB按顺序进行存储,DW按“低低高高”顺序存储;,操作数可以是用常量、表达式和?表示。常量和表达式表示内存操作数的初始值,其值应在其定义的类型范围内,否则汇编出错。例 aa DB 270;错误 bb DW 80000;错误用?表示只保留存储空间不置初始值的内存操作数。例 cc DB?可用 DUP 复制操作符定义相同的操作数,其格式为:重复次数 DUP(操作数)例 ee DB 3 DUP(4)等价于 ee DB 4,4,4,例1:定义赋初值的变量 data SEGMENT xx DB 1,-1,0fcH yy DW 1,-1,0fcH zz DD 1,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理

链接地址:https://www.31ppt.com/p-2215967.html