




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章汇编语言程序格式 41汇编程序功能 42伪操作 4.3汇编语言程序格式 4.4汇编语言程序的上机过程4.1汇编程序功能目前常用的汇编程序Microsoft:MASMBorland:TASM注:教材中的例题及说明均已MASM5.0版本为准汇编程序的主要功能:()、检查源程序(2) 、测出源程序的语法错误,并给出出错信息(3) .产生源程彥的目标文件,并给出列表文件(4) .展开宏指令342伪操作dataSEGMENT;数据段varDB ?dataENDScodeSEGMENT代码段ASSUME CS:code,DS:data汇编语言程序的语句:一、指令三、宏指令伪操作是汇编程序对源程序进行
2、汇编时处理 的操作,完成处理器选择.定义程序模式.数据 定义.分配存储区.指示程序开始结束等功能。start: MOV AX, dataMOV DS,AXMOV var CLMOV AH, 4CHINT 21H;返回 DOScode ENDSEND start421处理器选择伪操作功能:告诉汇编语言应该选择那一种指令 主要有:.8086选择8086指令系统.286选择80286指令系统286P选择保护方式下的80286指令系统.386选择80386指令系统836P选择保护方式下的80386指令系统.486选择80486指令系统486P选择保护方式下的80486指令系统.586选择Pentium
3、指令系统586P选择保护方式下的Pentium指令系统注:汇编程序的默认值是.80864.2.2段定义伪操作1、完整的段定义伪操作格式:段名SEGMENT 定位类型,组合类型,使用类型,类别段名ENDS段定义由伪操作o其中:SEGMENT和ENDS必须成对出现,且语句前必须有段名, SEGMENT和ENDS语句之间可以有指令和其他伪操作,表示存放在该段内存的变量、指令或其他伪操作对该段内存 的处理程序中可以定义多个段。程序经汇编、连接及装入内存后,段名为_具体的段值。10STACK40H例:定义用户堆栈dw 40H dup (?) tos label wordcode_seg segmentm
4、ov ax, stack_segmov ssy ax mov sp, offset toscode_seg endsASSUME伪操作格式ASSUME段寄存器:段名,段寄存器:段名,. 其中:段寄存器为CS、DS、ES、SS中的一个 段名为用伪操作SEGMENT定义过的段名例 ASSUME CS: cc , DS:aa ASSUME伪操作的作用明确段和段寄存器的关系,指示汇编程序指令中用到的标号、 过程及变量所在的段。其中若未用ASSUME语句指示指令中用到的标号.过程和变量所在 的段,汇编程序将给出错误信息。在程序中引用定义的变量做内存操作数时, 需按寻址方式用传送指令(如MOV)给相应的段
5、寄存器赋值。例:data_segl segment Idatajsegl ends;定义数据段data_seg2 segment22datajseg2 ends;定义附加段axy datajseglds, axax, dataseg2es, ax;段地址T段寄存器code jseg endsend startcode jseg segment1 start:1 movmoviomov类型及属性的说明定位类型:说明段的起始地址应有怎样的边界值:指定段的地址从小段边界开始:该段可从任何字节开始.:该段必须从字边界开始. :该段必须从双字边界开始:该段必须从页的边界开始.组合类型:说明程序连接时段的
6、合并方法PRIVATE:该段为私有段,连接时不与其他同名的分段合并默认值PUBLIC:该段连接时与其他同名的分段连在一起COMMON:该段在连接时与其它同名的段具有相同的起始地址. AT:使段的起始地址为后面表达式的16位值STACK:指定该段为堆栈的一部分(放于低地址)MEMORY:同 PUBLIC使用类型:说明是16位寻址方式还是32位寻址方式默认值USE16: 16位寻址方式USE32: 32位寻址方式类别:给出连接时组成段组的类别名2、存储模型与简化段定义伪操作(MASM5.0以上版本) 简化段定义的特点:虽然没有SEGMENT那样的较完整 的表达能力,但。(1)存储模型功能:说明在存
7、储器中是如何安排各个段的,同 时也是使用。格式:MODEL模型定义,模型选项存储模型(7种)Tiny 都是近访问。所有的代码和数据都放在一个段内,其代码和数据Small所有的数据都放在一个64KB数据段,所有的代码都放在一个64KB代码段,其代码和数据都是近访问。 Mediu代码使用多个段,数据在一个64KB数据段,数据是近访问,代码是远访问。Compact数据使用多个段,代码在一个64KB代码段,代码是近访问,数据是远访问。Large代码和数据使用多个段,其代码和数据都是远访问Huge与Large模型相似,但允许数据段超过64KBFlat允许用32位偏移量,DOS下不能用,只能在OS/2下或
8、其他保护模式的操作系统下使用。模型选项:1高级语言接口:指汇编语言程序作为某一种高级语言 程序的过程而为该高级语言所调用,如 C5PASCAL5FORTRAN5BASIC2、操作系统:说明程序运行于那个操作系统之下,可用OS_DOS 或0S_0S2说明,默认是OS_DOS3、堆栈距离:用NEARSTACK或FARSTACK说明。其中N EARSTACK指把堆栈段和数据段合并到一个DGROUP段中,DS和SS均指向DGROUP段。FARSTACK是指 堆栈段和数据段并不合并。当存储模型为TINY5SMALL5MEDIUM和FALT时,默认项为 NEARSTACK ,当存储模型为COMPACT丄A
9、RGE和HUGE时 默认项为FARSTACK(2)简化段定义(1) 、给高级语言编写汇编语言过程,为便于与高级语言兼 容,需要把数据段分得很细,可以釆用:CODE段名 .DATA .DATA?.FARDATA 段名 .FARDATA?段名.CONST.STACK大小(2) 、编写一个独立的汇编语言程序,不需如(1)那样细分, 一般采用:CODE段名对于一个代码段的模型,段名为可选项;.DATA.STACK大小(3) 与简化段定义有关的预定义符号在简化段定义情况下,也需要把段名装入段寄存器,可用:MOVAX, )ATAMOVDS,AX(4)用MODEL定义存储器模型时的段默认属性见教材的123Q
10、24页表4.1注意:1. TINY模型下没有堆栈段定义伪操作,其他6种都有2. TINY模型下DATA,DATA?,CONST,CODE组成 DGROUP;其他模型下DATA,DATA?,CONST,STACK 组成DGROUP3凡未初始化的数据段给出的段扩展名为BSS(5)简化段定义举例例4.2.MODEL.STACK.DATASMALL淀义存储模型100H;定义堆栈段;定义数据段.CODESTART:MOVMOV;定义代码段;程序开始执行地址AX, DS,AX;数据段段地址送DS寄存器MOVINTT00HwSTART;程序结束;数据定义伪操作例4.4MODEL SMALL;定义存储模型;定
11、义远初始化数据段;数据定义伪操作DATA;定义数据段;数据定义伪操作21CODE;定义代码段START:;程序开始执行地址MOVAX,MOVDS,AXMOVAX,MOVES,AXASSUMEES:;数据段段地址送DS寄存器;远初始化数据段段地址送 ES寄存器MOVINTAX.4C00H 21H;返回DOSSTART;程序结束3、段组定义伪操作中的各个段具有相同的段地址,即程序在访问段组 中的各段时使用同一个段寄存器。段组的使用有俩种情 况:系统默认:在各种存储模型下,汇编程序自动的组成一个段组DGROUP,见表4.1用户定制:用户可根据需要自行制定段组格式:段组名GROUP 段名,段名程序中对
12、定义在不同段中的变量都可以使用进行访问例4.5DSEG1SEGMENTDSEG1ENDSDSEG2SEGMENTDSEG2ENDSDATAGROUPGROUPCSEGSTART: MOV 强WORD PUBLICDSEG1,DSEG2 PARA PUBLICc DATA,DATA,423程序开始和结束伪操作格式:NAME 模块名格式:TITLE text (前6个字符/60个字符)在源程序开始可用NAME或TITLE为模块命名,模块名的作用是指示给连接程序进行连接用。疔源程序中可无模块定义,此时源文件名作为模块名。模块崙名的规则:NAMETTITLE夕源文件名ND伪操作格式 END 标号阴=
13、启动地址A多个程序模块相连,则只有主程序要使用标号,作用是指示源程序到此结束。汇编程序对END之后的语句不进行处理。 程序中所有有效语句应放在END语句之前。汇编程序对无END语句的源程序不进行处理, 只给出无END语句错误信息。4.2.4数据定义及存储器分配伪操作格式变量名类型助记符操作数,操作数9 用来定义程序中所用的内存操作数。其中指示内存操作数的地址(符号地址),其值是该伪操作中第一个数据项的第一个字 节的偏移地址,另外,还有个类型属性表示 该语句中每一个数据项的长度(以字节为单 位),如DB为1,DT为10。指示内存操作数的类型(字节、字、双字等) 指示内存操作数的内容汇编程序将定义
14、的操作数,按其类型分配内存单元数, 顺序存入变量名指向的内存单元中。常用的类型助记符有:(BYTE)指示其后的操作数为字节类型(WORD)指示其后的操作数为字类型(DWORD)指示其后的操作数为双字类型 (FWORD)指示其后的操作数为六字节类型,386+ (QWORD)指示其后的操作数为四字类型 (TBYTE)指示其后的操作数为10字节类型注:括号内为MASM6中的定义初始化数据段:由伪操作把数据存入指定的存储单元 未初始化数据段:只分配存储单元而并不存入数据 地址存入:DW:变量或标号的偏移地址(16位)DD:变量或标号的偏移地址(16位)与段地址(16位)DF:变量或标号的偏移地址(32
15、位)与段地址(16位)27例 1:定义赋初值的变量dataSEGMENTxxDB1, -1, OfcHwDW1, -1, OfcHzzDD1, OfcHata ENDSzz XX f341tr5473砂6e67487561494e5055543a0d0a24:定义字符串变量(只能用DB定义)data SEGMENTDB TsingHuaDB INPUT:1 ,OdH , OaHdata ENDS注:3个及其以上的字符, 只能用DB定义 strl DW abed str2 DD 4 abed操作数可以是用常量、表达式和?表示。*常量和表达式表示内存操作数的初始值,其值应在其定义的类型范围内,否则
16、汇编出错。例 aa DB 270bb DW10000用?表示不置初始值的内存操作数。 cc DB ?可用DUP复制操作符定义相同的操作数,其格式为:ee DB等价于 ee DB 4,4,4操作数的类型属性的定义指令中的操作数的类型属性应该一致1、数据伪操作中的定义,如DB为1,DT为102、PTR属性操作符格式:typePTR变量土常数表达式type可以是:BYTE,WORD,DWORD,FWORD,QWORD,TBYTE 如:MOVAX5WORD PTR OPER1+1MOVAX5DWORD PTR OPER1+1可见:同一个变量可以具有不同的类型属性3、LABEL伪操作式:nameLABE
17、L typetype可以是:BYTE,WORD,DWORD,FWORD,QWORD,TBYTENEAR,FAR如:BYTE_ARRAY LABEL WORDBYTE_ARRAY LABEL DWORD可见:同一个地址可以赋予不同类型的变量名4.2.5表达式赋值伪操作EQU(不占存储单元)CONSTANT ALPHA BETAEQU 256EQU 7EQU ALPHAS(允许重复定义)EMP=7EMP=EMP+1391、地址计数器:保存当前正在汇编的指令的偏移地址,每处理一条指令,其值就加(该指令的字节数)例:JNE $+6;转向地址是JNE的首址+6 例:$用在伪操作的参数字段ARRAY DW
18、 1,2,$+4,3,4,$+4ARRAY00740078007E2、ORG伪操作功能:设置当前地址计数器的值格式:ORG常数表达式常数表达式:常数(2) 符号地址开始的位移量(3) 从当前地址计数器值$开始的位移量 如:ORG10ORG3.EVEN伪操作功能:使下一个变量或指令开始于偶数字节地址格式:EVEN4.ALIGN伪操作功能:使下一个变量或指令开始于2的幕字节地址格式:ALIGN边界(2的幕)427基数控制伪操作功能:规定无标记数的基数例:.RADIX 16MOV BX,OFFMOV BX, 178D注:汇编程序默认的数是十进制数46dataSEGMENT;数据段varDB ?dat
19、aENDScodeSEGMENT;代码段AX, dataDS, AX var, CLAH,4CH21H;返回 DOS4.3汇编语言程序格式汇编语言源程序的语句组成:H 名字:助记符操作数,;注释ASSUME CS:code,DS:data start: MOVMOVMOVMOVINTcode ENDSEND start4. 3汇编语言程序格式符号地址;注释:数字表达式地址表达式据语句功能的不同,名字项可用来表示:段名、变量名、标号.过程名以及常量名等dataSEGMENT;数据段varDB ?dataENDScodeSEGMENT代码段ASSUME CS:code,DS:datastart:
20、MOV AX, dataMOV DS, AXMOV var CLMOV AH, 4CHINT 21H;返回 DOScode ENDSEND start45名字: 助记符操作数,;注释名字项用一个符号表示。对符号的规定由AZ, a-z ,09及().$._?等组成。最长31个字符,超出部分忽略。 不能用数字打头,以免与十六进制数相混。不使用汇编程序中的保留字。(如指令的助记符等)对定义的符号不区分大小写。名字: 助记符操作数,;注释助记符可以是指令.伪操作中的助记符。对于指令,汇编程序将其翻译成机器语言指令。AX, 100 - B8 00 01对-二,汇编程序据其要求的功能进行处理。datada
21、ta与一段值对应string “Tsinghua, string与一内存地址对应名字:助记符【操作数,;注释操作数给出参与操作的数或数所在的地方。 操作数多于一个时,用逗号分开。操作数可以是、寄存器、存储器操作数、 标号名、过程名或等。给出具体的数据。可以是数字默认,也可加表示十进制数。如1234D, 1234数字后加表示。1010B数字后加表示。 如1234H,用 表示。U234;十进制,用字符对应的 ASCIIS示 31H, 32H, 33H, 34Hdata2DB12H, 34H,56HMOVAL,GstringDB41234,datal DB 12,34,56;十六进制;字符;字符串A
22、. B. C. D、E. F开头的十六进制数前面加,与H结尾的标识符区别。如寄存器名AH. BH. CH. DH 变量名abcdH等mov AL,AHmov AL, AHmov BX, abcdH1.算术操作符(+. r *、/、MOD )2.逻辑与移位操作符(AND. OR、NOT. XOR SHL、SH斑3关系操作符( )真:0FFFFH;假:04.数值回送操作符5.属性操作符)55(1)算术操作符:+,mod例:ADD AX, A+2;符号地址土常数有意义;* /时意义不明确MOV AX, BX+1 ; x57(2)逻辑操作符:AND, OR, XOR, NOT例:OPR1 EQU 25
23、OPR2 EQU 7(3)关系操作符:EQ, NE, LT, LE, GT, GE计算结果为逻辑值:真OFFFFH假 0000H例:MOV FID JLE 1263Y:若128(真)汇编结果MOV FID, -1若128(假)汇编结果MOV FID.0(4)数值回送操作符:变量(或标号)功能:回送变量或标号的偏址/段址 例:MOV BX,XMOV DX, X 变量(或标号)变豊 DB DW DD DQ DT标号:NEAR FAR值:124810-1变量功能:回送由DUP定义的变量的单元数,其它情况回送1变量功能:LENGTH半TYPE例:ARRAY DW 100 DUP (?)TABLE DB ABCDADD SI, TYPE TABLEMOV CX, LENGTH TABLE;ADD SI, 1;MOV CX,1;MOV CX,1MOV CX, SIZE TABLE(5)属性操作符:类型 表达式 段操作符标号类型例: 例: 例: 例:MOV WORDMOVJ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 结构化思维商务英语考试试题及答案
- 注册土木工程师考试内容清单试题及答案
- 社会管理创新试题及答案
- 游戏化营销在品牌传播中的影响力分析:2025年深度报告
- 标准推理测试题及答案
- 威海考教师编试题及答案
- 无机化学实验题目及答案
- 护理基础考核试题及答案
- 萍乡卫生职业学院《经贸日语》2023-2024学年第一学期期末试卷
- 江苏省盐城市大丰2025届初三年级下学期十月份月考化学试题含解析
- HIV实验室SOP文件-新版
- 孤独症儿童评估填写范例(一表两图)
- 贺兰山东麓干红葡萄酒多酚组分与其抗氧化、抗癌活性的关联性研究
- 第15课+十月革命的胜利与苏联的社会主义实践【高效备课精研 + 知识精讲提升】 高一历史 课件(中外历史纲要下)
- (4.3.1)-3.3我国储粮生态区的分布
- 辽宁盘锦浩业化工“1.15”泄漏爆炸着火事故警示教育
- 2023年衡阳市水务投资集团有限公司招聘笔试题库及答案解析
- 110~750kV架空输电线路设计规范方案
- 北师大版五年级数学下册公开课《包装的学问》课件
- 北师大版英语八年级下册 Unit 4 Lesson 11 Online Time 课件(30张PPT)
- 浅析商业综合体的消防疏散
评论
0/150
提交评论