武汉理工通信原理课件第六章汇编语言程序设计

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

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

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

资源描述

第六章汇编语言程序设计一.汇编语言语法二.汇编语言程序设计三.汇编程序及上机设计四.DOS及BIOS功能调用五.任务切换与混合语言编程6.1汇编语言语法一、计算机程序设计语言的演变1)机器语言:直接用机器指令来编制计算机程序的方法2)汇编语言:可以用助记符来表示指令的操作和操作数,也可以用标号和符号来代替地址、常量和变量。3)高级语言:更接近于人们的自然语言和习惯的教学语言来描述算法的执行过程,从而使编写的过程更加直观和简练。最近,计算机语言的另一个发展方向是混合语言程序设计。混合语言并不是一种新出现的自成系统的新型语言,它采用两种或两种以上的编程语言加以组合编程,是一种程序接口技术,实现不同语言程序之间的相互调用。二、为什么要用汇编语言编写程序1)汇编语言非常接近机器语言程序,通过编制汇编语言程序,可以清楚地了解计算机的工作过程。2)现在的微机系统中,底层的一些功能仍然靠汇编语言程序来实现。3)汇编语言程序的效率通常高于高级语言程序。三、汇编语言的语句种类及其格式1、指令语句:每一条指令语句在汇编时都要产生一个可供机器执行的机器目标代码,所以这种语言又叫可执行语句。指令语句的可是如下:标号:(前缀指令)助记符(操作数);(注释)1)标号。这是一个任选字段。标号是指令语句的标识符,在语句之首,必须以“:”作为结束符。对标号的规定:①由字符A~Z,a~z,0~9及符号@、$、下划线_等组成,最长31个字符,超出部分忽略。②不能用数字打头,以免与十六进制数相混。③不使用汇编程序中的保留字。(如指令的助记符等)④对定义的符号不区分大小写。2)指令助记符。这是为指令操作码规定的符号。3)操作数。可以根据指令的功能的需要,可不带操作数,带一个操作数或两个操作数,若有两个操作数时,中间用“,”号分开。操作数给出参与操作的数或数所在的地方。操作数可以是常数、寄存器、存储器操作数、标号名、过程名或表达式等。4)注释。注释是为了方便程序员阅读程序而加的说明。四、常数、标号、变量及表达式1、常数:指令中出现的那些固定值和字符串常数两类。2、标号:用符号表示的地址,称为符号地址,用以指示此指令语句所在的地址。3、变量:变量是与一个数据项的第一字节相对应的标识符,它表示该数据第一字节在现行段中的偏移量。4、表达式:表达式由操作数和运算符组成。常数给出具体的数据。可以是数字常量或字符常量。◢◢数字默认十进制,也可加D表示十进制数。如1234D,1234◢◢数字后加B表示二进制数。如1010B◢◢数字后加H表示十六进制数。如1234H◢◢字符常量,用单引号表示。如‘1234’汇编时,用字符对应的ASCII表示。如31H,32H,33H,34H例data1DB12,34,56;十进制data2DB12H,34H,56H;十六进制MOVAL,‘G’;字符stringDB‘1234’;字符串A、B、C、D、E、F开头的十六进制数前面加0,与H结尾的标识符区别。如寄存器名AH、BH、CH、DH变量名abcdH等例movAL,0AHmovAL,AHmovBX,0abcdH标号标号是符号表示的地址,称为符号地址,标号具有段地址,偏移地址,和类型3个属性类型属性有NEAR和FAR类型变量变量的值在程序运行过程中可随时修改变量有3个属性:(1)段地址:变量所在段的段地址。(2)偏移地址:变量所在段的偏移地址。(3)类型:变量所占的字节数。变量名DB表达式定义字节变量变量名DW表达式定义字变量变量名DD表达式定义双字变量变量名DQ表达式定义长字变量(8个字节)变量名DT表达式定义十字节变量上述伪指令中表达式的形式:(1)一个或多个常数,或运算公式(结果为常数)当有多个常数时,两两之间用逗号分隔。从左到右由低地址向高地址顺序存储。(2)字符串用引号括住,长度不超过255。从左到右由低地址向高地址以ASCII码顺序存储。(3)问号?(通配符)仅留出用于存储数据的单元,但不改变单元中原有的数据。(4)DUP(重复方式)重复次数DUP(表达式);将表达式重复预置。例:HUADB2DUP(‘HUA’,3DUP(0))该指令将数据块(‘HUA’,3DUP(0))重复2次,而数据块(‘HUA’,3DUP(0))以字符串HUA开始,接下来是3个0。在内存中的存储情况如图所示:首单元48H55H41H00H00H00H48H55H41H00H00H00HDUP可以重叠使用,相当于大循环中嵌套小循环(5)地址表达式(仅用于DW或DD)使用DW时:地址表达式中的变量名称表示变量第一个单元的偏移地址标号表示指令的第一个字节的偏移地址。使用DD时:低两字节为偏移地址,高两字节为段地址。地址表达式中的变量或标号可与常数相加减,结果仍为偏移地址,常数表示位移量:+表示向高地址方向移动;-表示向低地址方向移动。变量与标号之间不能相加,但可以相减,其结果为一常数,表示两者之间的距离。例:P163DATA1DB20HDATA2DW0204H,100HDATA3DB(-1*3),(15/3)DATA4DD12345HDATA5DB‘0123’DATA6DW‘AB’,’C’,’D’DATA7DB?DATA8DD?DATA9DB5DUP(00)DATA10DW3DUP(?)表达式由常量、标号(标识符)、变量和一些操作符构成。汇编程序对表达式进行运算后,得到一个确定的数值,再把这个数值汇编到指令中。据表达式所表示的内容分:数字表达式、地址表达式。表达式是指令或伪操作的操作数;表达式中的操作符由汇编程序完成。例MOVAX,12-4;MOVAX,8;数字表达式LEABX,[string+4];地址表达式表达式中的操作符有以下几类:(1)算术运算符(+、-、*、/、MOD)(2)逻辑运算符(AND、OR、NOT、XOR)(3)关系运算符(EQ、NE、GT、GE、LT、LE)真:FFFFH;假:0(4)分析运算符(SEG、OFFSET、TYPE、SIZE、LENGTH)(5)综合运算符(PTR,THIS)(6)地址记数器($)例:(1)算术运算符(+、-、*、/、MOD(取余数))MOVAX,6*8←MOVAX,48AMODB;用A除以B,保留运算的余数。要求A、B均为正整数。(2)逻辑运算符(AND、OR、NOT、XOR)MOVAX,80hOR70h←MOVAX,0F0h逻辑运算符可以嵌套、组合使用如P165例MOVBX,((PORTLT5)AND20)OR((PORTGE5)AND30)思考:若要求当PORT的值大于5而小于10时,为BX赋值40应如何编写指令?(3)关系运算符(EQ、NE、GT、GE、LT、LE)真:FFFFH;假:0MOVAX,1GE2←MOVAX,0(4)分析运算符:TYPE,LENGTH,SIZE,OFFSET,SEG5种。把一些特征或存贮器地址的一部分作为数值回送。①类型运算符TYPE格式:TYPEvariable变量或label标号回送该变量以字节数表示的类型(DB为1,DW为2,DD为4,DQ为8,DT为10)回送标号类型数值(NEAR为1,FAR为2)例:ARRAYDW1,2,3ADDSI,TYPEARRAY汇编程序其形式:ADDSI,2②LENGTH格式:LENGTHvariable对于变量中使用DUP,汇编回送分配给变量单元数,其他情况回送1。例:FESSDW100DUP(0)对于MOVCX,LENGTHFEES汇编程序将其形式:MOVCX,100其他情况:例:ARRAYDW1,2,3对于指令MOVCX,LENGTHARRAY汇编程序将使其形式为:MOVCX,1例:TABLEDB‘ABCD’对于指令MOVCX,LENGTHTABLE汇编程序使其形式为:MOVCX,1③SIZE格式:SIZEvariable回送分配给该变量的字节数LENGTH*TYPE例:FEESDW100DUP(0)MOVCX,SIZEFEES将形成:MOVCX,200例:TABLEDB‘ABCD’MOVCX,SIZETABLE将形成:MOVCX,1例:ARRAYDW1,2,3MOVCX,SIZEARRAY形成:MOVCX,2LENGTH*TYPE=2④OFFSET格式:OFFSETvariable变量或label标号取出变量名或标号所在段的偏移地址例MOVBX,OFFSETyy⑤SEG格式:SEGvariable变量或label标号取出变量名或标号所在段的段地址例MOVAX,SEGyybbSEGMENTyyDB6dup(?)bbENDSccSEGMENTASSUMECS:cc,DS:aa,ES:bbstart:CLDMOVAX,SEGyyMOVES,AXMOVDI,OFFSETyyMOVCX,6…….ccENDSENDstart小结:①TYPE变量的返回值是类型的字节数:DB为1,DW为2,DD为4,DQ为8,DT为10;②TYPE标号的返回值是:NEAR为1,FAR为2。③LENGTH变量返回:DUP分配的单元数,对于其他情况则返回1。④SIZE返回值是:LENGTH和TYPE值的乘积,即变量的字节数。注意:SEG、OFFSET只能对符号地址操作MOVAX,SEG[BX]MOVBX,OFFSET[SI](5)综合运算符(PTR,THIS)PTR用来对存贮单元规定类型格式:类型PTR表达式(或地址表达式)类型可为变量类型BYTE,WORD,DWORD或标号类型NEAR,FAR例:MOVBYTEPTRDATA3,ALMOVBYTEPTR[BX],10H例1将(AL)送DATA3对应的一个字节中,DATA3临时定义为字节变量,原先DATA3定义的字类型没有修改。例2是利用PTR算符明确类型不明确的地址表达式的类型。THIS用来规定所指变量或标号的类型属性或距离属性格式:THIS类型类型可为BYTE,WORD,DWORD或距离NEARFAR例XYZEQUTHISBYTE;将字节属性赋予XYZFOUTEQUFAR;将距离属性赋予FOUT(6)汇编地址计数器$用来标识汇编程序当前的位置例在数据段定义的常量和变量如下W1DWB3符号常量C1的值等于变量B1DB’ABC’W2的个数W2DW-4,1234HC1EQU($-W2)/2…….6.1.5伪指令1)方式伪指令2)赋植伪指令EQU3)定义变量伪指令4)定义存储单元类型的伪指令BYTE、WORDDWORD5)LABEL定义标号名称和属性伪指令6)SEG和OFFEST取段和偏移地址伪指令7)TYPE、SIZE和LENGTH存储器地址操作数类型,字节单元数8)段定义伪指令9)过程定义伪指令PROC,ENDP,NEAR,FAR10)定义结构的伪指令STRUC/ENDS11)IFELSEENDIF条件汇编伪指令12)逻辑运算伪指令AND、OR、XOR、NOT13)访问外部标识符的伪指令EXTRN、PUBLIC14)源程序结束伪指令END15)常用伪指令表(p177)一)赋植伪指令EQU格式符号名EQU需等值的表达式作用是用符号名等值指定的表达式,符号名称为符号常量•其中:•表达式可以是任何有效的操作数•汇编时用语句中的表达式代替程序中符号所在的地方。应用:•1.定义符号常量,方便修改程序。•2.某表达式多次出现时,用等值伪操作可以方便编程。•3。汇编时不给符号常量分配内存(二)、变量定义伪指令格式变量名类型助记符操作数[,操作数,...]变量具有3个属性,段地址,偏移地址,类型▲用来定义程序中所用的内存操作数。其中变量名指示内存操作数的地址(段地址,偏移地址)类型助记符指示内存操作数的类型(字节、字、双字等)操作数指示内存操作数的内容或为地址表达式▲汇编程序将定义的操作数,按其类型分配内存单元数,顺序存入变量名指向的内存单元中。▲常用的类型助记符有:DB指示其后的操作数为字节类型DW指示其后的操作数为字类型DD指示其后的操作数为双字类型定义赋初值(常数)的变量dataSEGMENTxxDB1,-1,0fcHyyDW1,-1,0fcHzzDD1,-1,0f

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

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

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

×
保存成功