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

下载本文档

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

文档简介

第四章汇编语言编程,本章内容、汇编语言语法、汇编语言实现、汇编语言编程方法和应用、汇编语言设计示例、第四章:汇编语言功能、汇编语言是基于处理器指令系统的低级编程语言,用辅助符号表示命令操作码。徽标使用命令操作数汇编语言生成器的主要优点是可以直接有效地控制计算机硬件。因此,可以轻松创建短的代码序列和快速执行程序。汇编语言与其他高级语言编程几乎经过相同的过程,在某些应用程序中工作。第4章:4.1汇编语言语法4 . 1 . 1 . 1汇编语言源程序的结构和配置,一个汇编语言源程序可以包含多个段、数据段、附加段或堆段,段与段之间的顺序在必须独立运行的程序中包含一个代码段,以表示程序执行的起点。只有一个起点的所有可执行语句必须在一个代码段中,说明语句可以根据需要位于任何段中。程序通常还需要由语句序列组成的堆段。源程序是汇编程序语句行汇编语言源程序的格式,标签/名称:opcode操作数;注:源程序由多个段落组成。每个段以SEGMENT开头,以ENDS结尾,整个源程序以END结尾。示例4.1实现:123 456sum的源程序,代码段;门6 assume cs: code,ds:datamain procfar;门8 start:push ss;门9。RET;门17MAINENDP;门18CODEENDS;语句19、数据段、代码段、数据段;门1 adw233门2 bdw456门3SUMDW?4 dataends;门5,end start语句20,名称命令/伪命令操作数1,操作数2.,段=8721语句,1。由源程序组成,源程序=8721;区段,区段:资料区段、堆集区段、其他区段、程式码区段、叙述句:命令叙述句,由CPU执行。指示装配方法的指示语句。名称:构成段名(如DATA,CODE变量名称)的有效字符(如a,b,SUM过程名:MAIN标签名,如START,1),如下所示:文字(不区分大小写)。数字0-9;特殊字符(“?”)”、“:”、“”、“_”、“$”。2)名称的有效长度小于31个字符。名称以字母开头。不能使用保留字作为名称。2 .名称命名惯例,3 .名称属性,(1)变量名称,(2)段名称:该段起始位置的段地址值,段属性:变量表示的数据区域所在的段的段基本地址;偏移:变量表示的数据区域的第一个字节所在的段内的偏移地址。类型:BYTE、WORD、DWORD、DQ、DT长度:变量表示的数据区域中的数据元素数。大小:变量表示的数据区域中的数据占用的空间大小(字节)。(3)程序名称或标示名称;(4)常数名称:表示常数。段属性:从进程开始位置或标签偏移段地址值:从进程开始位置或标签偏移地址值类型:NEAR、FAR、用于程序跳转、4.1.2程序集语言伪命令,1。数据定义伪命令变量名数据定义伪命令操作数1,操作数2.、db、DW、DD、DQ、DT、字节、单词、双词、四词和五词变量。(1)数字常数:十进制、八进制、十六进制、二进制等,默认格式为十进制。(2)用单引号括起来的文字常量存储为该字符的ASCII代码。(3)符号常数,必须是预定义的符号;(4)符号“?“,保留空间,内容不确定;(5)表示重复内容的数据的5)DUP。克隆、操作数、D_ADB10、 a 、 BC d _ bdw1234hd _ cdq5678h、d _ a 0a h 41 h 42 h 43hd _ b 34 h12hd _DW定义的数据,每个数据元素占用两个存储单元;(2)存储单词数据时,低字节存储在低地址单元中,高字节存储在高地址单元中;(3)存储字符时的相应ASCII代码,例如“a”的ASCII代码41H;(4)符号地址包括D_B=D_A 4D_C=D_B 2=D_A 6,注释)evend _ fdwD_Ed _ gdb二维up (1,3,4) d _ hdw $2,变量内容偏移地址d _ e?100?101?102103d _ f00h 100401h 105d _ g 1100631010771010 a 1410 BD _ h0e 200c 01 h10d,下列储存位置目前的位移位址符号定义伪命令(1)EQU格式:名称EQUa表达式,例如VBEQU641024;VB表示数值表达式值aequ 7be qua-2。注意:1 .如果表达式包含变量,则必须在语句之前指定变量定义。2.EQU语句不能对变量重复定义。3.VB、a、b不占用内存,(2)等号“=”格式:名称=表达式,功能:除了可以重新定义相同的名称以外,其他基本上与EQU相同。例如:COUNT=10MOVAL,COUNT;count=5;可重复定义.(3) LABEL,格式:变量/标签LABEL类型,功能:定义变量或标签的类型,变量或标签的段属性和偏移属性由语句所在的位置确定。变量的类型为BYTE、WORD、DWORD、DQ和dt。标示类型为NEAR、FAR。使用“是”LABEL在同一数据区域中创建一个或多个类型及其关联属性。AREAWLABELWORD;AREAW指向与AREAB相同的数据区域,AREAW类型为单词,AREAB类型为字节AREABDB100DUP(?).MOVAX、1234HMOVAREAW、ax;(areaw)=1234h.movbl、AREAB;BL=34H,3。段定义伪命令,段名SEGMENT位置类型 组合类型 类别.段名ends,byte: b,即段可以从任何地址开始;Word: 0b,段的起始地址必须为偶数地址;PARA:0000B,即段从段边界开始,每16个字节对应一个小段,因此起始地址为16的倍数。(默认值)PAGE:0000000 b,即段从页面边界开始,每256字节1页,因此起始地址为256的倍数。位置类型:说明段起始地址的边界值:组合类型:说明程序连接时如何合并段,1PUBLEC:将相同别名段组合在一起形成逻辑段;2STACK:与PUBLIC一样,仅用于虚拟段。装配和连接后,系统会自动为SS和SP分配值,执行程序会将SP初始值指向堆栈底部。3COMMON:从相同名称的区段撷取相同的记忆体位址。因此,会重新定义每个逻辑区段。连接后,此段的长度取决于同名段中最长的一个,内容有效取决于上次加载的内容。4MEMORY:与PUBLIC同义。但是,MEMORY定义的段安装在具有相同名称的所有段的末尾。如果连接出现多个内存,则遇到的第一个段将被视为组合类型MEMORY,其他段组合类型将被视为PUBLIC。5PRIVATE:未接合,该段与其他段没有逻辑关系。即使名称相同,每个线束段也具有唯一的线束段基准值。默认值 6 atexp:段地址是表达式exp的值(长度为16个字符)。此项目无法用于片段。多个程序模块连接在一起时,将以具有相同类别名称的段出现的顺序装入连续的内存区域。没有品类名称的段与其他没有品类名称的段一起连续载入记忆体。类别:类别用于确定连接时每个逻辑段的加载顺序。类别名称必须用单引号括起来。ASSUME段寄存器名称:段名称,段寄存器名称:段名称.,assume:用于阐明段寄存器的段关系,说明:伪指令出现在代码段中;此伪命令仅表示每个逻辑段使用段寄存器,不会向段寄存器的内容赋值。DS,ES的值必须在程序段中使用指令语句指定,CS,SS由系统设置,程序可以为SS指定值,但不能为CS指定值。示例:ASSUMEDS:DSEG、CS:CSEG、ES:ESEG、SS:SESG,示例:ASSUMECS:CODE、DS:DATA、ES:DATA数据段由从0E000H开始、类型属性为单词和字节的100字节数组组成。2.虚拟分段从短分段开始,分段组(类别)为STACK称为。3.为代码段指定段寄存器,主程序从1000H开始为相关段寄存器指定值;4.程序结束了。dsgsegmentsat 0 e 000 HD _ byte db 100 dup(?)d _ wordequwordptrd _ bytesdsegmentara stack db 200 dup(?)ssegendscsegsegmentor 1000 hmainprocfarassumecs : cseg、DS:DSEG、ss: sseg、start : pushdsxorax、axpush.retmainendpcseendsendsstart,4.1.3汇编语句,语句格式:名称操作操作数;注释)、常量、变量和表达式,由常量、变量和运算符组成:1。算术运算符,示例(1)ARRAYDW1*2 3-4,56HMOVAX,ARRAY;莫巴克斯,1 (2)头发,7 FH mod 2;头发,1 (3)莫巴赫,15/4,莫巴赫,3,2。逻辑运算符,示例1:mobach,1110000BMOVAL,NOTAH;MOVAL、00001111BMOVBL、AHORAL;MOVBL、1111111BMOVBH、AHXORAL;MOVBH,1111111B,示例2:从端口86H读取字节,父屏蔽后在端口6传输。PORTEQU86HINAL,PORTANDAL,0FH;AND是逻辑命令MOVDX,portand 0f h;AND装配运算符OUTDX、AL、3。对于关系运算符,关系运算符的操作数必须是两个数值或同一段的两个存储单位地址,结果必须是逻辑值,结果为true,表示为0 ffffh。如果结果为假,则显示为零。示例:AEQU80HBEQU88HMOVAL、AEQBMOVAH、ANEBMOVBL、ALTBMOVBH、AGTBMOVCL、ALEBMOVCH、ageb、4。分析/数字返回运算符、SEG变量或标签、变量或标签的段地址、OFFSET变量或标签、变量或标签的偏移返回、TYPE变量或标签、LENGTH变量、SIZE变量、变量或标签的类型值返回、DUP定义数据占用的单元格数返回;非DUP定义的数据,返回1。返回DUP定义数据占用的字节数。非DUP定义的数据,返回类型值。变量类型值:db: 1、dw: 2、DD: 4、dq: 8、dt: 10。标示类型值:near:-1、far:-2。、SIZE=TYPE*LENGTH,yes数据定义如下:databasementsat2000hbuf1db0、1、2、3、4、5、6、7、8、9 buf 2 dw 5 dup(0)DATAENDS:seg buf 1=装配运算符(PTR)、PTR变量/标签类型、常见应用程序之一:变量类型替代示例:数据定义如下:BUFWDW1234H、5678H为MOVAX、BUFW;暂时变更BUFW的单字属性包括位元组属性MOVAL、BYTEPTRBUFW、一般应用程式2:指定记忆体运算元类型范例:Incbx;编辑指示incbyteaptr bx错误。正确的INCWORDPTRBXSI;si;准确、分析:寄存器间接寻址、寄存器相对寻址、默认地址寻址或相对默认地址寻址等内存寻址方法很难确定操作数的类型特性,并且经常需要对操作数类型进行说明。常规应用程序3:与EQU一起定义新变量变量或标签EQU类型的PTR表达式,例如BUFWDW1234H、5678HBUFBEQUBYTEPTRBUFW;BUFB类型;属性是字节,其他属性与BUFW相同。MOVAX、BUFW;AX=1234HMOVAL,BUFB;AL=34H,6。组装运算子(THIS),格式:THIS类型可以建立指定类型的位址运算元,例如区段位址和位移位址等于下一个储存单位位址的PTR。示例:BUFBEQUTHISBYTEBUFWDW1234H、5678h。movax、BUFW;AX=1234HMOVBL、BUFB;BL=34H,BUFB的偏移地址和BUFW完全相同,但字节类型;BUFW是单词类型。,4.2汇编语言程序实现,汇编程序返回DOS方法,1 .标准方法mainprocfarpushdsmovax,0pushax.retmainendp,2 .如何调用dos功能.movah,4 chint 21 h,4.3汇编语言编程方法和应用程序;(1)问题分析包括已知条件、问题的性质、问题的规则和数学模型。注:有不需要或根本写不出数学模型的问题。但是,有了数学模型,可以使用很多行的有效计算方法。(2)决定算法是指在解决实际问题时,根据人们逻辑思维中的日常推理来寻找算法。如果已经有数学模型,则可以直接或间接利用某些现有计算方法。1 .编程阶段,4.3.1概述,(3)编写流程图,并采用流程图。(一)有助于理清解决问题的思路,理解和准备程序;(2)有利于程序修订和错误减少。(3)对于复杂的问题,可以绘制多级流程图,首先绘制粗方块图,然后逐步细化,绘制细方块图。流程图是程序算法的图形说明,它直观、图

温馨提示

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

评论

0/150

提交评论