物理汇编语言程序设计.pptx
《物理汇编语言程序设计.pptx》由会员分享,可在线阅读,更多相关《物理汇编语言程序设计.pptx(169页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、4.1 汇编语言的格式 4.1.1 8086汇编语言程序的一个例子MY_DATA SEGMENT ;定义数据段SUM DB?;为符号SUM保留一个字节MY_DATA ENDS ;定义数据段结束MY_CODE SEGMENT ;定义码段 ASSUME CS:MY_CODE,;规定CS和DS的内容 DS:MY_DATAPORT_VAL EQU 3 ;端口的符号名GO:MOV AX,MY_DATA ;DS初始化为MY_DATA MOV DS,AX MOV SUM,0 ;清SUM单元CYCLE:CMP SUM,100 ;SUM单元与100相比较 JNA NOT_DONE ;若未超过,转至NOT_DON
2、E MOV AL,SUM ;若超过,把SUM单元的内容 OUT PORT_VAL,AL ;通过AL输出 HLT ;然后停机NOT DONE:IN AL,PORT_VAL ;未超过时,输入下一个字节 ADD SUM,AL ;与以前的结果累加 JMP CYCLE ;转至CYCLEMY CODE ENDS ;码段结束 END GO ;整个程序结束 第1页/共169页 一个语句行由4个部分组成:标号(或名称)操作码 操作数 ;注释*各部分之间至少要用一个空格作为间隔。*“&”作为后续行的标志。第2页/共169页4.1.2 8086汇编语言源程序的格式 8086的汇编语言的源程序是分段的,由若干个段形成
3、一个源程序。源程序的一般格式为:NAME1 SEGMENT 语句 语句 NAME1 ENDS NAME2 SEGMENT 语句 语句 NAME2 ENDS END标号 每一个段有一个名称,以符号SEGMENT作为段的开始,以语句ENDS作为段的结束。这两者名称必须相同。整个源程序以语句END作为结束。第3页/共169页4.2 语句行的构成 语句行是由标记(Token)及分隔符(空格)按照一定的规则组织起来的,标记是IBM宏汇编源程序的最小的、有意义的单位。第4页/共169页4.2.1 标记 1.IBM宏汇编的字符集 (1)字母 包含大写的英文字母:ABCDXYZ;小写的英文字母:abcxyz。
4、(2)数字 阿拉伯数字:0123456789。(3)特殊字符 可打印字符下图所示。第5页/共169页(4)打印字符有:空格、制表(TAB键)、回车和换行。其余字符若出现一律按空格处理。尽管&是字符集中的一个字符,但紧跟在回车换行之后的符号&代表连续行,被看作空格。IBM宏汇编字符集中的可打印字符第6页/共169页2.界符(Delimiters)界符是一些特殊字符。它们可以表明某个标记的结束。它们本身也有一定的意义 有了界符就可以不再用分隔符,例子中的冒号(:)、逗号(,)都是一种界符。next:mov ax,bx;将bx 的值赋给ax第7页/共169页3.常量(Constants)凡是出现在8
5、086源程序中的固定值(它在程序运行期间不会变化),就称为常量。例子中的数0、3、100等都是常量,而且是数字常量。例如:MOV AL,100b (1)数字(整数)常量 二进制常量 以字母B结尾的由一串“0”和“1”组成的序列。例如,00101100B。第8页/共169页 十进制常量 09的数字组成的序列,可以以字母D作结尾,或没有任何字母作结尾。例如,1234D或1234。八进制常量 以字母Q(或字母O)结尾,由若干个07的数字组成的序列。例如255Q,377Q等。十六进制常量 以字母H结尾,由若干个09的数字或AF的字母所组成的序列。为了避免与标识符相混淆,十六进制数在语句中必须以数字打头
6、。所以,凡是以字母AF开始的十六进制数,必须在前面加上数字0。例如56H,0BA3FH等。第9页/共169页 (2)字符串常量 字符串常量是由包含在单引号内的1至2个ASCII字符构成的。只有在初始化存储器时才可以使用多于两个字符的字符串常量。例如:MOV AL,D MOV AX,AB MOV AX,ASD MY_DATA SEGMENT SUM DBASHFHGHHCBNVB MY_DATA ENDS 第10页/共169页4.标识符(Identifiers)标识符是由程序员自由建立起来的、有特定意义的字符序列,例:SUM、CYCLE和PORT_VAL等等。一个标识符是由最多为31个字母、数字
7、及规定的特殊字符(?_)等组成的,而且不能用数字打头(以免与十六进制数相混淆)。This_doneThisdone是不同的标识符。若前31个字符相同,但第32个字符不同,两个标识符也是相同的。第11页/共169页MY_DATA SEGMENT ;定义数据段SUM DB?;为符号SUM保留一个字节MY_DATA ENDS ;定义数据段结束MY_CODE SEGMENT ;定义码段 ASSUME CS:MY_CODE,;规定CS和DS的内容 DS:MY_DATAPORT_VAL EQU 3 ;端口的符号名GO:MOV AX,MY_DATA ;DS初始化为MY_DATA MOV DS,AX MOV
8、SUM,0 ;清SUM单元CYCLE:CMP SUM,100 ;SUM单元与100相比较 JNA NOT_DONE ;若未超过,转至NOT_DONE MOV AL,SUM ;若超过,把SUM单元的内容 OUT PORT_VAL,AL ;通过AL输出 HLT ;然后停机NOT DONE:IN AL,PORT_VAL ;未超过时,输入下一个字节 ADD SUM,AL ;与以前的结果累加 JMP CYCLE ;转至CYCLEMY CODE ENDS ;码段结束 END GO ;整个程序结束 第12页/共169页5.保留字(Reserved words)(P93)保留字看上去像标识符,但是它们在语言中
9、有特殊的意义,而且不能用它们作为标识符。如例子中的SEGMENT、MOV、EQU、AL等都是保留字。实际上凡是8086的指令助记符,汇编语言中的命令(伪指令),寄存器名等都是保留字。6.注释(Comment)注释是分号(;)后面的任意的字符序列。在汇编时并不处理。在可打印文件中,注释和源程序可同时打印。第13页/共169页4.2.2 符号使用符号的原因:为了使程序更具有普遍性,也便于程序的修改符号可以代替存储单元、数据、表达式等。符号属于标识符,要符合标识符的规则。例:存储单元SUM、输入输出端口PROT_VAL。符号可以分成五类:寄存器、变量、标号、数、其他。每个符号都具有一定的属性。第14
10、页/共169页1.寄存器(Registers)8086的寄存器常代表某一个操作数。寄存器有一种类型特性:字节/字 寄存器。8086的标志位被看作是一位寄存器。2.变量(Variable)存放在存储单元中的操作数是变量,在程序中出现的是存储单元地址的符号,即它们的名称。MY-DATA SEGMENT ;定义数据段 SUM DB?;为符号SUM保留一个字节 MUL DW?MY_DATA ENDS第15页/共169页 所有的变量都具有三种属性:(1)段值(SEGMENT),即变量单元所在段的段地址(段的起始地址)的高16位,低4位始终为0;(2)偏移量(OFFSET),即变量单元地址与段的起始地址之
11、间的偏移量(16位);(3)类型(TYPE),变量有三种类型:字节(BYTE)、字(WORD)和双字(DOUBLE WORD)。变量通常是用存储器初始化命令定义的。第16页/共169页MY-DATA SEGMENT SUM DB 10 MUL DW 1000 AA DB 23 MY_DATA ENDS问:变量SUM MUL AA的段值和偏移量以及类型?第17页/共169页3.标号(Label)标号是某条指令所存放单元的符号地址,它是转移(条件转移或无条件转移)指令或调用(CALL)指令的目标操作数。对于汇编程序来说,标号与变量是类似的,都是存储单元的符号地址。只是标号对应的存储单元中存放的是指
12、令;而变量所对应的存储单元中存放的是数据。标号也有三种属性:(1)段值,(2)偏移量,(3)类型。第18页/共169页 标号的类型与变量不同,它的类型是NEAR或是FAR。NEAR是指转移到此标号所指的语句,或调用此子程序或过程,只需要改变IP值,而不改变CS值。即转移指令或调用指令与此标号所指的语句或过程在同一段内。FAR与NEAR不同,要转移到标号所指的语句,或调用此子程序或过程,不仅需要改变IP的值,而且需要改变CS,即是段交叉转移或调用。若没有对标号进行类型说明,就假定它为NEAR。第19页/共169页4.数 在汇编语言源程序中,常数也常以符号的形式出现,这样就更具有通用性,更便于修改
13、。例:PORT_VAL EQU 3。PAI EQU 3.14159265.其他符号 除了上述4种符号以外,在汇编语言中还经常出现一些其他符号,把它们用作汇编程序中的伪指令名字。SEGMENT/ENDS CODEMACRO/ENDM 第20页/共169页4.2.3 表达式 一个表达式是一个由操作数和运算符组合的序列,在汇编时它能产生一个值。1.操作数(Operands)一个操作数可以是一个寄存器名、一个常量(数字常量或字符串常量)或一个存储器操作数。常量操作数是指具有数字值的操作数或表示常量的标识符。常量操作数的值是正的 常量操作数的范围是-65536+65535 第21页/共169页 存储器操
14、作数 存储器操作数,通常为标识符,分成标号和变量两种。标号是可执行的指令语句的符号地址,通常是作为转移指令JMP和调用指令CALL的目标操作数。变量通常是指存放在一些存储单元中的值,这些值在程序运行过程中是可变的。变量的寻址方式包括:直接寻址、基址寻址、变址寻址、基址变址寻址 作为存储器操作数的符号和变量具有的属性是:段值、段内地址偏移量、类型 第22页/共169页 2.运算符(Operators)IBM宏汇编通常有以下几种运算符:算术运算符(Arithmetic Operators);逻辑运算符(Logical Operators);关系运算符(Relational Operators);分
15、析运算符(Analytic Operators);合成运算符(Synthetic Operators)。第23页/共169页 (1)算术运算符 这是读者十分熟悉的运算符 +(加)、-(减)、*(乘)、/(除)、MOD(求余),算术运算符应用于数字操作数,结果也是数字的。算术运算符用在数字表达式或地址表达式中例如:MOV AX ,BX+10 MOV AX ,BX+10 MOV CX,2*6 MOV CX,2*6 MOV CX,D2-D1 MOV CX,D2-D1 注意:当算术运算符应用于存储器即地址操作数时其规则就更加严格:只有当结果有明确的、有意义的物理解释时,这些运算才是有效的。第24页/共
16、169页MY_DATA SEGMENT ;定义数据段SUM DB?;为符号SUM保留一个字节MY_DATA ENDS ;定义数据段结束MY_CODE SEGMENT ;定义码段 ASSUME CS:MY_CODE,;规定CS和DS的内容 DS:MY_DATAPORT_VAL EQU 3 ;端口的符号名GO:MOV AX,MY_DATA ;DS初始化为MY_DATA MOV DS,AX MOV SUM,0 ;清SUM单元CYCLE:CMP SUM,100 ;SUM单元与100相比较 JNA NOT_DONE ;若未超过,转至NOT_DONE MOV AL,SUM ;若超过,把SUM单元的内容 O
17、UT PORT_VAL,AL ;通过AL输出 HLT ;然后停机NOT DONE:IN AL,PORT_VAL ;未超过时,输入下一个字节 ADD SUM,AL ;与以前的结果累加 JMP CYCLE ;转至CYCLEMY CODE ENDS ;码段结束 END GO ;整个程序结束 SUM+2SUM-2NOT_DONE-GOSUM-CYCLE (X)为什么?第25页/共169页 (2)逻辑运算符 按位操作的逻辑运算符有:AND、OR、XOR和NOT。逻辑运算的操作数只能是数字,而且结果是数字。注意:AND、OR、XOR和NOT,也是8086指令的助记符。但是,作为IBM宏汇编的运算符是在程序
18、汇编时计算的。而作为指令的助记符,则是在程序执行时计算的。第26页/共169页编辑程序MASMLINKMf.asmMf.exeMf.obj第27页/共169页例:IN AL,3 OUT 3 AND 0FEH,AL (OUT 2,AL)例:AND DX,21H AND 0FEH 21H AND 0FEH 是在汇编时计算的,汇编后相当于 AND DX,20HDX与20H的“与”操作是在指令执行时来完成的第28页/共169页 (3)关系运算符 在IBM宏汇编中有以下关系运算符:相等 EQ(Equal);不等 NE(Not Equal);小于 LT(Less Than);大于 GT(Greater T
19、han);小于或等于 LE(Less Than or Equal);大于或等于 GE(Greater Than or Equal)。第29页/共169页 关系运算的两个操作数,或者都是数字的,或者是同一个段的存储器地址。关系运算的结果或者为真或者为假:为假时值为0;为真时值为0FFFFHMOV BX ,(PORT LT 5)AND 20)OR (PORT GE 5)AND 30)当PORT 小于5时,汇编为mov bx,20 否则,mov bx ,30第30页/共169页(4)分析运算符 分析运算符可以把存储器操作数分解为它的组成部分,如它的段值、段内偏移量和类型。(5)合成运算符 合成运算符
20、可以由已经存在的存储器操作数生成一个段值与偏移量相同、而类型不同的新的存储器操作数。第31页/共169页4.2.4 语句源程序中的语句可分成两类:指令语句,汇编程序把它们翻译成机器代码,这些代码命令8086执行某些操作。如MOV、ADD、JMP等。格式为:标号:助记符 参数,.参数;注释 指示性语句(伪指令),汇编程序并不把它们(也不可能)翻译成机器代码,只是用来指示、引导汇编程序在汇编时进行一些操作.如定义符号、分配存储单元、初始化存储器等等,所以伪指令本身不占用存储单元。格式为:名字 命令 参数,参数;注释区别:在指令语句中,标号后面会跟有“:”;在指示性语句中,名字后面没有“:”。在指令
21、语句中,标号与指令的地址符号名相联系;在指示性语句中名字与指令地址毫无联系。在指令语句中标号总是任选的;在指示性语句中的名字可能是强制的、任选的或禁止的,这取决于实际的命令。第32页/共169页4.3 指示性语句 在IBM宏汇编中有以下几种指示性语句(Directive statements):(1)符号定义语句(Symbol definition);(2)数据定义语句(Data definition);(3)段定义语句(Segmentation definition);(4)过程定义语句(Procedure definition);(5)结束语句(Termination)。第33页/共169
22、页4.3.1 符号定义语句 1.等值语句EQU EQU语句给符号名定义一个值,或定义为别的符号名,甚至可定义为一条可以执行的指令等。EQU语句的格式为:NAME EQU EXPRESSION EQU语句在未解除前,不能重新定义。例:COUNT EQU CX PAI EQU 3.1415926 第34页/共169页2.等号(Equal sign)语句=此语句的功能与EQU语句类似,最大特点是能对符号进行再定义。D1=12.3;D1=D1+23.解除语句PURGE 已经用EQU命令定义的符号,若以后不再用了就可以用PURGE语句来解除。PURGE语句的格式为:PURGE 符号1,符号2,符号n 注
23、意:PURGE语句本身不能有名字。用PURGE语句解除后的符号可以重新定义。PERGE COUNT,PAI;解除符号定义第35页/共169页4.3.2 数据定义语句 数据定义语句,为一个数据项分配存储单元,用一个符号名与这个存储单元相联系,且为这个数据提供一个任选的初始值。与数据项相联系的符号名称为变量。数据定义语句的例子如下:THINGDB?;定义一个字节BIGGER_THING DW?;定义一个字BIGGEST_THINGDD?;定义一个双字 第36页/共169页 THING与存储器中的一个字节相联系,即它是一个字节变量。BIGGER_THING与存储器中的一个字相联系,即它是一个字变量。
24、BIGGEST_THING与存储器中的一个双字相联系,即它是一个双字变量。第37页/共169页XXXXXXTHINGBIGGER-THING第38页/共169页 在实际应用中,还经常会用到由字节、字或双字构成的表。这可由在数据定义语句的参数部分,引入若干个用逗号分隔的参数就可以建立一个表。下列语句定义了一个包含2的权的字节的表:POWERS_2DB1,2,4,8,16 第39页/共169页 DUP可以表示若干相同的值。DUP利用给出的一个初值(或一组初值)以及这些值应该重复的次数来初始化存储器。DB 100 DUP(0);100个字节全初始化为0DW 100 DUP(0);100个字全初始化为
25、0DW 10 DUP(?);保留10个字 FOO DD 50 DUP(FOO);FOO地址的50份备份 DB 10 DUP(10 DUP(00);10次重复的0的10次重复 DW 35 DUP(FOO,0,1);FOO的段内偏移量、0和1,这三个字的35次重复 DB 5 DUP(1,2,4 DUP(3),2 DUP(1,0);定义1,2,3,3,3,3,1,0,1,0的5份副本 字符串的定义必须用DB命令。EXAM1 DBTHIS IS AN EXAMPLE 第40页/共169页Data segement ORG 000AH D1 DB 10,20,30 D2 DW 10H,2089H D3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 物理 汇编语言 程序设计
限制150内