第汇编语言程序设计_第1页
第汇编语言程序设计_第2页
第汇编语言程序设计_第3页
第汇编语言程序设计_第4页
第汇编语言程序设计_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会计学1第汇编语言程序设计4.1汇编语言概述什么是汇编语言汇编语言程序的特点汇编程序MASM的功能汇编语言程序框架第1页/共87页什么是汇编语言汇编语言(AssemblyLanguage)是利用指令的助记符、符号地址、标号来编写的语言,它是机器语言的符号表示,是较低级的语言。汇编语言程序:用汇编语言编写的程序称为汇编语言程序,也称源程序,指令系统中的每条指令都是构成源程序的基本语句。第2页/共87页汇编语言程序的特点可读性差能够直接控制硬件运行速度快节省内存第3页/共87页汇编程序MASM的功能汇编程序即微软提供的MASM宏汇编程序,它具有如下的功能:检测出源程序中的语法错误,并给出出错信息,包括出错的行和错误类型;处理伪操作;产生源程序的目标程序(obj文件),并可给出列表文件(lst文件)和crf文件;展开宏指令。第4页/共87页汇编语言程序格式指令性语句伪指令语句数据项第5页/共87页指令性语句指令性语句与机器指令相对应,汇编程序将它翻译成目标代码。指令性语句格式:[标号:]指令助记符操作数1,操作数2[;注释]第6页/共87页标号标号表示本指令的符号地址,后面必须跟冒号“:”标号使用的字符为字母、数字或某些特殊字母(@、_、?),第一个字符不能为数字,最大有效长度为31个字符标号可以省略标号经常作为转移指令的一个操作数,用来表示转移的地址第7页/共87页指令助记符指令助记符表示该语句的指令名称的代表符号指令助记符指出指令的操作类型,汇编程序将其翻译成机器指令指令助记符是不能省略的第8页/共87页操作数操作数表示参加本指令运算的数据,根据指令要求可以有一个或多个操作数,有的指令不需要操作数,多个操作数之间用逗号“,”隔开。操作数与指令助记符之间用空格隔开。操作数可以是常数、变量、标号、寄存器名和表达式第9页/共87页注释注释用来说明一条指令或一段程序的功能注释可以省略注释前必须加上分号“;”汇编程序对;后面的内容不汇编使用注释使程序容易读懂第10页/共87页伪指令语句伪指令语句没有对应的机器指令,汇编程序可以对不同的伪指令作不同的处理,常见的有:数据定义,存储区分配,段定义,段分配,过程定义,宏定义,指示程序结束等伪指令语句格式:[名字]伪指令指示符操作数1,操作数2[;注释]第11页/共87页名字名字是给伪指令取的名称,它用符号地址表示,后面不允许带冒号。

