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

下载本文档

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

文档简介

1、1,第4章汇编语言编程,2,主要内容,汇编语言源程序的结构汇编语言语言形式伪指令功能调用汇编语言编程,3,4.1汇编语言源程序,计算机设计语言,机械语言汇编语言高级语言,机械语言,汇编机器语言:用二进制表示指令和数据的语言是计算机硬件系统中唯一能直接理解和执行的语言,具有执行速度快、占用内存少等优点。 汇编语言:用指令助记符、符号地址标签、伪指令等编写的程序。 汇编语言源程序:用汇编语言编写的程序。 汇编器:将汇编器语言源程序翻译成计算机上可执行的机器语言(称为目标代码)。 这个翻译过程称为汇编程序。 汇编程序:完成汇编程序的系统程序。 5、汇编语言是用指令的助记符号、符号地址、符号写的语言,

2、它是机器语言的符号表示,是低级语言。 汇编语言面向机器,与机器的硬件密切相关。 用汇编语言编写的程序效率高,节省内存,计算速度快。6、编辑、汇编语言源程序文件、目标文件、汇编、连接、可执行文件、MASM、LINK、执行、A.ASM、A.OBJ、A.EXE、伪指令、指令、汇编语言源程序和汇编汇编语言源程序汇编程序、用助记符号创建、汇编程序、汇编语言源程序、机器语言目标程序、源程序的编译程序、8汇编语言程序的设计和执行过程、汇编程序汇编器(MASM )链接调试(TD ),源文件. ASM,目标文件. OBJ,可执行文件. EXE,最终程序,9, 4.1.1输入汇编语言源程序的结构,全汇编语言源程序

3、通常由若干逻辑段构成,包括数据段、附加段、堆栈段和代码段,它们分别映射到存储器的物理侧每个逻辑段以SEGMENT开始,以ENDS语句结束,整个源程序以END语句结束。 代码段存储源程序中的所有脚本.的内容。 数据、变量等家里的数据段和附加段。 一个源程序可以具有多个代码段,还可以由多个数据段、附加段和堆栈段构成.附图说明。 源程序模块只能具有一个代码段、一个数据段、一个附加段和一个堆栈段。 程序段的目的是,在程序组装后,可以将指令代码和数据分别加载到内存的对应物理段中。 10、数据段名称SEGMENT数据段名称ENDS附加段名称SEGMENT附加段名称ENDS、堆栈段名称SEGMENT堆栈段名

4、称ENDS代码段名称SEGMENT代码段名称ENDS、10 CPU执行的语句可以生成目标代码,CPU不执行,汇编程序执行的语句目标代码(伪指令),4.1.2汇编语言的语句类型和格式,12,指令和伪指令,指令使CPU工作,在程序执行时开始伪指令不产生CPU操作、由汇编器在程序执行前处理的描述符,例如数据说明、变量定义等,也不产生目标代码。 13、伪命令语句与命令性语句的区别,伪命令语句与命令性语句的最大区别在于,先装配伪命令语句后,不生成任何机器代码,装配命令性语句后,生成对应的机器代码。接下来伪命令语句所指示的操作在程序装配时完成,命令、14、2 .汇编语言语句的格式、标签:前缀操作数、操作数

5、注释、命令符号的地址标签后加冒号、操作码、注释前加加号、命令语句:15、指示语形式、名称伪命令操作数、 注释、变量的符号地址后不加冒号,指示语句中至少有一个操作数、16、1 .标签、名称、标签表示指令的符号地址,后面加冒号,标签位于指令语句的前面。 名称通常表示变量名称、段名称、进程名称等,通常用于表示访问内存中的一个数据区的地址。 名字后面不要加冒号,在祁句前面。配置:由字母、数字和专用字符组成,最大长度不能超过31个字符,不能以数字开头,不能使用保留字(寄存器名、指令助记符、伪指令等)。17、2 .操作码、脚本伪指令辅助符号指示汇编完成操作的作用:定义变量分配存储单元,指示程序的开始和结束

