第3章 汇编语言程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

THIS运算符 该运算符和“=”(或EQU)伪指令连用,把 它后面指定的类型属性或距离属性赋给当前的变 量或标号。 常用的格式为: 变量或标号=THIS属性 例:GAMA=THIS BYTE ;变量GAMA的类型属性定 义为字节 ST=THIS FAR ;标号ST赋予远标号属性
6. 其它运算符

错误
错误
调试程序,如 DEBUG.EXE
调 试
应用程序
错误
伪指令(汇编指令)
3.2 常量、变量和标号
汇编语言的数据可以简单分为常量和变量 常量可以作为硬指令的立即数或伪指令的参 数,变量主要作为存储器操作数 汇编语言语句中的名字和标号具有逻辑地址 和类型属性,主要用做地址操作数,也可以 作为立即数和存储器操作数 本节将详细讨论语句中的参数和操作数、名 字和标号,并引出相关的伪指令和操作符
3.2.2 数据定义伪指令
用来定义一个存贮单元的符号名,并初始化该单 元或由该单元开始的若干个连续单元。初始化单 元就是将一个确定的数据或不确定的值(?)放 入指定的内存单元,即把其后的数据存入指定的 存贮单元,也可以只分配存贮空间不存入具体的 数值 变量名 助记符 操作数,…操作数;注释 DB定义字节,占用一个字节空间。 DW定义字,占用一个字空间。 DD定义双字,占用两个字空间
3.1 标号、名字与标识符
标号是反映硬指令位置(逻辑地址)和属性的标 识符,后跟一个冒号分隔 名字是反映伪指令位置(逻辑地址)和属性的标 识符,后跟空格或制表符分隔,没有冒号 标识符(Identifier)一般最多由31个字母、数字 及规定的特殊符号(如 _、$、?、@)组成,不 能以数字开头。默认情况下,汇编程序不区别标 识符中的字母大小写 一个源程序中,每个标识符的定义是唯一的,不 能用汇编语言的保留字
保留字
保留字(Reserved Word)是汇编程序已经 利用的标识符(也称为关键字),主要有: 硬指令助记符——例如:MOV、ADD 伪指令助记符——例如:DB、DW 操作符——例如:OFFSET、PTR 寄存器名——例如:AX、CS 预定义符号——例如:@data
汇编语言大小写不敏感
操作数和参数
处理器指令的操作数可以是立即数、寄存器 和存储单元 伪指令的参数可以是常数、变量名、表达式 等,可以有多个,参数之间用逗号分隔
注释
语句中由分号‚;‛开始的部分为注释内容, 用以增加源程序的可读性 必要时,一个语句行也可以由分号开始作为 阶段性注释 汇编程序在翻译源程序时将跳过该部分,不 对它们做任何处理
SHORT运算符 当转移指令的目标地址与该指令之间的距离在 -128~+127字节范围内,可用SHORT运算符进行说明, 以保证汇编程序能为该指令生成最短的机器码,从 而提高运行效率。 例:L1:JMP SHORT L2 ┆ L2:MOV AX,BX 标号L1、L2之间的字节距离小于127字节,称为短转 移
其它运算符(续)
② 圆括号“( )”运算符 用来改变被括运算符的优先级别
③ 方括号“[ ]”运算符 多用在存储器操作数的表达式中
注意1
运算规则: a.方括号的内容表示存储器操作数的偏移地址
b. 有多对方括号顺序排列时,操作数的偏移地址等 于各方括号内容之和 c. 一个常量后面跟有方括号时,偏移地址等于该常 量与方括号内容之和 d.一个变量后面跟有方括号时,偏移地址等于该变 量的偏移地址与方括号内容之和
由0 ~ 9、A ~ F数字组成,以字母H 64H,0FFH 十六进制 (h)结尾,以字母开头的常数需要 0B800H 加一个前导0 由 0和 1两个数字组成,以字母 B(b) 01100100B 二进制 结尾
3.2.1.2 字符串
字符串常量是用单引号或双引号括起来的 单个字符或多个字符 其数值是每个字符对应的ASCII码值 例如: ‘d‟(等于64H) ‘AB‟(等于4142H) ‘Hello, Assembly !‟
3. 关系运算符
EQ(等于)、NE(不等)、LT(小于)、GT(大 于)、LE(小于等于)、GE(大于等于) 两个运算对象进行比较操作,若满足条件,表示运 算结果为真“TRUE”,输出结果为全“1”;若比较后 不满足条件为假“FALSE”,输出结果为全“0” 例: MOV AX,5 EQU 101B ;等效于MOV AX,0FFFFH MOV AL,64H GE 100 ;等效于MOV AL,0FFH MOV BH,10H GT 16 ;等效于MOV BH,00H
X X =7 = X+5 ;等效于:X equ 7 ;“X EQU X+5”是错误的
例1
ONE EQU 1 DATA=2*12H MOV AX,DATA+ONE 执行上述程序后,即把25H送到AX中
3.2.1.4 数值表达式
数值表达式一般是指由运算符连接的各种 常量所构成的表达式 汇编程序在汇编过程中计算表达式,最终 得到一个确定的数值,所以也是常量 表达式的数值在程序运行前的汇编阶段计 算,所以组成表达式的各部分必须在汇编 时就能确定 汇编语言支持多种运算符
算术运算符、逻辑运算符、关系运算符、分析运算符、设 置属性运算符、其它运算符
1. 算术运算符
+(加)、-(减)、*(乘)、/(除)、MOD(模 除)、SHL(左移)、SHR(右移)。 注意点:除(/)只取商,模除(MOD)只取余, SHL一次相当于*2,SHR一次相当于/2。 例:MOV AX,15*4/7 ADD AX,60 MOD 7 MOV CX,-2*30-10
变量和标号的类型值对应关系
类 变

