已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第4章汇编语言程序设计,2,主要内容:汇编语言程序设计基础分支程序设计循环程序设计子程序设计综合程序设计,第4章汇编语言程序设计,3,汇编语言是面向机器的程序设计语言,是一种采用助记符表示的符号形式的语言。用汇编语言编制的程序称为汇编语言源程序。汇编语言程序计算机不能直接识别和执行,需要用专门的翻译程序翻译后才能变成计算机能够识别和执行的程序。用来翻译汇编语言源程序的程序叫汇编程序,翻译后的、计算机能够执行的、用二进制代码表示的程序叫目的程序。,4,程序设计遵循一定的规律,一般需要以下步骤:需求分析。仔细了解求解问题的要求,如解决什么问题、完成什么功能等,这是程序设计的依据。方案制定。确定解决问题的思路、算法、设计方法及程序流程图。需要反复论证和比较,以确定某一最佳方案。编写程序。在前两步的基础上,动手编写程序,编写汇编语言源程序。调试程序。调试包括两方面的内容,一是排除程序中的静态错误,二是测试并发现程序的动态错误。形成文档。除可执行目的程序外,需要汇总研制报告、使用说明、程序清单、参数定义、测试方案以及维护说明等相关资料。,5,4.1汇编语言程序设计基础,主要内容:语句与格式数据项与表达式伪指令,6,4.1.1汇编语言的语句与格式,汇编语言的语句有两种:指令性语句由8086指令助记符构成的语句。指令性语句汇编时生成机器码,由CPU执行。每一条指令性语句都对应一条机器码指令。指示性语句由伪指令构成的语句。指示性语句汇编时不生成机器码,由汇编程序执行。其作用是告诉汇编程序如何对源程序进行汇编,比如,如何定义变量、如何分配内存、以及如何给程序定位等。指示性语句没有机器码指令与其对应。,7,指令性语句的格式为:标号:指令助记符目的操作数,源操作数;注释LOOP:MOVCX,100H;设置循环计数值指示性语句的格式为:名字伪指令操作数1,操作数2,操作数n;注释XDB30H,40H;数据定义为指令注意:各部分之间至少要用一个空格作为分隔符。,8,1、语句的构成元素标号:指令的符号地址,代表指令在存储器中的地址;只能出现在指令性语句中,标号后应加上冒号。名字:段、子程序、变量的名字,用来代表它们在存储器中的地址;只能出现在指示性语句中,名字后不加冒号。助记符:指令助记符、伪指令操作数:指令的操作对象指令性语句0,1,2个指示性语句根据需要确定操作数之间以逗号隔开操作数可以是寄存器、存储单元、常数或表达式注释:以分号开头,可放在指令后,也可单独放一行;注释应写被注释对象的作用,而不是操作。,9,汇编语言的一个实例:hello.asmdataSEGMENTHelloDBHello,world!,0DH,0AH,$dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXLEADX,hello;取字符串首地址MOVAH,9INT21H;显示字符串MOVAH,4CHINT21H;退回DOScodeENDSENDstart,名字,标号,助记符,操作数,注解,10,4.1.2数据项与表达式,数据项包括常量、变量、标号及表达式。1.常量二进制数,以B结尾,如01001101B。十进制数,如85。十六进制数,以H结尾,第1个数字为A-F时,前面应加0,如0F160H。字符串,用单引号括起来的1个或多个字符,如ERROR、a,将汇编成对应的ASCII码值,11,标号代表指令所在内存单元的地址,它有三个属性:段地址:标号所在段的段地址;偏移量:标号所代表存储单元的段内偏移地址;类型:NEAR或FAR。NEAR表示标号所在语句与转移指令(或调用指令)在同一代码段内,跳转时只需改变IP。FAR表示标号所在语句与转移指令(或调用指令)不在同一代码段内。若没有对类型进行说明,默认为NEAR。备注:标号常作为转移指令或CALL指令的转移地址,2、标号,12,变量用伪指令定义,变量名是内存单元的符号地址。定义变量就是给变量分配内存单元。变量也有三个属性:段地址:变量所在段的段地址偏移量:变量单元地址与段首地址之间的位移量类型:BYTE、WORD和DWORD三种变量在程序中作为存储器操作数被引用。,3、变量,13,标号和变量名的使用规则组成:A-Z(不分大小写),0-9,?._$不能以数字开头,句号(.)只能作为首字符,长度小于31个字符。不能与保留字(指令助记符、伪指令、预定义符号等)重名。不能重复定义。例如:正确的:LP1,AGAIN,NEXT,_GO,OK_1错误的:4M,LOOP,AAA,#HELP,+ONE,14,4、表达式,表达式由常数、标号、变量与运算符组成,分为数字表达式和地址表达式两种。汇编时按优先规则对表达式进行计算,得出具体的数值或地址,运行时不能改变。表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类。,15,用于数字表达式例:MOVAX,4*1024;汇编前的形式MOVAX,4096;汇编后的形式用于地址表达式例:LEASI,TAB+3;汇编前的形式LEASI,1003H;汇编后的形式;设TAB偏移地址为1000H,1)算术运算符:+-*/MOD,16,逻辑运算符只能用于数字表达式中。例如:MOVCL,36HAND0FH;汇编前MOVCL,06H;汇编后注意:不要把逻辑运算符与逻辑运算指令混淆例:ANDAX,3FC0HAND0FF00H汇编后源操作数被翻译为3F00H,所以上述指令与ANDAX,3F00H等价。,2)逻辑运算符:AND、OR、XOR、NOT,17,关系运算的结果是一个逻辑值:真或假关系为真,结果为全1关系为假,结果为全0例:MOVBX,PORTGT300H;汇编前MOVBX,0FFFFH;汇编后(一)MOVBX,0;汇编后(二),3)关系运算符:EQ、NE、LT、GT、LE、GE,PORT大于300H,PORT不大于300H,18,SEG:取变量或标号的段地址OFFSET:取变量或标号的偏移地址例:VARDB12HMOVBX,OFFSETVAR;取VAR的偏移地址MOVAX,SEGVAR;取VAR的段地址注意,以下指令的异同:MOVBX,OFFSETVARLEABX,VAROFFSET只能取静态的偏移地址;LEA指令可取静态偏移地址,也可取动态偏移地址,4)取地址运算符:SEG、OFFSET,19,TYPE:取变量的类型(1,2,4)LENGTH:取所定义变量的长度(即变量中元素的个数)SIZE:取所定义存储区的字节数(SIZE=TYPE*LENGTH)例:VARDW1,2,3,4,5则TYPEVAR=2;DW含2个字节LENGTHVAR=5;VAR有5个元素SIZEVAR=10;VAR共有10个字节,5)取值运算符:TYPE、LENGTH、SIZE,20,6)属性运算符:PTR,格式:PTR类型BYTE,WORD,DWORD,NEAR,FAR用途:用来指定地址操作数的类型,或者临时进行强制性类型转换。说明:BYTE、WORD、DWORD:用于描述变量(数据单元)地址如:MOVWORDPTRDI,0NEAR、FAR:用于描述转移、调用的目的地址如:CALLFARPTRSTR2NUM,21,4.2伪指令,所谓伪指令就是由汇编程序执行的指令,它本身不被汇编成机器指令。常用的伪指令有:数据定义伪指令符号定义伪指令段定义和段寄存器指定伪指令过程定义伪指令结束伪指令,22,4.2.1数据定义伪指令,数据定义伪指令用来定义变量,即给变量分配内存单元。数据定义伪指令的格式为:变量名数据定义伪指令操作数,操作数,常用的数据定义伪指令有如下几种:DB定义字节DW定义字DD定义双字操作数可以是常数、变量或表达式,23,例1:DATA_BDB10,5,10HDATA_WDW100H,-4DATA_DDD0FFFBH汇编后的内存分配情况如右图所示。,05H,10H,00H,01H,FCH,FFH,FBH,FFH,00H,00H,0AH,DATA_B,DATA_W,DATA_D,10,5,10H,100H,-4,0FFFBH,24,例2:操作数可以是字符串STRDBHELLO汇编后的情况如图:,STR,H,E,L,L,O,注意下面两个定义的不同之处:DBAB;41H在低字节,42H在高字节DWAB;42H在低字节,41H在高字节,48H,45H,4CH,4CH,4FH,25,用?来保留存储空间,但不写入数据.例:ABCDB0,1,2,3,4,OK,$RSVDW?,?,?,?,?,?,?,?用DUP多次复制数据(复制括号内的数据)例:RSVDW8DUP(?)CHADB5DUP(xyz),结果为:xyzxyzxyzxyzxyz,26,用$来表示当前汇编地址计数器的值例:TABLEDB10DUP(?)BUFFERDWTABLE,$+3设TABLE偏移地址为0080H,则汇编结果如下:,BUFFER,0080H,80H,TABLE,008AH008BH008CH008DH,.,8FH,00H,00H,0089H,10Bytes,008CH+3,$,27,4.2.2符号定义伪指令,把一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示。符号定义伪指令有两种:EQU,=。,用EQU定义的符号未清除前,不能重新定义。清除EQU定义可用PURGE伪指令。用“=”定义的符号,在任何时候可重新定义。二者均不占用存储空间,只给符号赋值。,28,例:FIVEEQU5COUNTEQUCXTENEQU10DIST=BYTEPTRSI+BPGOTO=JMPMOVAX,TENMOVCX,COUNTADDDIST,FIVEDIST=WORDPTRSI+BP+1ADDDIST,AXGOTOLABEL,定义,引用,29,4.2.3段定义伪指令,汇编语言源程序是按段来组织代码和数据的。和存储器的物理段相对应,汇编语言源程序中的段称为逻辑段,汇编并连接后被映射到物理段中。三类段:代码段、数据段(附加段)、堆栈段定义伪指令:SEGMENT、ENDS、ASSUME、ORG定义一个段的基本格式:段名SEGMENT定位类型组合方式类别段名ENDS,30,两个伪指令总是成对出现,且要求二者前面的段名须一致。SEGMENT说明一个段的开始,而ENDS说明一个段的结束。dataSEGMENTHelloDBHello,0DH,0AH,$dataENDSstacksSEGMENTDW1024DUP(?)stacksENDScodeSEGMENTASSUMECS:code,DS:data,SS:stacksstart:MOVAX,datacodeENDSENDstart,SEGMENT和ENDS伪指令,这是什么?,31,ASSUME伪指令,在代码段中,还必须明确段和段寄存器的关系,ASSUME语句正是完成这个(设定)任务的。如ASSUMECS:code,DS:data,ES:data语句中的code和data为段名。语句说明:1、CS将指向名字为code的代码段2、DS和ES将指向名字为data的数据段,32,注意:ASSUME伪指令只是告诉汇编程序有关段寄存器与段的关系,但并没有给段寄存器实际赋值,故用下面的语句将数据段的段地址装入段寄存器。MOVAX,DATA;取地址MOVDS,AX;数据段MOVES,AX;附加段代码段例外,代码段的段地址不需要由程序员装入CS寄存器,操作系统(OS)负责自动装入。如果程序中用到堆栈段,SS也需装入段地址,但用STACK组合方式说明后,情况会有所不同。,33,段名SEGMENT定位类型组合方式类别段名ENDS例如:stacksSEGMENTPARASTACKstack,1)定位类型说明当前定义的段的起始地址的要求,有四种:BYTE:段从字节地址开始,即段可以从任何地址开始。WORD:段从字地址开始,即段的起始地址必须是偶数。PARA(Paragraph):段从节地址(16个字节)开始,即段的起始地址应能被16整除(默认类型)。PAGE:段从页地址开始,256字节称为一页,所以段的起始地址应能被256整除。,34,2)组合类型说明不同模块中同名段的组合方式。PUBLIC:所有该类型的同名段组合成一个段,公用一个段地址,运行时装入同一个物理段中。COMMON:所有此类型的同名段具有相同的起始地址(覆盖)、共享相同的存储区域,段长取最长段长。AT:地址绝对定位,段地址就是表达式的值。STACK:所有同名段连接在一起,作为堆栈段。汇编程序自动初始化SS为堆栈首地址,并把堆栈长度装入SP中。,段名SEGMENT定位类型组合方式类别段名ENDS例如:stacksSEGMENTPARASTACKstack,35,3)类别类别名由用户定义,用单引号括起来。连接时,所有类别名相同的段被安排在连续的存储区域中。如:seg1SEGMENTP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宁海农村商业银行2026年招聘10人备考题库完整参考答案详解
- 2025年上海市复旦大学智能医学研究院招聘周欣课题组行政助理岗位备考题库及完整答案详解一套
- 中国安能集团第二工程局有限公司常州分公司2025年度公开招聘备考题库附答案详解
- 2026年上海市黄浦区教育系统实验及卫生系列专技岗位工作人员招聘13人备考题库参考答案详解
- 2025年区某企业招聘劳务派遣人员备考题库及一套参考答案详解
- 2025年新疆医科大学第四附属医院(新疆维吾尔自治区中医医院)面向社会公开招聘事业单位工作人员110人备考题库及答案详解一套
- 2025年广州市白云区中小学校校园“优才备考题库”招聘140人(上海考点)有答案详解
- 2025年上饶市玉山县中医院公开招聘编外专业技术人员11人备考题库有答案详解
- 2025年云南勐海县政务服务管理局编外聘用人员招聘5人备考题库及一套参考答案详解
- 2025年天翼电信终端有限公司招聘备考题库及一套参考答案详解
- 特殊儿童沟通技巧培训
- 银行游戏方案活动策划(3篇)
- 2025年水上休闲体育中心建设项目可行性研究报告
- 24-京剧趣谈 课件
- 2024北师大版一年级数学上册第四单元《10以内数加与减》质量检测卷(含解析)
- 少年法制教育
- 2025年教科版小学科学三年级上册第二单元《水》期中模拟卷
- 中国马克思主义与当代2024版教材课后思考题答案
- 2025年上海市浦东新区普通高中物理高一第一学期期末考试试题含解析
- 2025年药房半年工作总结
- 2026年日历表(每月一页、可编辑、可备注)
评论
0/150
提交评论