汇编语言第4章.ppt_第1页
汇编语言第4章.ppt_第2页
汇编语言第4章.ppt_第3页
汇编语言第4章.ppt_第4页
汇编语言第4章.ppt_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

1、汇编语言程序设计,讲授人:杜春来,第4章 汇编语言程序格式,讲授人:杜春来,目 录,4.1 汇编程序的功能 4.2 伪操作 4.3 汇编语言的程序格式 4.4 汇编语言程序的上机过程,4.1 汇编程序的功能,用编辑程序建立ASM源文件 用masm/tasm/ml将ASM文件转换成OBJ文件 用link程序将OBJ转成EXE/COM文件 16位程序在DOS模式下执行,32位在windows下直接执行,编辑程序,x.asm,汇编程序,x.obj,连接程序,x.exe,汇编语言的建立及汇编过程,目 录,4.1 汇编程序的功能 4.2 伪操作 4.3 汇编语言的程序格式 4.4 汇编语言程序的上机过程

2、,1、处理器选择伪指令 2、段定义伪操作 3、存储模式伪指令 4、简化段定义伪指令 5、程序开始伪指令.STARTUP 6、程序终止伪指令.EXIT 7、汇编结束伪指令 8、数据定义及存储器分配伪操作 9、表达式赋值伪操作EQU 10、地址计数器与对准伪操作 11、基数控制伪操作,4.2 伪操作,4.2.1、处理器选择伪指令,处理器选择伪指令说明程序中使用哪一种CPU的指令集。,4.2.2、段定义伪操作,完整的段定义伪操作 Segment_name SEGMENT 。 Segment_name ENDS,一个例子 data_seg1 segment ;define data segment d

3、ata_seg1 ends data_seg2 segment ;define extra segment data_seg2 ends code_seg segment assume cs:code_seg,ds:data_seg1,es:data_seg2,明确段与段寄存器的关系 ASSUME register_name : segment_name ASSUME NOTHING 可以取消前面由ASSUME所指定的段寄存器,start: mov ax, data_seg1 mov ds,ax mov ax,data_seg2 mov es,ax . code_seg ends end st

4、art,为了进一步对段定义进行控制,SEGMENT伪操作还可以增加类型以及属性说明 seg_name SEGMENT align_type combine_type use_type class 1. Align定位类型 para: 指定段的起始地址必须从小段边界开始,即段起始地址最低16位为0,确保偏移地址从0开始 byte: 该段可以从任何地址开始,起始偏移地址可以不为0 word: 该段必须从字的边界开始,即段的起始地址必须偶数 dword: 该段必须从双字的边界开始,即段的起始地址必须是4的倍数 page: 该段必须从页的边界开始,即段的起始地址必须是256的倍数,2. 组合类型 pr

5、ivate: 该段为私有段,在连接时候不同其他模块中的同名段合并 public: 该段在连接时,可以把不同模块中的同名段相连接形成一个段,其连接次序由连接命令指定 common: 该段在连接时,可以把不同模块中的同名段相重叠形成一个段,其连接次序由连接命令指定 memory: 与public同 stack: 将不同模块中的同名段组合形成一个堆栈段。长度为原来各个段的总和,栈顶指针自动指向新堆栈段顶部,3. 使用类型 (仅仅适用于386以及后续机器,用来说明是采用16位寻址还是32位寻址) USE16: 采用16位寻址 USE32: 采用32位寻址 4. 类别(class) 在引号中给出的是连接

6、时候组成段组的类型名。类别说明并不能把相同类别的段合并起来,但在连接后形成的装入模块中,可以将他们的位置靠在一起,4.2.3.存储模式伪指令,存储模式决定一个程序的规模,确定进行子程序调用、指令转移和数据访问的缺省属性,.MODEL 存储模式 ,语言类型 ,操作系统类型 ,堆栈选项,存储模式有如下几类: TINY SMALL COMPACT MEDIUM LARGE HUGE FLAT,TINY微型模式,微型模式下所有的段地址寄存器都被设置为同一个值 代码段、数据段、堆栈段都在同一个段内,不大于64KB;访问操作数或指令都只需要使用16位偏移地址。 微型模式是MASM 6.0才引入的,用于创建

7、COM类型程序。,TINY存储模型例子,SMALL小型模式,在小型模式下,一个程序至多只能有一个代码段和一个数据段,每段不大于64KB。 这里的数据段是指数据段、堆栈段和附加段的总和,它们共用同一个段基址,总长度不可超过64KB;因此小模式下程序的最大长度为128KB。 调用类型和数据指针缺省分别为近调用和近指针。 一般的实模式程序都可用这种模式。,COMPACT紧凑模式,紧凑模式下,代码段被限制在一个不大于64KB的段内;而数据段则可以有多个,超过64KB。 这种模式下的调用类型缺省为近调用;而数据指针缺省为远(FAR)指针,这是因为必须用段地址来区别多个数据段。 紧缩方式适合于数据量大但代