型 BYTE WORD DWORD
类型值 1 2 4
QWORD TWORD NEAR FAR
8 10 -1 -2
标 号
分析运算符(续)
④ LENGTH运算符 取数组变量元素个数运算符,如果变量是用重复数 据操作符DUP说明的,则返回DUP前面的数值(即重 复次数);如果没有DUP说明,则返回值总是“1”。 例3:KA DB 10H DUP(0) KB DB 10H,20H,30H KC DW 20H DUP(0,1,2DUP(2)) KD DB ‟ABCDEFGH‟ MOV AL,LENGTH KA ;AL←10H MOV BL,LENGTH KB ;BL←1 MOV CX,LENGTH KC ;CX←20H MOV DX,LENGTH KD ;DX←1
3.2.1 常量
常量表示一个固定的数值,它又分成多种形式
1. 2. 3. 4.
常数 字符串 符号常量 数值表达式
3.2.1.1 常数
指由10、16、2和8进制形式表达的数值,各种进 制的数据以后缀字母区分,默认不加后缀字母的 是十进制数
十进制 由0 ~ 9数字组成,以字母D(d)结 100,255D 尾(缺省情况可以省略)
分隔符
语句的4个组成部分要用分隔符分开 标号后用冒号,注释前用分号 操作数之间和参数之间使用逗号分隔 其他部分通常采用空格 多个空格的作用与一个相同 MASM支持续行符 ‚\”
第3章: 汇编语言程序的开发过程(附录B) 文本编辑器,如 EDIT.COM 编 辑
错误
源程序:文件名.asm 汇编程序,如 ML.EXE 汇 编 目标模块:文件名.obj 连接程序,如 LINK.EXE 连 接 可执行文件:文件名.exe
注意2
带方括号的地址表达式遵循的规则: a.只有BX、BP、SI、DI可在方括号中出现 b.不允许BX、BP同时出现在同一个地址表达式中 c.不允许SI、DI同时出现在同一个地址表达式中 d.当多个寄存器出现在方括号中时,只能作加运算 e. 当方括号中包含BP,则隐含使用SS提供段地址,否 则均隐含使用DS提供段地址
4. 分析运算符
Βιβλιοθήκη Baidu
分析运算符的操作对象:必须是存储器操作数,即 变量、标号或过程名 使用格式为: 取值运算符 变量或标号 返回的结果是一个数值常量。 ① SEG运算符 取段地址运算符,该运算返回变量或标号所在段的 段地址(字常量) 例:MOV BX,SEG BUF ;BX←变量BUF的段地址
分析运算符(续)
名字 伪指令助记符 参数,参数,…… ;注释
硬指令与伪指令
硬指令(Instruction) ——使 CPU产生动作、并 在程序执行时才处理的指令 硬指令就是第2章学习的处理器指令,与具体的处 理器有关、与汇编程序无关 伪指令(Directive)——不产生CPU动作、在程 序执行前由汇编程序处理的说明性指令 伪指令与具体的处理器类型无关,但与汇编程序 有关。不同版本的汇编程序支持不同的伪指令 硬指令和伪指令采用易于记忆的符 号表达,这就是助记符
2. 逻辑运算符
AND、OR、XOR、NOT四种 逻辑运算符:只出现在语句的操作数部分,运算在 汇编时完成; 逻辑操作指令:只出现在指令的操作码部分,运算 在执行指令时完成。 例:MOV AL,NOT10101010B ;等效于 MOV AL,01010101B OR AL,10100000B OR 00000101B ;等效于 OR AL,10100101B XOR AX,0FA0H XOR 0F00AH ;等效于 XOR AX,0FFAAH
分析运算符(续)
⑤ SIZE运算符 取数组变量总字节数运算符,该运算符返回数组变 量所占的总字节数。 ⑥ HIGH运算符:取地址表达式或16位绝对值高8位 例:CONST EQU 0ABCDH 则:MOV AH,HIGH CONST 将汇编成: MOV AH,0ABH ⑦ LOW运算符 取地址表达式或16位绝对值低8位。 在上例中,MOV AL,LOW 0ABCDH 将汇编成: MOV AL,0CDH
教学重点
汇编语言源程序格式与开发 常量、变量和标号 汇编语言程序设计方法
顺序程序设计 分支程序设计 循环程序设计 子程序设计
汇编语言基础
完整的汇编语言源程序由段组成 一个汇编语言源程序可以包含若干个代码段、数 据段、附加段或堆栈段,段与段之间的顺序可随 意排列 需独立运行的程序必须包含一个代码段,并指示 程序执行的起始点,一个程序只有一个起始点 所有的可执行性语句必须位于某一个代码段内, 说明性语句可根据需要位于任一段内 通常,程序还需要一个堆栈段
3.2.1.3 符号常量
符号常量使用标识符表达一个数值 MASM提供等价机制,用来为常量定义符号名 符号定义伪指令有‚等价EQU”和‚等号=‛: 符号名 EQU 数值表达式 符号名 EQU <字符串> 符号名 = 数值表达式
EQU 用于数值等价时不能重复定义符号名, 但‚=‛允许有重复赋值。例如:
5. 设置属性运算符
① “:”运算符 用来临时给变量、标号或地址表达式指定一个段 属性。 例:MOV AX,ES:[BX] ;表示不用DS,而用ES 来形成段地址 ② PTR运算符 PTR运算符赋予“表达式”指定的“类型”,新的 类型只在所处的指令内有效。 PTR的格式为:类型 PTR 表达式
设置属性运算符(续)
第3 章
基础知识
第3章:汇编语言的特点
汇编语言是一种以处理器指令系统为基础的低级 程序设计语言,它采用助记符表达指令操作码, 采用标识符号表示指令操作数 利用汇编语言编写程序的主要优点是可以直接、 有效地控制计算机硬件,因而容易创建代码序列 短小、运行快速的可执行程序 在有些应用领域,汇编语言的作用是不容置疑和 无可替代的 汇编程序设计的过程是与其他高级语言程序设计 大致相同
分析运算符(续)
例 2:
N1 DB 30H,31H,32H N2 DW 4142H,4344H N3 DD N2 ALD:MOV AL,TYPE N1 ;AL←1 ADD AH,TYPE N2 ;AH←AH+2 MOV BL,TYPE N3 ;BL←4 MOV BH,TYPE ALD ;BH←-1(0FFH)
② OFFSET运算符 取段内偏移地址符,该运算返回变量或标号所在段 的段内偏移地址。 例:MOV AX,OFFSET START ;AX←标号START的 偏移地址 ③ TYPE运算符 取类型属性运算符,该运算返回变量或标号的类型 值。若运算对象是标号,则返回标号的距离属性值, 若运算对象是变量,则返回变量类型所占字节数。
相关文档
最新文档