1 / 25

第四章8086汇编语言基础

第四章8086汇编语言基础. 4.1 汇编语言的简介. 汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数 利用汇编语言编写程序的主要优点是可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序 在有些应用领域,汇编语言的作用是不容置疑和无可替代的 汇编程序设计的过程是与其他高级语言程序设计大致相同. 汇编语言源程序格式. 完整的汇编语言源程序由段组成 一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列

Download Presentation

第四章8086汇编语言基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章8086汇编语言基础

  2. 4.1 汇编语言的简介 • 汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数 • 利用汇编语言编写程序的主要优点是可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序 • 在有些应用领域,汇编语言的作用是不容置疑和无可替代的 • 汇编程序设计的过程是与其他高级语言程序设计大致相同

  3. 汇编语言源程序格式 • 完整的汇编语言源程序由段组成 • 一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列 • 需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点 • 所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内 • 通常,程序还需要一个堆栈段 • 源程序由语句序列构成

  4. 汇编语言源语句格式 ⑴执行性语句——执行性语句用于表达处理器指令(也称为硬指令),汇编后对应一条指令代码。由处理器指令组成的代码序列是程序设计的主体 标号:硬指令助记符 操作数,操作数;注释 ⑵说明性语句——说明性语句用于表达伪指令,指示源程序如何汇编、变量怎样定义、过程怎么设置等 名字 伪指令助记符参数,参数,…… ;注释

  5. 硬指令与伪指令 • 硬指令(Instruction)——使CPU产生动作、并在程序执行时才处理的指令 硬指令就是第2章学习的处理器指令,与具体的处理器有关、与汇编程序无关 • 伪指令(Directive)——不产生CPU动作、在程序执行前由汇编程序处理的说明性指令 伪指令与具体的处理器类型无关,但与汇编程序有关。不同版本的汇编程序支持不同的伪指令 • 硬指令和伪指令采用易于记忆的符合表达,这就是助记符

  6. 4.2 汇编语言的标记 • 标号是反映硬指令位置(逻辑地址)和属性的标识符,后跟一个冒号分隔 • 名字是反映伪指令位置(逻辑地址)和属性的标识符,后跟空格或制表符分隔,没有冒号 • 标识符(Identifier)一般最多由31个字母、数字及规定的特殊符号(如 _、$、?、@)组成,不能以数字开头。默认情况下,汇编程序不区别标识符中的字母大小写 • 一个源程序中,每个标识符的定义是唯一的,还不能是汇编语言采用的保留字

  7. 保留字(Reserved Word)是汇编程序已经利用的标识符(也称为关键字),主要有: • 硬指令助记符——例如:MOV、ADD • 伪指令助记符——例如:DB、DW • 操作符——例如:OFFSET、PTR • 寄存器名——例如:AX、CS • 预定义符号——例如:@data • 汇编语言大小写不敏感

  8. 处理器指令的操作数可以是立即数、寄存器和存储单元处理器指令的操作数可以是立即数、寄存器和存储单元 • 伪指令的参数可以是常数、变量名、表达式等,可以有多个,参数之间用逗号分隔 • 语句中由分号“;”开始的部分为注释内容,用以增加源程序的可读性 • 必要时,一个语句行也可以由分号开始作为阶段性注释 • 汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理

  9. 语句的4个组成部分要用分隔符分开 • 标号后用冒号,注释前用分号 • 操作数之间和参数之间使用逗号分隔 • 其他部分通常采用空格或制表符 • 多个空格和制表符的作用与一个相同 • MASM支持续行符 “\”

  10. 4.2 表 达 式 常量表示一个固定的数值,它又分 成多种形式 • 常数 • 字符串 • 符合常量 • 数值表达式

  11. 1.常数 • 指由10、16、2和8进制形式表达的数值,各种进制的数据以后缀字母区分,默认不加后缀字母的是十进制数

  12. 2.字符串 • 字符串常量是用单引号或双引号括起来的单个字符或多个字符 • 其数值是每个字符对应的ASCII码值 • 例如: ‘d’(等于64H) ‘AB’(等于4142H) ‘Hello, Assembly !’

  13. 3.符号变量 • 符号常量使用标识符表达一个数值 • MASM提供等价机制,用来为常量定义符号名 • 符号定义伪指令有“等价EQU”和“等号=”: 符号名 EQU数值表达式 符号名 EQU <字符串> ;MASM 5.x不支持 符号名 = 数值表达式 • EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。例如: X = 7 ;等效于:X qeu 7 X = X+5 ;“X EQU X+5”是错误的

  14. 4.数值表达式 • 数值表达式一般是指由运算符连接的各种常量所构成的表达式 • 汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以也是常量 • 表达式的数值在程序运行前的汇编阶段计算,所以组成表达式的各部分必须在汇编时就能确定 • 汇编语言支持多种运算符(表3.4) • 我们经常使用的是加减乘除(+ - * / ) • 例如: mov ax,3*4+5 ;等价于:mov ax,17

  15. 变量 • 变量实质上是指内存单元的数据,虽然内存单元地址不变,但其中存放的数据可以改变 • 变量需要事先定义才能使用 • 变量定义(Define)伪指令为变量申请固定长度为单位的存储空间,并可以同时将相应的存储单元初始化 • 定义后的变量可以利用变量名等方法引用其中的数据,即变量的数值

  16. 地址操作符 • 地址操作符取得名字或标号的段地址和偏移地址

  17. 类型操作符 • 类型操作符对名字或标号的类型属性进行设置 类型名 PTR 名字/标号 • 其中可以是BYTE、WORD、DWORD(依次表示字节、字、双字)等,或者是NEAR、FAR(分别表示近、远),还可以是由结构、记录等定义的类型 • 对变量: • LENGTHOF操作符获知某变量名指向多少个数据项 • SIZEOF操作符获知它共占用多少字节空间

  18. 关系操作符 • ASM—86的关系运算符有: • 相等(EQ) • 不等(NE) • 小于(LT) • 大于(GT) • 小于等于(LE) • 大于等于(GE)

  19. 算术运算符 • 算术运算符有: 1. 加(+) 2. 减(-) 3. 乘(*) 4. 除(/) 5. 取余(MOD) 6. 右移(SHR) 7. 左移(SHL)

  20. 属性运算符 ASM—86的属性运算符有: 一、PTR 格式:类型 PTR 地址表达式 功能:临时指定由地址表达式所确定的 存储单元的类型属性。 二、SHORT 当指令“JMP目标地址”中的目标地址与该指令下一条指令之间的距离在-128~+127直接单元 范围内的时,可以用SHORT运算符来告诉汇编程序 将JMP指令会变成两个字节的代码:第一字节为操作码第二字节为相对位移量(补码)。 三、THIS 格式:THIS 类型 功能:指定变量或标号的类型。 四、段跨越前缀 格式:段寄存器:地址表达式或段名:地址表达式 功能:用来改变地址表达式的段属性。 五、关于方括号[]

  21. 关于方括号 在8086汇编语言中,方括号[]用于表示一个 地址,如[BX],[BP+2]、[DI+X1]等。使用规则 如下: 1、只有BX、BP、DI、SI寄存器可以出现在方 括号内。 2、常数和数值表达式不能单独出现在方括号内。 3、BX和BP不得同时出现在同一方括号内。 4、方括号中的寄存器之间仅能进行加法。

  22. 分离运算符 分离运算符有HIGH和LOW它们可用在字类型的操作数之前,以截取该字的高位字节或低位字节。如指令“MOV AH,HIGH 0ABCDH”等效于“MOV AH,0ABH”。

  23. 4.3 语句 汇编语言中有两类语句:指令性语句和指示性语句。 一、指令性语句: 标号;指令助记符 操作数;注释 二、指示性语句: 名称 伪指令 操作数;注释

  24. 4.4 伪 指 令 ASM—86的伪指令有20条,是向汇编程序发出的命令,常用的伪指令有: 段定义伪指令SEGMENT/ENDS,ORG,ASSUME 过程定义伪指令PROC/ENDP 定义访问外部标识符伪指令EXTRN、PUBLIC 源程序终结伪指令END 数据/存储器定义伪指令DB、DW、DD 符号定义伪指令EQU 给存储单元命名伪指令LABEL 确定变量/标号类型伪指令BYTE、WORD、DWORD、NEAR、FAR。 这些指令的功能我们在以后的学习过程中逐渐介绍。

  25. 4.4 小 结 本章主要内容小结和基本要求: (1)汇编语言是面向机器的语言,是机器语言的符号表示。 (2)汇编语言程序的语句可分为两类:指令性语言和指示性语言。 (3)本章重点掌握源程序中语句书写的格式及功能,同时,还要知道数据定义语所定义的数据在内存中的存放地址。

More Related