8、码量小的程序。,MEDIUM中型模式,中型模式是与紧凑模式互补的模式。中型模式的代码段可以超过64KB,有多个;但数据段只能有一个不大于64KB的段。 这种模式下的数据指针缺省为近指针;但调用类型缺省是远(FAR)调用。 中型模式适合于数据量小而代码量大的程序,LARGE大型模式,大型模式允许的代码段和数据段都有多个,都可以超过64KB;但全部的静态数据(不能改变的数据)仍限制在64K字节内。 大型模式下的调用类型和数据指针缺省分别为远调用和远指针。 大型模式是较大型程序通常采用的存储模式。,HUGE巨型模式,巨型模式与大型模式基本相同,只是静态数据不再被限制在64K字节之内。,FLAT平展模

9、式,平展模式用于创建一个32位的程序,它只能运行在32位x86 CPU上。 使用FLAT的模式语句前要使用32位x86 CPU的处理器说明伪指令。 DOS下不能使用FLAT模式,而编写32位Windows程序时,必须采用FLAT模式。,语言类型,完整的MODEL语句还可以选择“语言类型”,例如C、PASCAL、STDCALL、SYSCALL等,表示采用指定语言的命名和调用规则,它将影响PUBLIC、EXTERN等伪指令。,.MODEL 存储模式 ,语言类型 ,操作系统类型 ,堆栈选项,操作系统类型与堆栈选项,操作系统类型 说明程序运行于哪个操作系统下:OS_DOS(默认)或 OS_OS2 堆栈

10、选项 NearStack:将堆栈段和数据段组合到一个DGROUP段中,DS、SS均指向DGROUP段 当采用的存储模式为tiny、small和medium时,默认项为NearStack; FarStack: 数据段和堆栈段不合并 当采用的存储模式为Compact、Large和Huge时,默认项为FarStack;,.MODEL 存储模式 ,语言类型 ,操作系统类型 ,堆栈选项,4.2.4、简化段定义伪指令,简化段定义伪指令指明一个逻辑段的开始,同时自动结束前面的一个段 采用简化段定义伪指令前,需有.model语句 使用简化段定义,各段名称和其他用户所需的信息可以使用MASM预定义符号,例如:

11、data表示由.data等定义的数据段的段名,.STACK 大小;堆栈段开始 .DATA;数据段开始 .CODE 段名;代码段开始,实模式应用程序的基本结构,.model small, stdcall ;定义程序的存储模式(一般采用small,不能用flat) .386 ;可选,如果有该语句,可以使用386指令集 .stack;定义堆栈段 .data;定义数据段 ;数据定义 .code;定义代码段 .startup;程序起始点 ;程序代码 .exit 0 ;程序结束点,返回DOS ;子程序代码 end;汇编结束,32位应用程序的基本结构,.386 ;必须是第一条非注释语句,说明这是一个32位应

12、用程序 .model flat, stdcall ;定义程序的存储模式(32位应用程序中必须采用flat) .stack 4096;定义堆栈段 .data;定义数据段 ;数据定义 .code;定义代码段 start:;程序起始点 ;程序代码 ret ;程序结束点,返回WINDOWS ;子程序代码 end start;汇编结束,简化段定义伪指令(进一步说明),.code name 对于多个代码段模型,应该为每个代码段指定段名 .data细分 .data?未初始化数据段 .data 初始化数据段 fardata name,远初始化数据段,如不指定段名,则用FAR_DATA命名 fardata? n

13、ame, 远未初始化数据段,如不指定段名,则用FAR_BSS命名 .const 常数段,堆栈段伪指令,.STACK 大小 堆栈段伪指令.STACK创建一个堆栈段,段名是:stack。 它的参数指定堆栈段所占存储区的字节数,默认是1KB(= 1024 = 400h字节)。,段组定位伪指令,将各个数据段组成一个段组GROUP,以便程序在访问各个数据段的时候使用一个数据段寄存器DS,(目的:就是为了找数据方便),Grp_name GROUP segment ,segment,一个例子: Dseg1 Segment word public DATA Dseg1 ENDS Dseg2 Segment w