名字可以省略伪指令中的名字可以是变量名、段名、过程名、符号名等第12页/共87页伪指令指示符伪指令指示符是汇编程序MASM规定的符号,常用的有:变量定义语句DB、DW符号定义语句EQU、=段定义语句SEGMENT和ENDS段分配语句ASSUME过程定义语句PROC和ENDP汇编程序结束END第13页/共87页操作数操作数由伪指令具体要求的,有的伪指令不带操作数,有的伪指令可以带多个操作数,多个操作数用逗号隔开。操作数可以是常数、变量、字符串和表达式,但不能为寄存器。第14页/共87页注释注释的功能和使用与指令性语句相同第15页/共87页数据项汇编语言中使用的操作数可以是常数、寄存器、存储器、变量、标号或表达式其中常量、变量和标号是三种基本数据项第16页/共87页常量常量的值固定,不能改变,没有属性,是一个确定的数用二进制表示时,以B结束;以八进制表示时,以O或Q结束;用十进制表示,以D结束,D也可以省略,也可以用科学记数法;用十六进制表示,以H结束,当十六进制数以“A~E”的开头时,前面必须加0常量也可以是字符串,字符串用单引号括起来,在内存中以字符的ASCII码存放。第17页/共87页变量变量通常指存放在存储单元中的值,在程序的运行过程中,其值可以改变。变量具有以下三个属性:段值(SEGMENT):指变量所在段的段基地址段内偏移地址(OFFSET):指变量地址与所在段的段基地址之间的地址偏移字节数类型(TYPE):指变量中每个元素所包含的字节数,BYTE1WORD2DWORD4第18页/共87页标号标号是可执行指令语句的地址的符号表示,它可以作为转移指令的目标操作数,以确定程序转向的目标地址标号具有三个属性:段值(SEGMENT):指标号所在段的段基地址段内偏移地址(OFFSET):指标号与所在段的段基地址之间的地址偏移字节数类型(TYPE):指标号在转移指令中可转移的距离。NEAR-1FAR-2,隐含的为NEAR属性第19页/共87页MASM中的表达式表达式由运算对象和运算符组成,在汇编时由汇编程序对它进行运算,运算结果作为一个语句中的操作数。运算对象可以是常数、变量和标号运算结果可以是一个常数,也可以是一个存储器的地址运算符:在MASM中使用了6类运算符第20页/共87页MASM中的运算符算术运算符:+、-、*、/、MOD、SHL、SHR逻辑运算符:AND、OR、XOR、NOT关系操作符:EQ、NE、LT、GT、LE、GE数值回送操作符:TYPE、LENGTH、SIZE、OFFSET、SEG修改属性操作符:段操作符、PTR、THIS、SHORT、HIGH和LOW其他运算符:圆括号()、方括号[]第21页/共87页算术运算符算术运算符包括+、-、*、/、MOD(取模)、SHL(左移)、SHR(右移)算术运算符均可以对数据进行运算,运算对象与运算结果都是整数。若对地址运算,通常是在标号上加/减某一个数字量,对地址乘没有意义第22页/共87页算术运算符举例见例4.2和4.3(说明书上例子P129)第23页/共87页逻辑运算符逻辑运算符包括AND(与)、OR(或)、NOT(非)、XOR(异或)逻辑运算符是按位运算的,只能对常数进行运算,运算结果也是常数注意:逻辑运算符与逻辑指令助记符的区别:逻辑运算符是在汇编过程中进行计算的;而逻辑指令助记符是在程序执行时进行运算的。第24页/共87页逻辑运算符举例见例4.4和4.5(说明书上例子P129)第25页/共87页关系运算符关系运算符包括EQ(相等)、NE(不相等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)关系运算符的两个操作数必须是数据,或是同一个段内的两个存储单元的地址。关系运算的结果是一个数值,若结果为真,输出全是1,即0FFH或0FFFFH;若结果为假,输出全是0关系运算符一般与逻辑运算符组合起来使用第26页/共87页关系运算符举例见例4.6(说明书上例子P130,纠正例子4.6)第27页/共87页数值回送操作符数值回送操作符也称为分析运算符数值回送操作符包括OFFSET、SEG、TYPE、LENGTH、SIZE,它们加在变量或标号前,返回运算对象的某个参数值,例如:偏移地址值、段基地址值、类型属性、变量包含的单元数等第28页/共87页OFFSET和SEGOFFSET格式:OFFSETvariable或label说明:回送变量或标号的偏移地址SEG格式:SEGvariable或label说明:回送变量或标号的段基地址第29页/共87页TYPE格式:TYPEexpression或label说明:如右表所示类型返回值变量DB1DW2DD4DQ8标号NEAR-1FAR-2第30页/共87页LENGTH格式:LENGTHvariable说明:对于变量中使用DUP的情况,汇编程序将回送分配该变量的单元数(而不是字节数),而对于其他情况则回送1第31页/共87页SIZE格式:SIZEvairable说明:回送分配该变量的字节数,是LENGTH和TYPE的乘积例子:4.64.74.84.94.10第32页/共87页修改属性操作符修改属性操作符也称为综合运算符修改属性操作符有段操作符、PTR、THIS、HIGH、LOW、SHORT,在程序的运行过程中,通过修改属性运算符来修改变量或标号的属性,包括段属性、偏移地址属性、类型属性等第33页/共87页段操作符格式:段前缀:变量或地址表达式说明:段前缀有段寄存器CS、DS、ES、SS后跟冒号,用来表示某个变量或地址被修改到哪个段寄存器提供的段基地址中第34页/共87页PTR格式:类型/距离PTR变量或标号说明:将PTR左边的类型属性赋给右边的变量或标号。PTR本身并不分配存储单元,仅给已分配的存储单元赋予新的属性,以保证运算时操作数的类型的匹配,常与类型BYTE、WORD、NEAR、FAR等连用第35页/共87页HIGH和LOW格式:HIGH/LOW变量或标号说明:HIGH和LOW称为字节分离运算符,对一个数或地址表达式,HIGH从中分离出高位字节,LOW分离出地位字节。例子:4.16P133第36页/共87页4.2伪指令语句第37页/共87页4.2伪指令语句变量定义和存储器分配伪操作标号赋值伪操作EQU、=段定义伪操作段分配伪操作ASSUME模块定义伪操作程序开始和结束伪操作地址计数器$第38页/共87页4.2.1变量定义和存储器分配伪操作格式:[Variable]MnemonicOprand,…,Oprand[;Comments]解释:Variable:变量,可有可无Mnemonic:助记符,DB,DW,DD,DQ…Oprand:操作数Comments:注释,可有可无第39页/共87页Oprand操作数操作数可以是常数,或表达式操作数也可以是字符串?操作数复制操作符dup用地址表达式定义变量第40页/共87页操作数可以是常数,或表达式写出下列变量在存储器中的存储状况:DA1DB10H,52HDA2DW1122H,34HDA3DD5*20H,0FFEEH第41页/共87页操作数是字符串写出下列变量在存储器中的存储状况:ONEDB‘HELLO’TWODB‘AB’THREEDW‘AB’第42页/共87页?操作数只分配存储空间,不存入具体的数如:VALDB?MDW0F55H,?第43页/共87页复制操作符dup格式:repeat_countdup(oprand,…,oprand)说明:repeat_count用来指定括号中的操作数的重复次数写出下列变量在存储器中存储状况:Onedb5dup(0)Twodw10dup(?)Threedb4dup(1,2dup(20h))第44页/共87页地址计数器$$符号用在数据定义的伪操作中,表示的是当前存储单元的地址写出array变量的存储状况Arraydw1,2,$+6,3,4,$+6第45页/共87页4.2.2表达式赋值语句1.赋值伪操作EQU格式:symbol_nameEQUexpression功能:用来给变量、标号、常数、指令或表达式等定义一个符号名,程序中用到EQU左边的symbol_name可以用右边的常数或表达式代替,但一经定义在同一程序模块中不能重复定义举例,p137例4-25第46页/共87页4.2.2表达式赋值语句2.等号“=”语句等号语句=与EQU语句具有相同的功能,EQU伪操作中的符号名symbol_name是不允许重复定义的,而=伪操作则允许重复定义举例:p138例4-26第47页/共87页4.2.3段定义伪操作格式:NameSEGMENT定位类型组合类型‘分类名’………NameENDS说明:定义一个逻辑段,SEGMENT和ENDS必须成对出现,定位类型、组合类型和分类名可以省略。第48页/共87页ASSUME伪操作格式:Assumecs:段名,ds:段名,es:段名,ss:段名指定某个段分配给哪个寄存器,它并不能把段地址存入段寄存器中,所以在代码段中,还必须把段地址装入相应的寄存器中。(提示140内容)如:

