您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第四章汇编语言程序设计(1)
杭州电子科技大学微机原理及应用微机原理及应用杭州电子科技大学微机原理及应用主要内容:•汇编语言源程序的结构•汇编语言语句格式•伪指令•功能调用•汇编语言程序设计杭州电子科技大学微机原理及应用机器语言——二进制数形式的指令和数据。B064是什么意思?这就是机器语言。既不直观,又不易理解和记忆.MOVAL,64H;很容易记忆理解,这就是助记符。助记符——用便于记忆的英语单词表示的指令操作码。它反映了指令的功能和主要特征,便于人们理解和记忆。概念:汇编语言源程序杭州电子科技大学微机原理及应用操作数可能放在存储器中,这就涉及操作数的地址。程序中遇到转移指令或调用指令,也需要知道转移地址,若采用具体地址就很不方便,一旦有错,改动也很麻烦。于是人们采用标号或符号来代替地址,例:LP1:movax,VAR…loopLP1汇编语言——指令助记符,符号地址,标号,伪指令等语言元素的集合以及这些元素使用的规则。用汇编语言编写的程序叫汇编语言源程序。指令除了操作码以外,还有一个操作数问题。杭州电子科技大学微机原理及应用汇编程序源程序的编译程序汇编程序汇编语言源程序机器语言目标程序汇编源程序需翻译成机器语言,变成可执行文件,机器才能执行,这个翻译过程叫汇编。——高级语言中称该过程为“解释”或“编译”。执行翻译的程序称为“汇编程序”。杭州电子科技大学微机原理及应用汇编语言程序的开发过程编辑文本编辑器,如EDIT.COM源程序:文件名.asm汇编汇编程序,如ML.EXE目标模块:文件名.obj连接连接程序,如LINK.EXE可执行文件:文件名.exe调试调试程序,如DEBUG.EXE应用程序错误错误错误错误杭州电子科技大学微机原理及应用汇编语言源程序的结构汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由三个逻辑段组成:数据段——存放数据、变量堆栈段——堆栈区域代码段——存放程序指令杭州电子科技大学微机原理及应用stackSEGMENTPARA‘stack‘DB100DUP(‘stack’)stackENDSdataSEGMENT数据、变量在此定义dataENDScodeSEGMENTASSUMECS:code,DS:data,ES:datastart:MOVAX,dataMOVDS,AXMOVES,AX此处加入你自己的程序段MOVAL,4CHINT21HcodeENDSENDstart堆栈段数据段代码段•一个基本的汇编语言程序框架如下:杭州电子科技大学微机原理及应用4.1.1汇编语言的语句格式⑴执行性语句——执行性语句用于表达处理器指令(也称为硬指令),汇编后对应一条指令代码。由处理器指令组成的代码序列是程序设计的主体标号:硬指令助记符操作数,操作数;注释⑵说明性语句——说明性语句用于表达伪指令,指示源程序如何汇编、变量怎样定义、过程怎么设置等名字伪指令助记符参数,参数,……;注释杭州电子科技大学微机原理及应用●指令性语句由CPU执行,每一条指令性语句都有一条机器码指令与其对应;●指示性语句由汇编程序执行。它指出汇编程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无机器码指令与其相对应。指令性语句汇编时生成机器码;指示性语句汇编时不生成机器码。杭州电子科技大学微机原理及应用标号——指令的符号地址,用来代表指令在存储器中的地址。只能出现在指令性语句中,标号后应加上冒号。•名字——段、过程、变量的名字,用来代表它们在存储器中的地址。只能出现在指示性语句中,名字后不加冒号。•指令助记符——8086助记符、伪指令•操作数——即指令的操作对象–对指令性语句——0,1,2个–对指示性语句——根据需要而定–操作数之间以逗号分隔–操作数可以是:寄存器、存储单元、常数或表达式例如:AX,[DI+BX+10],200,16*8+TABLE,等等语句的构成元素:杭州电子科技大学微机原理及应用•注释——以分号开头,可放在指令后,也可单独一行。注意注解的写法。要写指令(段)在程序中的作用,而不要写指令的操作。例如:以下为同一条指令写的注释1)MOVCX,100;传送100到CX2)MOVCX,100;循环计数器置初值显然,第二种写法要比第一种写法要好。杭州电子科技大学微机原理及应用dataSEGMENTHelloDB‘Hello,world!’,0DH,0AH,’$’dataENDSprogSEGMENTASSUMECS:prog,DS:datastart:MOVAX,dataMOVDS,AXLEADX,hello;取字符串首地址MOVAH,9INT21H;显示字符串MOVAH,4CHINT21H;退回DOSprogENDSENDstart名字标号汇编语言的一个实例:hello.asm杭州电子科技大学微机原理及应用4.1.2数据项与表达式数据项包括常量、变量、标号及表达式。1.常量二进制数,以B结尾。如01001101B。十进制数,如85。十六进制数,以H结尾。第1个数字为A-F时,前面应加0,如0F160H。字符串:用引号括起来的1个或多个字符。如‘ERROR!’,’a’,汇编时被翻译成对应的ASCII码45H,52H,52H,4FH,52H,21H和61H。杭州电子科技大学微机原理及应用有三个属性:段地址:即标号所在段的段地址;偏移量:标号所代表存储单元的段内偏移地址;类型:NEAR或FAR:NEAR—表示标号所在语句与转移指令/调用指令在同一码段内,跳转时只需改变IP即可。FAR—标号所在语句与转移指令/调用指令不在同一代码段内。若没有对类型进行说明,默认为NEAR。标号通常作为转移指令或CALL指令的转移地址。2.标号——指令所在内存单元的符号地址杭州电子科技大学微机原理及应用变量——即内存中的存储单元或数据区。变量名——是存储单元(数据区)的符号地址或名字。变量也有三个属性:段地址—变量所在段的段地址偏移量—变量单元地址与段首地址之间的位移量。类型—有BYTE、WORD和DWORD三种。变量在程序中作为存储器操作数被引用。3.变量杭州电子科技大学微机原理及应用•标号和变量名的使用规则–组成:A-Z(不分大小写),0-9,?,@,_–不能以数字开头,句号(.)只能作为首字符–长度小于31个字符–不能与保留字(指令助记符、伪指令、预定义符号等)重名–不能重复定义例如:正确的:LP1,AGAIN,NEXT,_GO,OK_1错误的:4M,LOOP,AAA,#HELP,+ONE杭州电子科技大学微机原理及应用4.表达式表达式是常数、寄存器、标号、变量与运算符的组合。有数字表达式和地址表达式两种。汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类。杭州电子科技大学微机原理及应用用于数字表达式,例:MOVAX,4*1024汇编后的形式为:MOVAX,4096用于地址表达式,例:LEASI,TAB+3若TAB的偏移地址为1000H,则汇编后的形式为:LEASI,[1003H]1)算术运算符—+、-、*、/,MOD杭州电子科技大学微机原理及应用逻辑运算符只能用于数字表达式中。例:MOVCL,36HAND0FH经汇编后:MOVCL,06H注意,不要把逻辑运算符与逻辑运算指令混淆:例:ANDAX,3FC0HAND0FF00H汇编后源操作数被翻译为:3F00H,所以上述指令与ANDAX,3F00H等价。2)逻辑运算符—AND、OR、XOR、NOT杭州电子科技大学微机原理及应用关系运算的结果是一个逻辑值:真或假关系为真,结果为全1关系为假,结果为全0例:MOVBX,PORTGT300H若PORT的值大于300H,则汇编后为:MOVBX,0FFFFH否则汇编后为:MOVBX,03)关系运算符—EQ、NE、LT、GT、LE、GE杭州电子科技大学微机原理及应用SEG:取变量/标号的段地址OFFSET:取变量/标号的偏移地址例:VARDB12H……MOVBX,OFFSETVAR;取变量VAR的偏移地址MOVAX,SEGVAR;取变量VAR的段地址注意,以下指令的异同:MOVBX,OFFSETVARLEABX,VARMOVBX,VAR4)取地址运算符——SEG、OFFSET杭州电子科技大学微机原理及应用•TYPE取变量的类型(1,2,4)•LENGTH取所定义变量的长度(即变量中元素的个数)•SIZE取所定义存储区的字节数(=TYPE*LENGTH)例:VARDW1,2,3,4,5则TYPEVAR=2LENGTHVAR=5SIZEVAR=105)取值运算符——TYPE、LENGTH、SIZE杭州电子科技大学微机原理及应用6)属性运算符——PTR用来指定地址操作数的类型。格式:类型PTR地址操作数类型∈{BYTE,WORD,DWORD,NEAR,FAR}•BYTE、WORD、DWORD用于描述数据存储单元(变量)地址•NEAR、FAR用于描述转移、调用的目的地址杭州电子科技大学微机原理及应用例:MOVBYTEPTR[DI],0;字节类型MOVWORDPTR[DI],0;字类型MOV[DI],0B5H;类型不定PTR也可用来进行强制类型转换例:STR1DW?;STR1定义为字类型MOVAX,STR1;合法MOVAL,STR1;非法MOVAL,BYTEPTRSTR1;合法杭州电子科技大学微机原理及应用4.2伪指令•数据定义伪指令•符号定义伪指令•段定义和段寄存器指定伪指令•过程定义伪指令•结束伪指令由汇编程序执行的指令,它本身不被汇编成机器指令。常用的伪指令有:杭州电子科技大学微机原理及应用4.2.1数据定义伪指令用于定义变量,即内存单元或数据区。数据定义伪指令的格式为:变量名数据定义伪指令操作数,操作数,…常用的数据定义伪指令有如下几种:DB定义字节DW定义字DD定义双字操作数可以是常数、变量或表达式杭州电子科技大学微机原理及应用例:DATA_BDB10,5,10HDATA_WDW100H,-4DATA_DDD0FFFBH汇编后的内存分配情况如右图所示。05H10H00H01HFCHFFHFBHFFH00H00H0AHQDATA_BDATA_WDATA_D10510H100H-40FFFBH杭州电子科技大学微机原理及应用例:操作数可以是字符串,例如STRDB‘HELLO’汇编后的情况如图:STR‘H’‘E’‘L’‘L’‘O’注意下面两个定义的不同之处:DB‘AB’;41H在低字节,42H在高字节DW‘AB’;42H在低字节,41H在高字节48H45H4CH4CH4FH杭州电子科技大学微机原理及应用操作数?用来保留存储空间,但不存入数据.例:ABCDB0,1,2,3,4,’OK’,’$’RSVDW?,?,?,?,?,?,?,?复制操作符DUP:重复的数据可以使用复制操作符DUP,如上面RSV亦可写成:RSVDW8DUP(?)杭州电子科技大学微机原理及应用•例:TABLEDB10DUP(?)BUFFERDWTABLE,$+3设TABLE的偏移地址为0080H,则汇编后如下图所示:BUFFER0080H80HTABLE008AH008BH008CH008DH...8FH00H00H0089H10Bytes操作数中若使用$,则表示的是地址计数器的当前值。杭州电子科技大学微机原理及应用符号定义伪指令把一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示。类似于C语言中的#define。符号定义伪指令有两种:EQU,=用EQU定义的符号未清除前,不能重新定义。清除EQU定义可用PURGE伪指令。用”=”定义的符号可在任何时候进行重定义。二者均不占用存储空间,仅是给符号赋值杭州电子科技大学微机原理及应用例:FIVEEQU5COUNTEQUCXTENEQU10DIST=BYTEPTR[SI+BP]GOTO=JMP…MOVAX,TENMOVCX,COUNTADDDIST,FIVEDIST=WO
本文标题:第四章汇编语言程序设计(1)
链接地址:https://www.777doc.com/doc-3356616 .html