6、等,指令CPU完成操作,18、3 .将注释、分号作为注释的开始,说明程序和语句的功能汇编程序在翻译源程序时,跳过该部分,不处理任何内容。 19、4 .数据项目和公式、寄存器的存储器单元常数变量或标签公式、指令的操作数可以是即时数、寄存器和存储器单元。 伪指令的参数可以是常数、变量名称、式等多个,参数之间用逗号分隔。20、常数、数字常数、十进制常数、二进制常数、十进制常数字符串常数用单引号减去的字符或字符串例子: AMOVAL,a例: ABCD,表示组装时对应的ASCII代码41H、42H、43H、44H、21,标签:表示存储指令的存储单元的符号地址角色:标签可以用作指令的操作数,如迁移、流程调

7、用和循环控制。 三个属性段值属性:具有标签的段的段地址。 偏移属性:偏移地址(16位)类型属性:相邻标签(仅在段内可参照,2字节)远程标签(在其他段中可参照,4字节)、22、变量、变量属性:段值:变量所在段的段地址断开类型:字节类型、字体、双字体等变量:内存上某个数据区的名称,即数据存储位置的符号表示。 变量通常在代码段以外的段中用伪指令定义,在程序中被视为内存操作数。 定义变量实际上是为变量分配一个存储单元。 请注意,23、(1)变量类型和指令的要求必须一致。 (2)变量名称是对应的数据区的开头地址。 如果数据区中有多个数据,则在处理其他数据时,必须修改指针。24、表达式、算术运算符逻辑运算

8、符关系运算符采用值运算符和属性运算符的其他运算符,表达式:确定值的操作数(汇编完成计算)、25、算术运算符和逻辑运算符、-、* /、MOD逻辑运算符AND、OR、NOT、XOR示例: MOVAL、oad hand0CCH m 、26、关系运算符、指示关系是否成立的运算符涉及关系运算的必须是两个数值或同一段内的两个存储器单元地址。 运算结果在逻辑值关系中成立,结果=0FFFFH关系不成立,结果=0。 运算符: EQ,NE,LT,GT,LE,GE示例: MOVAL,3lt4, 27.type变量类型LENGTH,其获得值运算符,随后的变量或标签的偏移地址,获得随后的变量或标签的段地址,获得经定义的

9、存储区域的长度SIZE,并分析存储器操作数的属性,OFFSET,s 相当于SEGDATAMOVDS,AXMOVBX,OFFSETDATALEABX,DATA,29的取值运算符示例BUFFER存储器由名为BUFFERDW200DUP(0)的伪指令定义的情况下: type buffer=2length b 30、属性运算符: ptrptrptr是当前命令的有效示例: MOVBYTRPTRBX,12H,31,其他运算符,括号“”用方括号表示存储器操作数,括号内的内容是操作数的偏移地址。 段重置图标“:”用于更改默认的段基地址。 格式为段寄存器名:32,4.2伪指令,伪指令的格式和所实现的操作伪指令的

10、应用指令和伪指令的差异: (1)CPU指令在程序执行时由CPU执行,各指令对应于CPU的特定操作。 伪指令在汇编过程中由汇编程序执行。(2)在装配之后,已装配每个CPU指令、生成对应的目标代码、并且不生成对应的目标代码。 33、伪指令、汇编程序执行的“指令系统”的作用:定义变量定义存储定义定义逻辑段的分配程序的开始和结束的过程等。34、常用伪指令、数据定义伪指令符号定义伪指令段定义伪指令结束伪指令宏指令伪指令、35、同时,数据定义伪指令用于定义数据区域中变量的类型、初始值的分配或者存储空间和大小的格式:变量名伪操作数; 注释是符号地址,变量类型的定义,变量值和区域大小的定义,36,1 .数据定

11、义模拟命令助记符,DB定义的变量是字节型DW定义的变量是字节型DD定义的变量是双字体型DQ定义的变量是双字体型(4字节) DT定义的变量是10 数据定义模拟命令的几个说明,模拟命令的性质决定定义变量的属性.定义字符串是DB模拟命令例: DATA1DBABCD,66H,a,b,c,d,41H,42H,43H,44H,66H,38,xx,01,FC 、01,00,00,00,00,00,00,00,00,FF,FF,FC,00,00,00,FC,1,FC, 在示例:中,对给定初始值的变量dataSEGMENTxxDB1,- 1,0 fchyydw 1,- 1,0 fchzzdd 1,- 1,0 f

