第4章 汇编语言程序设计

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

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

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

资源描述

2020/2/26第四章汇编语言程序设计1of189第4章汇编语言程序设计4-0汇编语言介绍4-1汇编语言程序格式4-2MASM中的表达式4-3伪指令语句4-4DOS和BIOS中断调用4-5程序设计方法2020/2/26第四章汇编语言程序设计2of189汇编语言介绍汇编语言是利用指令的助记符、符号地址、标号来编写的语言,它是机器语言的符号表示,是较低级的语言。利用汇编语言编写的程序称为源程序,指令系统中的每条指令都是构成源程序的基本语句。但机器不能识别源程序,要通过汇编程序翻译成二进制代码的目标程序,然后由连接程序将目标文件与库文件相连,最后得到可执行的程序,才可在机器上直接运行。汇编语言面向机器的程序设计语言不同类型的CPU,其汇编指令也不尽相同。对机器语言的符号化描述汇编语言程序用汇编语言编写的程序较机器语言直观、易懂、便于交流和维护不能直接被计算机识别并运行2020/2/26第四章汇编语言程序设计3of189汇编程序将用户编写的汇编语言(源)程序转换为机器代码的系统工具程序。汇编利用汇编程序将汇编语言源程序翻译成机器代码的过程。EDIT*.ASMMASM*.OBJLINK*.EXE编辑源程序汇编浮动目标程序连接可执行程序2020/2/26第四章汇编语言程序设计4of189汇编语言特点:面向机器,与硬件紧密相关。编制的程序简洁,高效,节省内存,运行快。两种编译程序和连接程序:1、MicroSoft公司的MASM.EXE和LINK.EXE。2、Borland公司的TASM.EXE和TLINK.EXE。2020/2/26第四章汇编语言程序设计5of1894-1汇编语言程序格式一个汇编语言程序可由若干个段组成每个段均以SEGMENT开始以ENDS结束,并赋予段名区分不同段;源程序中至少有一个代码段,数据也可放在代码段,堆栈段若不定义,由计算机自动分配;段名可自己定义,用字母和数字组成;计算机识别不同段由段分配伪指令ASSUME来完成,格式为:ASSUMECS:段名,DS:段名,SS:段名,ES:段名主程序的开始要设置每个段的地址,代码段的地址不能人为设置,由计算机分配每个段可以包含若干语句而语句又可以是指令语句或伪指令语句两种如程序中用到的ASSUME,DB,SEGMENT…ENDS等为伪指令语句每条语句可由标识符、保留字、表达式等组成2020/2/26第四章汇编语言程序设计6of189汇编语言程序格式:例4-1在屏幕上显示并打印字符串“ThisIsasampleprogram.”DATASEGMENT;数据段DA1DB‘ThisIsasampleprogram.’DB0DH,0AH,‘$’DATAENDSSTACKSEGMENTST1DB100DUP(?)STACKENDSCODESEGMENT;代码段ASSUMECS:CODE,DS:DATA,SS:STACKMAINPROCFARSTART:MOVAX,STACK;送堆栈段段地址MOVSS,AX2020/2/26第四章汇编语言程序设计7of189PUSHDS;返回DOS用MOVAX,0PUSHAXMOVAX,DATA;送数据段段地址MOVDS,AXMOVAH,9;DOS9号功能调用,显示字符串MOVDX,OFFSETDA1INT21HRETMAINENDPCODEENDSENDSTART2020/2/26第四章汇编语言程序设计8of189一、指令性语句与机器指令相对应,汇编程序可将它翻译成目标代码。语句格式:标号∶指令助记符操作数,操作数;注释标号:符号地址,后跟“∶”,使用英文大小写字母阿拉伯字母和特殊字符,第一个非数字,≦31个,可省略,经常作为转移指令的一个操作数,用以表示转移的地址。助记符:与指令对应,指出指令的操作类型,汇编程序将其翻译成机器指令,是语句中的关键字,不可省略。操作数:参加运算的数据,根据指令要求可有一个或多个操作数,也可以没有;操作数可以是常数、变量、标号、寄存器名或表达式。注释:说明一指令或程序功能。可省略。用“;”隔离。例:Start:MOVAX,BX2020/2/26第四章汇编语言程序设计9of189二、伪指令语句无对应的机器指令,汇编时对伪指令进行处理,可完成数据定义,存储区分配,段定义,段分配,指示程序结束等功能。语句格式:名字伪指令指示符操作数,操作数;注释名字:是给伪指令取的名称,用符号地址表示,名字后不允许带冒号“:”,可省略;通常为变量名、段名、过程名、符号名等。指示符:汇编程序MASM规定的符号,常用的有变量定义语句,符号定义语句,段定义语句,段分配语句,结构定义语句,过程定义语句等。操作数:按伪指令要求可有可无,可以是常数、变量、字符串、表达式等。注释:功能和使用与指令性语句相同。2020/2/26第四章汇编语言程序设计10of189三、数据项汇编语言中使用的操作数,可以是常数、寄存器、存储器、变量、标号或表达式,其中常数、变量和标号是三种基本数据项。1.常数二进制(B)、八进制(Q或O)、十进制(D)、十六进制(H)、ASCll码字符串(用单引号‘abcd’)。2.变量常指存放在M中的数值,程序运行中可修改。三个属性:段值(SEGMENT):变量所在段的段基址。段偏移地址(OFFSET):变量地址与所在段首地址之间的地址偏移字节数。类型(TYPE):变量中每个元素包含的字节数,有字节变量(BYTE)、字变量(WORD)及双字变量(DWORD)等。2020/2/26第四章汇编语言程序设计11of1893.标号指令语句的地址的符号表示,可作为JMP指令和调用指令CALL的目标操作数,以确定程序转向的目标地址。属性:段值(SEGMENT)标号所在段的段基址段内偏移地址(OFFSET)标号地址与所在段的段首址之间的偏移地址字节数类型(TYPE)指转移指令中标号可转移的距离。近标号(NEAR),远标号(FAR)。NEAR—指针长度2字节FAR—指针长度4字节2020/2/26第四章汇编语言程序设计12of1894-2MASM中的表达式运算对象运算符表达式汇编时运算结果作为语句中操作数运算对象:常数、变量、标号运算结果:常数或存储器地址(变量或标号)8086汇编语言中的运算符算术运算符逻辑运算符关系运算符分析运算符综合运算符+ANDEQSEG(求段基址)PTR-ORNEOFFSET(求偏移量)THIS*XORLTTYPE(求变量的类型)SHORT/NOTGTSIZE(求字节数)HIGHMODLELENGTH(求变量长)LOWSHLGESHR2020/2/26第四章汇编语言程序设计13of189一算术运算符所有的算术运算符均可以对数据进行运算,运算对象与运算结果都是整数。若对地址运算,通常是在标号上加/减某一个数字量,对地址乘是没有意义的。例4-3源程序指令格式如下:DAEQU300MOVAX,DA-80MOVBX,DAMOD100MOVCX,DA/100MOVDH,01100100BSHR2汇编时计算表达式形成指令为DAEQU300MOVAX,220MOVBX,0MOVCX,3MOVDH,19H2020/2/26第四章汇编语言程序设计14of189二逻辑运算符逻辑运算符是按位运算的。只能对常数进行运算,得到结果也是常数。逻辑运算符与8086指令系统中的指令助记符AND、OR、NOT、XOR符号完全相同,但二者是不会混淆的。MASM的运算在汇编过程中进行。例:ANDDX,PORTAND0FEH逻辑运算符在汇编过程中进行计算指令助记符在程序执行时运算2020/2/26第四章汇编语言程序设计15of189三关系运算符所连接两操作数必为两数据或同一段内的两个存储单元的地址运算结果:真—0FFFFH,假—0000H常与逻辑运算符组合使用例4-5MOVAX,10HGT16ADDBL,6EQ0110BMOVCX,((PORTLT5)AND100)OR((PORTGE5)AND200)汇编时形成指令为:MOVAX,0MOVBL,0FFHMOVCX,100;PORT5时2020/2/26第四章汇编语言程序设计16of189四数值返回运算符(分析运算符)操作符号表达式表达式含义SEGSEG变量或标号取出变量或标号的段基址OFFSETOFFSET变量或标号取出变量或标号的偏移地址TYPETYPE变量或标号取出变量的类型属性或标号的距离属性LENGTHLENGTH变量变量中使用DUP时返回变量包含的单元数,其它变量返回1SIZESIZE变量返回变量包含的总字节数SIZE=LENGTH*TYPE2020/2/26第四章汇编语言程序设计17of189类型返回值变量DB1DW2DD4DQ8标号NEAR-1[0FFH]FAR-2[0FEH]表4-2TYPE运算符返回值2020/2/26第四章汇编语言程序设计18of189例:M1DW100DUP(?)M2DW1,2,3M3DB‘ABCD’L1:MOVAH,TYPEM1MOVAL,TYPEM3MOVBH,TYPEL1MOVCX,LENGTHM1MOVBL,LENGTHM2MOVCX,SIZEM1MOVBL,SIZEM2MOVAL,SIZEM3汇编时形成指令:MOVAH,2MOVAL,1MOVBH,0FFHMOVCX,100MOVBL,1MOVCX,200MOVBL,2MOVAL,12020/2/26第四章汇编语言程序设计19of189五修改属性运算符(综合或合成运算符)包含段操作符,PTR,THIS,HIGH,LOW,SHORT6种,可以在程序运行过程中,通过修改属性运算符来修改变量或标号的属性,包括段属性、偏移地址属性、类型属性等。1.段操作符段前缀:变量或地址表达式表示某个变量或地址被修改到哪个段寄存器提供的段基址中如:MOVAX,ES:[BX]2020/2/26第四章汇编语言程序设计20of1892.PTR类型/距离PTR变量或标号功能:将PTR左边的类型属性赋给右边的变量或标号。•PTR本身并不分配存储单元,给已分配的存储单元赋予新的属性,以保证运算时操作数类型的匹配•常与类型BYTE、WORD、NEAR、FAR等连用。例:DATA1DB10H,20H,30H;数据定义DATA2DW4023H,0A845H……MOVBX,WORDPTRDATA1;2010H传送到BXMOVAL,BYTEPTRDATA2;23H传送到ALMOVWORDPTR[BX],10H;[BX],[BX+1]←0010H2020/2/26第四章汇编语言程序设计21of1893.THIS变量/标号EQUTHIS类型/距离功能:将EQUTHIS右边的类型/距离属性,赋给左边的变量/标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同。例:MY_BYTEEQUTHISBYTEMY_WORDDW1122H……MOVAL,MY_BYTE;将22H传送给寄存器ALMOVBX,MY_WORD;将1122H传送给寄存器BX两个变量偏移地址值相同,区别在于一个变量为字节型,另一个为字型。2020/2/26第四章汇编语言程序设计22of189例:THIS操作符对于建立FAR属性是方便的STARTEQUTHISFARMOVCX,100赋予传送指令(MOV)有一个FAR属性的地址START,允许其他段的转移指令(JMP)直接转移到START.2020/2/26第四章汇编语言程序设计23of1894.SHORT格式:JMPSHORT标号功能:指定转移的距离属性为短,实际转移范围为-128~+127字节。例:JMPSHORTNEAR_LABEL……NEAR_LABEL:……2020/2/26第四章汇编语言程序设计24of1895.HIGH和LOW分离字节运算符HIGH——分离高字节LOW——分离低字节例K1EQU0ABCDHK2EQU1234HMOVAH,HIGHK1;AH←0ABHMOVBL,LOWK2;BL←34H2020/2/26第四章汇编语言程序设计25of189六其它运算符1.圆括号()

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

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

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

×
保存成功