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

下载本文档

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

文档简介

1、3.2汇编语言程序设计,机器语言:计算机可以直接理解和执行的二进制代码,代码难记,编程容易出错。每个中央处理器都有自己的指令系统。面向微处理器的指令语言,用指令助记符表示,便于书写和记忆。本质上,它是机器语言的符号表示,汇编语言对应于机器代码。针对特定的中央处理器,效率低,通用性差,用于实时控制和硬件接口。高级语言:面向过程的语言,独立于特定的机器,符合人们的思维习惯,通用性强,目标程序编译时间长,执行速度慢。3.2.1汇编语言的基本元素,1。汇编语言1的段结构和汇编过程。源程序结构由几个以结束伪指令结束的逻辑段(段和大小)组成。逻辑段由语句序列(指令、伪指令、宏指令、注释、空行)组成。除了控

2、制系统段,其他段注册用户设置程序指令,返回操作系统、名称和数据段;在此输入数据段代码“数据结束堆栈段”;在此输入堆叠段代码:堆叠结束代码段假设cs:代码,cs:数据,cs:堆栈开始3360移动,数据;分段地址分配,MOV直拨,MOV直拨,堆栈;分段地址分配MOV系统公司;根据核心代码movah和4ch在此输入代码;回到操作系统INT 21H CODES ENDS END START,例如,需要添加三个16位数字,并且总和仍然是16位数字。名称ADDHEX堆栈段statpn DB 200 DUP(0);输入堆栈段代码顶部命令长度stapn堆栈结束数据段num 1 dw 1234h num 2 d

3、w 5678h num 3 dw 0 abcdh ans dw?输入数据段代码数据结束代码段假设cs:代码,ds:数据,ss:堆栈开始3360 mov ax,数据;段地址分配movds,ax,movax,堆栈;分段地址分配MOV系统、MOV系统、MOV系统、数字1加法系统、数字2加法系统、数字3 MOV系统、axmovah、4ch返回操作系统INT 21H CODE ENDS END START,例如:从1开始查找50个连续奇数的总和,并将其存储在总和数据段总和dw0中;在此输入数据段代码data ends stacks段db 200 dup(0);在此输入堆叠段代码:堆叠结束代码段假设cs:

4、代码,cs:数据,cs:堆栈开始3360移动,数据;段地址分配movds,ax,movcx,50;根据核心代码movax,0movbx,1next3360addax,bx Inc bx Inc bx dec cxjne下一个mov sum,ax movah,4ch,在此输入代码。返回操作系统INT 21H代码结束结束开始,2。装配过程、程序编辑、装配、连接、2。汇编语言语句类型和格式。汇编语句类型指令语句:它是一个8086指令系统,对应于机器指令,是一个可执行语句。指示性语句:包括伪操作命令和伪操作符,不产生目标代码,是非执行指令,向汇编程序提供所需的相关信息,仅在汇编过程中起作用。宏指令语句

5、:简化汇编源程序的设计,用宏指令定义一个指令序列,在汇编过程中用这个序列代替宏指令。2.语句格式。用汇编语言编写的源程序由许多语句组成。每个语句由14个部分组成,每个部分由一个空格(至少一个)分隔,其格式为:3指令语句描述,操作数:标签,分隔符,常量,变量,表达式,寄存器。常量操作数:数字常量、字符常量、数字符号名、数字表达式。寄存器操作数:各种寄存器。内存操作数:标签、变量、4、运算符和伪运算符;1)运算符包括算术运算符、逻辑运算符和关系运算符;算术运算符包括-、*、/、MOD、SHL(向左移动一位相当于乘以2)和SHR(向右移动一位相当于除以2)。例如,ARRAY array定义如下:Ar

6、rayDB 1,2 8 TRY DB 20 MOV AX,30 * 5 MOVAX,(TRY-ARRAY),逻辑运算符当逻辑运算符包括四个逻辑运算符:与、或、非和异或时,它们只能对常量进行运算,并且得到的结果也是常量。,例如:MOV,MOV,8CH和73H,MOV,8CH或73H,MOV,8CH异或,73H,关系运算符,包括EQ,NE,LT,GT,LE和ge。关系运算符的两个操作数必须是同一段中两个存储单元的数据或地址。运算的结果是一个数值。如果结果为真,所有输出为1;如果结果为假,所有输出都为0。示例:MOV AX,10H GT 16 ADD BL,6 EQ 0110B,SEG采用段地址运算

7、符,2)值运算和属性运算。分析操作员,偏移量采用偏移量地址运算符。类型采用类型运算符,LENGTH取变量中包含的存储单元数。SIZE取变量中包含的存储区域的总字节数。PTR,合成运算符,函数:PTR将左边的属性赋给右边的变量、标签或值,以生成新的内存地址操作数。新内存操作数的段地址和段内偏移量与PTR运算符右侧的操作数相同。PTR给出了分配内存的附加定义,但没有重新分配内存。例如:n1db15h,36h n2dw1122h,3344h lo3360moax,字ptrn1将N1类型转换为MOV BL、字节PTR N2,其单词与AX类型匹配;将N2类型转换为字节以匹配BL类型,或使用PTR更改距离