14、ord public DATA Dseg2 ENDS DATAGROUP GROUP Desg1,Dseg2 CSEG segment para public CODE assume cs:cseg, ds:datagroup,Start: mov ax,datagroup mov ds,ax CSEG ENDS END start,4.2.5. 程序开始伪指令,按照CPU类型、存储模式、操作系统和堆栈类型,产生程序开始执行的代码;同时还指定程序开始执行的起始点 在32位应用程序中不能使用.STARTUP语句。,.STARTUP (简化类型),4.2.6.程序终止伪指令,产生终止程序执行返回操

15、作系统的指令代码 它的可选参数是一个返回的数码,通常用0表示没有错误。例如.exit 0对应的代码是: mov ax,4c00h int 21h DOS功能调用的4ch子功能(返回DOS): 入口参数:AH4ch,AL返回数码 在32位应用程序中不能使用.EXIT语句。,.EXIT 返回参数,4.2.7.汇编结束伪指令,指示汇编程序MASM到此结束汇编过程 源程序的最后必须有一条END语句 可选的标号用于指定程序开始执行点,连接程序将据此设置CS : (E)IP值 采用了.startup伪指令就不需要再用“end 标号”指明开始执行点,但还要有end伪指令,END 标号 (注意前面没有点符号“

16、.” ),不要糊涂 程序终止和汇编结束是两码事,4.2.8.数据定义及存储器分配伪操作,变量定义(Define)伪指令为变量申请固定长度的存储空间,并可同时将相应的存储单元初始化 变量名 伪指令助记符 初值表,变量定义伪指令最常使用,变量名,变量名为用户自定义标识符,表示初值表首元素的逻辑地址;用这个符号表示地址,常称为符号地址 变量名可以没有。这种情况,汇编程序将直接为初值表分配空间,无符号地址 设置变量名是为了方便存取它指示的存储单元,伪指令助记符,变量定义伪指令根据申请的主存空间单位分类 byte定义字节伪指令 word定义字伪指令 dword定义双字伪指令 fword定义3字伪指令 q

17、word定义4字伪指令 tword定义10字节伪指令,初值表,初值表是用逗号分隔的参数 由数值常数、表达式或?、DUP组成 ?表示初值不确定,即未赋初值; DUP表示重复初值 DUP的格式为: 重复次数 DUP(重复参数),定义字节单元伪指令,字节定义伪指令BYTE或者DB,用于分配一个或多个字节单元,并可以将它们初始化为指定值。 初值表中每个数据一定是字节量(Byte),可以是0255的无符号数或是-128+127带符号数,也可以是字符串常数,定义字单元伪指令,字节定义伪指令WORD和DW,用于分配一个或多个字单元,并可以将它们初始化为指定值。 初值表中每个数据一定是字量(Word),一个字

18、单元可用于存放任何16位数据,如一个段地址、两个字符、0 65535之间的无符号数或-32768 +32767之间的带符号数。,定义双字单元伪指令,双字定义伪指令DWORD和DD,用于分配一个或多个双字单元,并可以将它们初始化为指定值。 初值表中每个数据是一个32位的双字量(Double Word) 有符号或无符号的32位整数 表达16位段地址(高位字)和16位的偏移地址(低位字)的远指针 32位偏移地址,其他数据定义伪指令,FWORD和DF用于为一个或多个6字节变量分配空间及初始化。 6字节常用在32位CPU中表示一个48位远指针(16位段选择器 : 32位偏移地址)。 QWORD和DQ用于

19、为一个或多个8字节变量分配空间及初始化。 8字节变量可以表达一个64位整数。 TBYTE和DT用于为一个或多个10字节变量分配空间及初始化。,4.2.9.表达式赋值伪操作EQU,=,利用一个标识符表达的一个数值,MASM提供等价机制,用于常量定义符号定义伪指令: 等价EQU伪指令 符号名 EQU 数值表达式 符号名 EQU 等号=伪指令 符号名 = 数值表达式 常数若使用有意义的符号名来表示,可以提高程序的可读性,同时更具有通用性,实例,符号定义 cr equ 0dh lf = 0ah RealMode equ .model small, stdcall 符号应用(左边程序段等价右侧的符号形式

20、) .MODEL small, stdcall ;可以写成:RealMode,EQU 和 = 的区别,EQU用于数值等价时不能重复定义符号名,但伪指令“=”允许有重复赋值,例如: X = 7;正确 X EQU 7;正确 X = X+5;正确 X EQU X+5 ;错误,4.2.10.地址计数器与对准伪操作,定位伪指令控制数据的偏移地址 ORG 参数 $ 地址计数器 EVEN;从偶地址开始 ALIGN n;从n的整数倍地址开始,ORG,ORG伪指令是将当前偏移地址指针指向参数表达的偏移地址: ORG 100h;从100h处安排数据或程序,ORG 参数 ;使它后面的数据或指令从参数指定的地址开始,