MOVAX,DATAMOVDS,AX

把数据段地址值装入DS寄存器中第49页/共87页举例:两个16位无符号数相乘编辑源代码定义数据段定义堆栈段定义代码段汇编连接用debug查看结果第50页/共87页4.2.4模块定义伪操作格式:Module_namePROC

Attribute…Module_nameENDP说明:其中Attribute表示过程的属性,FAR或NEAR,缺省为NEAR功能:定义一个过程,主程序可以用CALL指令调用第51页/共87页4.2.5程序开始和结束伪操作NAME格式:NAME程序名功能:为源程序目标模块赋名字;若源程序中省略NAME伪操作,汇编程序将源文件名作为目标模块的名字END格式:END标号名功能:标记汇编源程序结束,不可省略,放在源程序的最后一行,每个模块只有一个END,汇编程序到END语句就停止汇编第52页/共87页4.2.7ORG伪操作格式:orgconstant_expression说明:该伪操作可以使下一个字节的地址置为常数表达式constant_expression的值举例DatasegmentOrg100hA1db10h,20h,30hOrg200hA2dw3031h,3233hDataends第53页/共87页对准伪操作格式:EVEN功能:EVEN伪操作使下一语句的地址调整为偶地址。EVEN直接放在某一语句之前,汇编程序汇编时就会完成将地址调整在偶地址上例4.40P150第54页/共87页4.3DOS系统功能调用第55页/共87页4.3DOS系统功能调用系统功能调用是DOS为系统程序员及用户提供的一组常用的子程序第56页/共87页DOS系统功能调用的使用方法在AH寄存器中存入要调用功能的功能号根据调用功能的规定设置入口参数用INT21H指令转入子程序入口相应的子程序运行完后,可以按规定取得返回参数第57页/共87页1.键盘输入/输出的DOS系统功能调用功能号功能入口参数返回参数01H从键盘上输入一个字符无AL输入字符的ASCII码02H在屏幕上显示一个字符DL输出字符的ASCII码无09H显示字符串DS:DX串地址字符串以‘$’结束无0AH从键盘上输入一个字符串DS:DX缓冲区首地址(DS:DX)缓冲器最大字符数(DS:DX+1)实际输入的字符数第58页/共87页例:从键盘上输入一个字符从键盘上输入一个字符,并判断该字符的种类:数字、大写字母、小写字母和其他字母第59页/共87页例:在屏幕上显示一个字符在屏幕上显示字符‘@’通过键盘输入一个字符,并从屏幕上显示的他后续字符。显示回车换行第60页/共87页例:从键盘上输出一个字符串输出hellowworld!注意两点:(1)输出的字符串放到数据段中(2)字符串必须以’$’结束第61页/共87页例:从键盘上输入一个字符串输入hellowworld!注意两点:(1)预先定义输入缓冲区。(2)第一个缓冲区指出缓冲区的总大小,有用户直接指定(3)第二个是实际字符数目,系统自动设(4)从第三个字节开始接受字符,直到回车键结束。第62页/共87页例:从键盘上输入一个字符串Bufdb100db?db100dup(?)Movdx,offsetbufmovah,0AhInt21h输入一个字符串,并显示在屏幕上。第63页/共87页2.(1)日期和时间的设置P159功能号功能入口参数返回参数2BH设置日期CX:年DH:月DL:日AL=0成功AL=0FFH失败2DH设置时间CH:时CL:分DH:秒DL:1/100秒AL=0成功AL=0FFH失败第64页/共87页2.(1)日期和时间的获取P160功能号功能入口参数返回参数2AH取得日期CX:年DH:月DL:日2CH取得时间CH:时CL:分DH:秒DL:1/100秒第65页/共87页时间获取的应用测定一段程序的运行时间产生延时产生随机数第66页/共87页4.4程序设计方法第67页/共87页4.4程序设计方法顺序结构分支结构循环结构子程序结构第68页/共87页4.4.1顺序结构概述:程序顺序执行,无分支,无循环举例:内存中TABLE开始的存储单元中存放0~9的平方值,从键盘上任意输入一个0~9之间的数X,查表得该数的平方,并输出。分析:①键盘输入;②ASCII码数字;③查表第69页/共87页4.4.2分支结构概述:在程序的执行过程中,经常要求程序根据不同条件选择不同的处理方法分支程序设计举例第70页/共87页分支程序设计举例1从键盘上输入一个字符串,存入首地址为string的缓冲区忠,字符串长度n小于256,要求分别计算其中的数字‘0’~‘9’,小写字母,大写字母和其他字符的个数,并分别将这三个数存入三个存储单元中分析:①正确定义缓冲区用于存放输入的字符串;②从键盘上输入字符串;③统计字符第71页/共87页分支程序设计举例2设有首地址为BUFFER的数组,已按升序排好,长度为10,在该数组中查找关键字,若找到则从数组中删除;若找不到,则将它插入到合适的位置第72页/共87页4.4.3循环结构概述:重复执行某一程序段若干次,直到满足一定的条件为止循环程序结构包括四个部分:初始化:设置循环次数,设置变量的初始值循环体:循环结构中反复执行的部分参数的修改:修改操作数的值循环控制:修改循环次数,判断循环控制条件,决定是否推出循环循环程序设计举例第73页/共87页例1:循环程序设计BX中的16进制数转换为ASCII码,存放到BUF开始的内存单元中去,并在屏幕上显示数值,例如:BX=12ABH,则在屏幕上12AB分析:①BX中4位十六进制数如何分离;②数字如何转换为ASCII码;③ASCII码的显示;④流程图第74页/共87页①BX中4位16进制数如何分离设置一个循环计数器CH,CH初始值为4,表示BX中的4位16进制数分4次显示,每次显示一位;设置移位位数计数器CL,CL初始值为4,表示每次循环移位的二进制位数为4(因为一位16进制数由4位二进制组成);由于在屏幕上显示的时候,最高位最先显示,然后再显示次最高位,最后显示最低位,显示的顺序是从左到右,所以采用循环左移的方法,把最高位移到最低位(最右边),然后屏蔽其他3位,把最低位转换为ASCII码后在屏幕上显示。第75页/共87页②数字如何转换为ASCII码由于16进制数有两种情况:①在0~9范围内;②在A~F之间。如果是第一种情况,则转换为0~9的ASCII码需要加上30H如果是第二种情况,则转换为A~F的ASCII码需要加上37H第76页/共87页③ASCII码的显示功能号为2,2AH要显示字符的ASCII码DL调用DOS中断第77页/共87页④流程图开始设置循环计数CH=4设置移位计数CL=4BX循环左移CL位取出最右边的数位在0~9范围内吗加上30H加上37H在屏幕上显示CHCH-1CH=0结束是是否否第78页/共87页例2:循环程序设计从键盘上输入一个小于4位16进制数,将其存放在AX中例如:输入1234HAX中为4660D(1234H)如果从键盘上输入一个小于5位10进制数,将其存放在AX中例如:输入1000A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论