8、属性。例如, JMP远东有限公司使JMP安排在其他代码段,并可用于实现段间转移。SHORT运算符。HIGH/LOW,格式:HIGH/LOW变量或标签,字节分隔运算符,对于数字或地址表达式,HIGH分隔高字节,LOW分隔低字节,例如:K1equa0abcdhK2equ1234h movah,HIGH K1 MOV BL,LOW K2,3)其他运算符,优先级,3.2.2伪指令语句,指令语句:汇编程序将它们翻译成机器代码,并命令8086执行相应的操作。伪指令语句:汇编程序不把它们翻译成机器代码,而只是在汇编过程中指导汇编程序做一些操作,它不占用存储单元本身。*数据定义语句数据库,DD等。*标签赋值语

9、句EQU,*段定义语句SEGMENTendS *段分配语句ALTERED *过程定义语句PROCENDP *程序开始和结束语句ORG,END,伪指令主要分为以下几类:1 .数据定义语句、数据库、数据仓库和数据仓库等。可以用来定义变量和预置记忆,变量后不能带冒号,并且任何变量都有以下三个属性。(1)段属性是变量使用的段;(2)段内偏移属性;(3)变量类型:字节、字、双字等。变量定义伪指令,函数:定义一个数据存储区。数据存储区的类型由所用的数据定义伪指令指定(其中数据库/数据字/数据字/DQ/数据字分别定义为字节类型/字类型/双字体/四字/十字节);存储区中的数据数量由后续表达式的数量(包括重复因

10、子)决定;并为每个存储单元提供初始值。根据不同的表达方式,可以有以下几种常见的形式。a .该表达式是一个预置的常量项表达式,以及表达式存储的格式,例如:da1db10h,52hda2dw1122h,34hda3dd5 * 20h,0ffeeh,da1,10,52,22,11,DA3,00,示例:表达式为字符串fist DB hello second dwok三db ok、FIRSt、48、45、4c、4c、4f、4b、4f、4b、second、三、hello、o、k,表示仅分配了存储单元,并且其初始值不确定。比如SUMDW?分配一个单词单元F1DB?分配一个字节单位。该表达式为预设地址表达式,

11、如:表-0FFDW表;表的偏移d-ptr-t DDtable;表的16位偏移量和段地址。该表达式是预先设置并重复的。例如zipsdb100dup (0) db2dup (0,3dup (1),2。表达式赋值语句,1。赋值语句EQU,函数:为常量、变量、表达式或其他符号定义一个名称,但不要应用内存分配。,例如:counteq100一个常数值被分配给符号名countdataequacount2表达式值被赋给符号名dataa1eqbxsi索引地址存储单元的内容被分配给符号名a1b1 equoffset a1偏移地址值被分配给符号名b1c1equaadd加法指令被分配给符号名称C1。注意:清除语句可以

12、释放某个标签的分配,以便以后可以重新定义它。清洗C1;C1不再取代加。2.等号语句=,函数:等号语句“=”具有与EQU语句相同的函数。唯一的区别是,EQU左侧的标签不允许重新定义,而“=”定义的语句允许重新定义。第三章。段定义语句,定义模式:段名称,定位类型,组合模式,分类名称语句,段名称ENDS,格式:假设CS:段名称,DS:段名称,ss:段名称,ES:段名称,函数:定义4个逻辑段并指出段与段寄存器之间的关系。4.流程定义语句,其中流程名称是为流程指定的名称,与变量和标签的定义方法相同。功能:将具有一定功能的程序段设计成一个过程(子程序),便于实现模块化程序设计。主程序段主程序段;过程定义,

13、远程过程属性RET SPD EDNP调用SPD;MCODE ENDS是在同一个段中调用的,例如,过程的定义和调用格式,NCODE SEGMENT CALL SPD远程过程调用ENDS END MAIN,1。名称和结束伪指令。功能:将模块定义为独立的装配单元。当输出汇编语言程序的列表文件时,程序名将打印在每页的开头。如果从源程序中省略了NAME,源文件名将被用作目标模块的名称。5.程序开始和结束语句。注意:一个模块是一个独立的装配单元,装配处理只进行到模块结束语句结束。示例:代码段开始:sub 1 proc靠近sub 1 endp代码结束开始,2.ORG,格式:org expression,函数

14、:为汇编程序设置位置指针,并指定以下语句的起始偏移量地址。表达式是给定的偏移地址。通常,SEGMENT定义语句指示段的起点,偏移地址为0。段中每个语句或数据的地址可以根据段地址类推确定。当用户请求将指令或数据指定为指定地址时,ORG可用于更改指令或数据。例如:将数据段地址改为ORG,数据段org 100h a1 db 10h,20h,30hA1偏移地址为100H ORG 200H A2 DW 3031H,3233HA1偏移地址为200小时数据结束。6.宏指令,一般格式是:宏指令名宏形式参数表宏体ENDM。在用汇编语言编写的源程序中,如果某些程序段需要多次使用,为了简化程序编写,这个程序段可以被

15、一个宏指令代替,当汇编程序汇编这个宏指令时,它将生成源程序所需的代码。例如:SHIFT MACRO MOV CL,4 SAL AL,Cl ENDM,代码段:MOV AX,3H SHIFT MOV BX,6H,代码段:MOV AX,3H MOV CL,4 SAL AL,C1 MOV BX,6H,外部伪指令,格式:PUBLIC符号表,函数:用于解释在本模块中定义的那些常量、变量和标签(包括过程),例如:PUBLIC ABC、BCD、CDE,格式:EXTRN符号:类型,函数:指示需要在本模块中引用但已定义的符号(包括常量、变量、标签和过程)符号的类型(BYTE、WORD、DWORD、NEAR、FAR和ABS(符号常数)必须与它们在其他模块中,3.2.3汇编程序设计、程序设计的基本

温馨提示

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

评论

0/150

提交评论