12、chdtaends,39,(1)数据项分配存储单元,并且将变量名称指定为存储单元的名称。 例如: XDB25HYDW4142HZDD12345678H的存储形式可以是图:初始值或公式。 例如: in _ portdbport _ valout _ portdbport _ val1port _ val是由equal语句分配的值。 (2)预约存储单元,为了保存运算结果不代入。/PS? PS? XYZ,12H,34H,56H,78H,41H,42H,40,(3)阵列示例: WDW1122H,3344 hbd B1,2,4,9,16 (4)定义字符串(仅由DB定义)示例: MDBHELLO各字符的值

13、为ass 示例: str1dbtsinghuastr2db输入:0dh,0aH,$,41,data _ by TDB 10,4,10h, data _ word dw100,100 h,-5, 42、ABCDW1354H、-2、 DEFDWABXYDBABDW2DUP(0)、43、ABCDB0、 什么?什么?0DEFDW? 52,0,44,例如,数据1 db 11 h,22H,33H,44 h数据2 d w 11 h,22H,3344 hda ta3DD 11 h * 2,22h,33445566H,以上变量存储在存储器中的格式,45,2 .重复运算符, 形式:变量名数据定义伪运算nDUP (

14、初始值)作用:操作数多次在同一数据区的各单元中设定相同的初始值保留库单元(定义缓冲区、堆栈区等)的目的:宣告一个数据区的例子: BW20DUP(0)DB3DUP(22H,1 46、“? ”的作用表示随机值,用于确保内存空间。 MEM1DB34H、a MEM2DW20DUP (? 预约40字节单位,每单位随机值,随机数占1字节单位,47,例,M1,h,o,w,m2,11h,11h,00H,44H,r,e,y,o,u,11h,000 M2DW3DUP(11H )、3344HDB4DUP (? ) m3db3d升级(22 h、11H、48、2、符号定义伪指令、形式:符号名EQU表达式操作:将后面的表

15、达式替换为符号名,在多次引用、修改同一表达式时很有用。 用equal写的表达式不消耗内存空间。 表达式不能重新定义常数、符号、数值表达式、地址表达式或指针辅助符号(例如,=“伪指令”)的示例: CONSTANTEQU100VAREQU30H 99H、49、3、段定义伪指令、段名SEGMENT定位类型的组合说明逻辑段的起点,说明不同模块的同名段的组合和连接方法,DS、ES、SS、段是变量、符号定义等伪指令对CS,段是程序代码。 角色描述逻辑段的开始和结束描述不同程序模块中同种逻辑段之间的联系形式。,50,定位类型,角色:汇编器中逻辑段的地址边界PARA :段的起点从段的边界开始(默认) (16字

16、节为1字节) 字节:段的起点从存储器的任意地址开始WORD :段的起点从偶数地址开始的页:段的起点从页面边界开始(256字节为1页),51,组合类型, 角色:如何在汇编器中组合一个逻辑段和其他段(主要在具有多模块的程序中使用),以其他模块的同名段满足定位类型为前提的组合方式: NONE :无组(默认) PUBLIC :依次连接(顺序由LINK程序决定) COMMON :独占连接STACK :堆栈段的依次连接MEMORY :该段在同一段的最高地址上。 AT表达式:段定义用于在表达式的值为基于段的段边界、52、类别、角色:连接了多个程序模块时,将具有相同类别名称的逻辑段加载到连续的存储器区域中。 类别名相同时,按出现顺序排列。 没有类名的逻辑段与没有类名的其他逻辑段一起连续加载到内存中。 定位类型、组合类型、类别主要用于连接多个程序模块. 如果程序中只有一个模块,且仅包含代码段、数据段、附加段和堆栈段,则可以省略其它段的组合类型和类别,但堆栈段建议的组合类型STACK的说明除外锚点类型通常使用默认的PARA。 例如,数据代码1 db11 h、22HDATAENDS、54、A(P )、B(C )、A(P

温馨提示

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

评论

0/150

提交评论