微机原理汇编语言程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

微机原理与接口技术第四章汇编语言程序设计本章内容4.1概述4.2汇编语言的格式与语法4.3DOS与BIOS中断调用4.4汇编语言程序设计和上机过程4.1概述-程序设计语言机器语言:每种CPU都有自己独立的一套指令系统,其能直接理解和执行的是二进制机器码形式,这种二进制编码格式语言称为机器语言。特点是占内存少、执行速度快,但难以记忆、容易出错,实际中很少使用。例:89H,DCH汇编语言:用指令的助记符来表示二进制机器码的语言称为汇编语言,即是机器语言的符号表示。它是一种面向机器的程序设计语言,通常是为特定计算机或计算机系列专门设计的。特点是允许直接调用CPU内部资源,代码精简,占内存少,执行速度快,但通用性差,编写、调试周期长。常用来编制系统软件、实时控制程序、实时通信程序及接口的驱动程序等。例:MOVSP,BX高级语言:是面向过程的语言(如:BASIC语言、C语言等),不依赖于具体的计算机结构和指令系统。特点是通用性强,可移植,但目标程序长,执行速度慢。4.1概述-汇编程序用汇编语言编写的程序不能由机器直接执行,而必须经汇编程序(Assembler)翻译成机器语言程序常使用的汇编程序是Microsoft公司的宏汇编MASM,它可以将源程序翻译成对应的目标程序,并且:检查语句语法自动分配存储区将其他进制转换为二进制数计算表达式的值展开宏命令4.2汇编语言的格式与语法4.2.1源程序的结构4.2.2语句的格式与构成元素4.2.3语句的操作数4.2.3.1常量4.2.3.2变量和标号4.2.3.3表达式4.2.4伪指令4.2.5宏指令4.2.1源程序的结构汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由三种逻辑段组成:数据段、附加段——定义和存放数据、变量堆栈段——堆栈区域代码段——存放程序指令4.2.1源程序的结构NAMEPROGRAMMOVAX,EXTRASTACKSEGMENTSTACKMOVES,AXSTADB100DUP(?)……STACKENDSMOVAX,OFFSETSDAT;----------------------------------------------CALLP1DATASEGMENT……SDATDB1,2,3,4,5MOVAH,4CHDATAENDSINT21H;-----------------------------------------------MAINENDPEXTRASEGMENT;------------------------------------------------DDATDB5DUP(?)P1PROCEXTRAENDS……;------------------------------------------------RETCODESEGMENTP1ENDPASSUMECS:CODE,SS:STACK;-----------------------------------------------ASSUMEDS:DATA,ES:EXTRACODEENDSMAINPROCFAR;----------------------------------------------MOVAX,DATAENDMAINMOVDS,AX堆栈段数据段扩展段代码段代码段4.2.1语句的格式汇编语言的语句有两种:指令性语句:由8086指令构成的语句指示性语句:由伪指令构成的语句指令性语句由CPU执行,每一条指令性语句都有一条机器码指令与其对应,指令性语句汇编时生成机器码。指示性语句由汇编程序执行,它指示汇编程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无机器码指令与其相对应,在汇编时不生成机器码。标号:指令的符号地址,用来代表指令在存储器中的地址符号:段、过程、变量的名字,用来代表它们在存储器中的地址指令助记符:8086指令助记符、伪指令助记符操作数:即指令的操作对象对指令性语句:0,1,2个对指示性语句:根据需要而定操作数之间以逗号分隔操作数可以由标号、常量、变量、表达式、寄存器操作数和存储器操作数等构成例如:AX,[DI+BX+10],DATA,200,16*8+TABLE,等等4.2.2语句的构成元素注释:以分号开头,可放在指令后,也可单独一行。注意注释的写法,要写指令(或程序段)在程序中的作用,而不要写指令的操作。例如:以下为同一条指令写的注释1)MOVCX,100;传送100到CX2)MOVCX,100;循环计数器置初值显然,第二种写法要比第一种写法要好4.2.2语句的构成元素4.2.3语句的操作数4.2.3.1常量4.2.3.2变量和标号4.2.3.3表达式4.2.3.1常量常量操作数:数值常数:11001000B,0FA21H,329D(329)字符常数:‘ABCD’(41H42H43H44H)例:MOVAX,0FA21HVARDB329STRDB‘ABCD’变量:指存储器存储单元中的数据,数据运行时可改变变量名:是存储单元的符号地址变量在程序中作为存储器操作数被引用变量有三个属性:段地址:变量所在段的段地址偏移地址:变量所在存储单元的偏移地址类型:有BYTE、WORD和DWORD等例:MOVAX,VARPUSHVAR4.2.3.2变量与标号-变量标号:指令所在存储单元的符号地址标号的三个属性:段地址:即标号所在段的段地址;偏移量:标号所代表存储单元的段内偏移地址;类型:NEAR或FAR:NEAR:段内转移或段内调用FAR:段间转移或段间调用标号通常作为转移指令的转移地址JMPlabelJNZnon_zero4.2.3.2变量与标号-标号组成:A-Z(不分大小写),0-9,?@._$不能以数字开头,句号(.)只能作为首字符长度小于31个字符不能与保留字(指令助记符、伪指令、预定义符号等)重名不能重复定义例如:正确的:LP1,AGAIN,NEXT,_GO,OK_1错误的:4M,LOOP,AAA,#HELP,+ONE4.2.3.2变量与标号-命名规则4.2.3.3表达式表达式由标号、常量、变量等加上必要的运算符构成有数字表达式和地址表达式两种汇编时按优先规则对表达式进行计算,计算出具体的数值或地址,运行时不能改变表达式中的运算符包括:算术、逻辑、关系、分析以及属性运算符等算术运算符包括:加:+,减:-,乘:*,除:/,取模:MOD例:MOVAX,4*1024汇编后的形式为:MOVAX,4096逻辑运算符包括:与:AND、或:OR、异或:XOR、非:NOT例:MOVCL,36HAND0FH经汇编后:MOVCL,06H逻辑运算符只能用于数字表达式中。注意,不要把逻辑运算符与逻辑运算指令混淆:例:ANDAX,3FC0HAND0FF00H汇编后源操作数被翻译为:3F00H,所以上述指令与以下指令等价:ANDAX,3F00H4.2.3.3表达式—算术运算符分析运算符包括:SEG、OFFSETSEG:取变量/标号的段地址OFFSET:取变量/标号的偏移地址例:VARDB12HMOVBX,OFFSETVAR;取变量VAR的偏移地址MOVAX,SEGVAR;取变量VAR的段地址SEG、OFFSET运算符在汇编过程取相应地址4.2.3.3表达式—分析运算符4.2.3.3表达式—属性运算符PTR属性运算符PTR用来指定地址操作数的类型格式:类型PTR地址操作数类型∈{BYTE,WORD,DWORD,NEAR,FAR}BYTE、WORD、DWORD用于描述数据存储单元(变量)地址例:MOVWORDPTR[BX],03HNEAR、FAR用于描述转移、调用的目的地址例:JMPFARPTRLABEL1例:MOV[DI],0;类型不定MOVBYTEPTR[DI],0;字节类型MOVWORDPTR[DI],0;字类型4.2.3.3表达式—属性运算符PTRDI48H45H00H45H00H00HBYTEPTRWORDPTRDIDI4.2.3.3表达式—属性运算符PTRPTR也可用来进行强制类型转换例:VARDW1234H;VAR定义为字类型MOVAX,VAR1;合法MOVAL,VAR1;非法MOVAL,BYTEPTRVAR1;合法4.2汇编语言的格式与语法4.2.1源程序的结构4.2.2语句的格式与构成元素4.2.3语句的操作数4.2.3.1常量4.2.3.2变量和标号4.2.3.3表达式4.2.4伪指令4.2.5宏指令4.2.4伪指令伪指令由汇编程序执行的指令,它本身不被汇编成机器指令。常用的伪指令有:数据定义伪指令符号定义伪指令段定义伪指令过程定义伪指令程序模块定义伪指令定义模块连接标号和变量的伪指令4.2.4伪指令—数据定义伪指令用于对程序中使用的变量进行定义通过变量定义指明变量的类型,并为其分配存储单元。数据定义伪指令的格式为:变量名数据定义伪指令操作数,操作数,…VARDW1234H常用的数据定义伪指令有如下几种:DB定义字节DW定义字DD定义双字DQ定义4字型变量(占8字节存储空间)DT定义10字节变量(表示BCD码,或用于浮点运算)数据定义伪指令中的操作数可以是常数、变量或表达式DATA1_BDB10DATA2_BDB5DATA3_BDB10HDATA1_WDW100HDATA2_WDW-4DATA_DDD0FFFBH汇编后的内存分配情况如右图所示。Q05H10H00H01HFCHFFHFBHFFH00H00H0AHDATA_BDATA_WDATA_D10510H100H-40FFFBH数据定义伪指令-例1操作数可以是字符串,使用DB,DW例STR_DBDB‘HELLO’STR_DWDW‘AB’,‘CD’汇编后的情况如图:注意下面两个定义的不同之处:STR_DBDB‘AB’;41H在低字节,42H在高字节STR_DWDW‘AB’;42H在低字节,41H在高字节STR_DB‘H’‘E’‘L’‘L’‘O’48H45H4CH4CH4FH数据定义伪指令-例2STR_DB‘A’41H42H42H41HSTR_DW‘B’‘B’‘A’?用来分配存储空间,但不置初值例1:RSVDB?复制操作符DUP:重复的数据可以使用复制操作符DUP,如上面RSV亦可写成:例2:STRDB10DUP(‘A’)DATADB10DUP(30H,9DUP(20H))若操作数中若使用$,则表示的是地址计数器的当前值。例3BUFDW0A32H,$,$+3数据元素的初值:ADDR+1,(ADDR+2)+34.2.4伪指令—数据定义伪指令:?、DUP、$例:TABLEDB10DUP(?)BUFFERDWTABLE,$+3设TABLE的偏移地址为0080H,则汇编后如下图所示:BUFFER0080H80HTABLE008AH008BH008CH008DH...8FH00H00H0089H10Bytes数据定义伪指令-例34.2.4伪指令—符号定义伪指令:EQU将一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示类似于C语言中的#define汇编时,符号被符号代表的内容替换例:COUNTEQUCXTENEQU10MOVCOUNT,TEN汇编后:MOVCX,104.2.4伪指令—段定义伪指令汇编语言程序是按段来组织程序和数据的,段的划分与存储器的物理段相对应。汇编语言程序中的段称为逻辑段,汇编连接后被映射到相应的物理段中。逻辑段共分为:代码段、堆栈段、数据段和附加段段定义伪指令:SEGMENT、ENDS、ASSUME、ORG定义一个段的基本格式:段名SEGMENT[定位类型][组合方式][类别]汇编语言语句段名ENDSSEGMENT和ENDS成对出现,二者前面的段名应一致伪指令SEGMENT说明了一个段的开

1 / 63
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功