21、符号“$”,符号“$”表示当前偏移地址值。 例如 org 100h word 1,2,$+4,$+4 又如: array byte 12,23,34 len EQU $-array ;len=array变量所占的字节数 在指令中$表示这条指令所在的地址,Org 和 $ 同时使用的例子,ORG 100h;从100h处安排数据或程序 ORG $+10 ;使偏移地址加10,即跳过10个字节空间 MASM中,符号“$”表示当前偏移地址,EVEN,EVEN伪指令使当前偏移地址指针指向偶数地址 若原地址指针已指向偶地址,则不作调整;否则将地址指针加1,使地址指针偶数化。 EVEN可以对齐字量数据。,EVE

22、N;使它后面的数据或指令从偶地址开始,ALIGN,ALIGN伪指令是将当前偏移地址指针指向n(n是2的乘方)的整数倍的地址 若原地址指针已指向n的整数倍地址,则不作调整;否则将指针加以1 n1中的一个数,使地址指针指向下一个n的整数倍地址。 ALIGN伪指令中的n值是2的乘方(2、4、8、),而且要小于所在段的定位属性值。,ALIGN n ;使它后面的数据或指令从n的整数倍地址开始,ALIGN示例,ALIGN 4 ;使下一个偏移地址开始于双字边界,即对齐了双字边界。,4.2.11.基数控制伪操作,其中n为2 16范围内任何数值。 .RADIX 16 ;将缺省基数改为16,即没有后缀的数值表示十

23、六进制数,非十六进制数均应使用后缀字母,包括十进制数。,.RADIX n,目 录,4.1 汇编程序的功能 4.2 伪操作 4.3 汇编语言的程序格式 4.4 汇编语言程序的上机过程,4.3 汇编语言的程序格式,1. 名字项 (略) 2. 操作项 (略) 3. 操作数项 1.算数操作符 2.逻辑与移位操作符 3.关系操作符 4.数值回送操作符 5.属性操作符 6.注释项 (略),4.3.1算数操作符,实现加、减、乘、除、取余的算术运算 mov ax,3*4+5;等价于 mov ax,17 其中MOD也称为取模,它产生除法之后的余数, 19 mod 7 = 5 加+和减-运算符还可以用于地址表达式

24、 除加、减外,其他运算符的参数必须是整数,4.3.2 逻辑运算符与移位运算符,1.逻辑运算符 2.移位运算符,4.3.2.1 逻辑运算符,实现按位相与、相或、异或、求反的逻辑运算 or al,03h AND 45h ;等价于 or al,01h,4.3.2.2.移位运算符,实现对数值的左移、右移的逻辑操作;移入低位或高位的是0 格式为: 数值表达式 SHL/SHR 移位次数 mov al,0101b SHL (2*2) ;等价于 mov al,01010000b,4.3.3.关系运算符,用于比较和测试符号数值,MASM用0FFFFH(补码 -1)表示条件为真,MASM用0000H表示条件为假

25、mov bx,(PORT LT 5)AND 20)OR(PORT GE 5)AND 30) ;当PORT5时,汇编结果为mov bx,20 ;否则,汇编结果为mov bx,30,4.3.4. 数值回送操作符,TYPE 名字/标号 返回以字节数表示的类型 LENGTH 变量名 回送分配给变量的单元数 SIZE 变量名 回送分配给变量的字节数 OFFSET (略) 回送变量或标号的偏移地址 SEG (略) 回送变量或标号的段地址,TYPE 名字/标名,返回表明名字或标号类型的一个字量数值 如果表达式是变量,对字节、字和双字变量依次返回1、2和4; 如果表达式是标号,对标号近和远转移依次返回1,2

26、如果表达式是常数,返回0 例子: mov ax,TYPE w_var;汇编结果为mov ax,2 mov ax,TYPE n_jump ;汇编结果为 mov ax,0ffffh(near标号),其他几个回送操作符,操作符SIZE 返回整个变量占用的字节数 LENGTH返回整个变量的数据项数(即元素数) SIZEOF LENGTH TYPE OFFSET (略) 返回变量或标号的偏移地址 SEG (略) 返回变量或标号所在的段地址,4.3.5. 属性操作符,PTR 段前缀 (略) SHORT短转移 (略) THIS High、Low HighWORD和LowWORD (略),PTR,PTR操作符使名字或标号具有指定的类型 类型名可以是 BYTE/WORD/DWORD/FWO

温馨提示

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

评论

0/150

提交评论