第4章 8086汇编语言程序格式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章
汇编语言程序的开发
本节从汇编语言程序的语句格式出发,
给出第一个示范性的汇编语言源程序, 并演示汇编语言程序的过程: 编辑 汇编 连接 调试 即汇编语言程序的开发方法
第4章
汇编语言程序的语句格式
⑴ 执行性语句——由硬指令构成的语句, 它通常对应一条机器指令,出现在程序的 代码段中: 标号: 硬指令助记符 操作数,操作数 ;注释 ⑵ 说明性语句——由伪指令构成的语句, 它通常指示汇编程序如何汇编源程序: 名字 伪指令助记符 参数,参数,… ;注释
第4章
变量定义伪指令助记符
变量定义伪指令根据申请的主存空间单位分
类 DB——定义字节伪指令 DW——定义字伪指令 DD——定义双字伪指令 DF——定义3字伪指令 DQ——定义4字伪指令 DT——定义10字节伪指令 还有定位伪指令
定义字节单元伪指令DB
DB伪指令用于分配一个或多个字节单元, 并可以将它们初始化为指定值 初值表中每个数据一定是字节量 (Byte),存放一个8位数据: 可以是0~255的无符号数 或是-128~+127带符号数 也可以是字符串常数
说明:
操作使用的工具
操作得到的文件
汇编语言程序的开发过程
1.用编辑程序建立ASM源文件; 2.用MASM程序把ASM文件转汇 编成OBJ文件; 3.用LINK程序把OBJ文件转连接 成EXE文件; 4.用DOS命令直接键入文件名就可 执行该程序。
第4章
参数、变量和标号
本节详细讨论汇编语言程序语句的主要
第4章
2.变量 变量是在地址段或其它段中存储单元的
地址符号,做为指令的存储器操作数来 引用。变量具有3种属性。 (1)段属性:变量所在的段,可以是 CS,DS,SS,ES。 (2)偏移量属性:距所在段首地址的 偏移量。 (3)类型属性:变量的类型由伪指令 来定义,指定存取变量的一个元素所需 要的数
第4章
运算符
算术运算符 + - * / MOD
逻辑运算符 AND OR XOR NOT 移位运算符 SHL SHR 关系运算符 EQ NE GT LT GE LE
第4章
4.2.2地址型参数
汇编语言程序中,指令参数还有地址型,
它的主要形式是标号和名字(变量名、段 名、过程名等) 硬指令的操作数有存储单元;存储单元就 应该用地址型参数(存储器操作数)表达
第4章
1. 标号 标号是代码段中可执行语句的地址符号,后
面跟着冒号。被用于转移指令和过程调用指 令中做为目的地址操作数。标号具有3种属 性。 (1)段属性:段地址在CS段中。 (2)偏移量属性:距CS段首地址的偏移量。 ( 3 ) 类 型 属 性 : NEAR 表 示 段 内 标 号 , FAR表示段间标号,在过程调用指令中指明。
第4章
分隔符
语句的4个组成部分要用分隔符分开 标号后用冒号,注释前用分号
操作数之间和参数之间使用逗号分隔
其他部分通常采用空格或制表符 多个空格和制表符的作用与一个相同 MASM支持续行符 “\”
第4章
汇编语言的程序格式
完整的汇编语言源程序由段组成 一个汇编语言源程序可以包含若干个代码段、
第4章
MOV [SI], 0 这条指令机器不清楚是将0传
送给SI寄存器所指的单元,还是将0000传送 给SI, SI+1两个连续的单元,所以应该写成 MOV BYTE PTR[SI], 0 或 MOV WORD PTR[SI], 0 例4.2 在数据段中定义:ARRAY DB 12H, 13H, 14H, 15H MOV AL, ARRAY ;AL=12H MOV AX, WORD PTR [ARRAY+2] ; AX=1514H
第4章
4.3.2数据定义伪指令
变量定义(Define)伪指令为变量申请
固定长度的存储空间,并可同时将相应 的存储单元初始化
变量名 伪指令助记符 初值表
数据定义伪指令最常使用
第4章
初值表
初值表是用逗号分隔的参数 主要由数值常数、表达式或?、DUP
组构成
?——表示初值不确定,即未赋初值; DUP——表示重复初值 DUP的格式为: 重复次数 DUP(重复参数)
第4章
操作数与参数
处理器指令的操作数可以是立即数、寄
存器和存储单元
伪指令的参数可以是
常数、变量名、表达 式等,可以有多个, 参数之间用逗号分隔
第4章
注释
语句中由分号“;”开始的部分为注释
内容,用以增加源程序的可读性 必要时,一个语句行也可以由分号开始 作为阶段性注释 汇编程序在翻译源程序时将跳过该部分, 不对它们做任何处理
设置
类型名 PTR 名字/标号 THIS 类型名
第4章
PTR操作符
类型名 PTR 名字/标号
PTR操作符使名字或标号具有指定的类型
类型名可以是
BYTE/WORD/DWORD mov al,byte ptr w_var;w_var是一个字变 量
使用PTR操作符,可以临时改变名字或标号
的类型
第4章
保留字
保留字(Reserved Word)是汇编程
序已经利用的标识符,主要有: o 硬指令助记符——例如:MOV、ADD o 伪指令助记符——例如:DB、EQU o 操作符——例如:OFFSET、PTR o 寄存器名——例如:AX、CS o 预定义符号——例如:@data
汇编语言大小写不敏感
segment ;数据段 db 'a',-5 db 2 dup(100),? db 'ABC' ends
mov al,X ;此处X表示它的第1个数据,故AL←'a' dec X+1 ;对X为始的第2个数据减1,故成为-6 mov Y,al ;现在Y这个字符串成为 'aBC'
定义字单元伪指令DW
DW伪指令用于分配一个或多个字单 元,并可以将它们初始化为指定值 初值表中每个数据一定是字量 (Word),一个字单元可用于存放任 何16位数据:
MOV CX,0
;传送指令,具有2个操作数
DELAY: NOP
置
Biblioteka Baidu;空操作指令,没有操作数,带有标号
LOOP DELAY;循环指令,标号DELAY说明转移位 BUFFER DB 1,2,3,4,5,6,7 ;数据定义伪指令,在主存中开辟7个连续的字 节单元,初值依次为1~7,BUFFER表示首地址
第4章
一个段地址 一个偏移地址 两个字符 0~65535之间的无符号数 -32768~+32767之间的带符号数
data segment ;数据段 count dw 8000h,?,'AB' maxint equ 64h number dw maxint array dw maxint dup(0) data ends
数据段、附加段或堆栈段,段与段之间的顺 序可随意排列 需独立运行的程序必须包含一个代码段,并 指示程序执行的起始点,一个程序只有一个 起始点 所有的可执行性语句必须位于某一个代码段 内,说明性语句可根据需要位于任一段内 通常,程序还需要一个堆栈段
汇编语言程序的开发过程
出错
编辑 程序
记事本 WPS WORD EDIT
部分:
参数 变量名 标号 并引出相关的伪指令和操作符 本节重点掌握:
常数的表达、 变量定义伪指令DB/DW/DD
地址操作符和类型操作符
第4章
4.2.1数值型参数
在源程序语句格式的4个组成部分中,
参数是指令的操作对象(学习硬指令时 被称为操作数),参数之间用逗号分隔 参数根据指令不同可以没有,可以有1 个、2个或多个 汇编语言程序中,指令参数有数值型, 它的主要形式是常数和数值表达式; 硬指令的操作数有立即数;立即数就要 用数值型参数表达
第4章教学重点
重点掌握: 程序的格式、开发方法
参数的表达、变量的定义 变量和标号的属性
第4章
硬指令和伪指令
硬指令——使CPU产生动作、并在程序执行
时才处理的语句,就是第3章学习的处理器 指令 伪指令(Directive)——不产生CPU动作、 在程序执行前由汇编程序处理的说明性语句, 例如,数据说明、变量定义等等 伪指令与具体的处理器类型无关,但与汇编 程序的版本有关 本课程采用微软宏汇编程序 MASM 5.0
标号、名字与标识符
标号是反映硬指令位置(逻辑地址)的标识符,
后跟一个冒号分隔 名字是反映伪指令位置(逻辑地址)和属性的标 识符,后跟空格或制表符分隔,没有一个冒号 标识符(Identifier)一般最多由31个字母、数字 及规定的特殊符号(如 _、$、?、@)组成,不 能以数字开头。默认情况下,汇编程序不区别标 识符中的字母大小写 一个程序中,每个标识符的定义是唯一的,还不 能是汇编语言采用的保留字
第4章
如SUM+1这个表达式指的是变量SUM
所指向地址的下一个单元地址,而不是 SUM单元内容加1。想一想如果要将 SUM单元加1,应该写哪条指令? 例4.1 将首地址为BOLOCK的字数组 的第3个字传送到DX寄存器。 MOV DX, BLOCK+(3-1)*2
第4章
属性替代运算符
对名字或标号的类型属性进行有关
第4章
常见的变量伪指令语句:
A1 A2 A3 A4 A5 A6 A7
DB DW DB DB DB DW DW
10 2345H, 34DFH 3 DUP (2) 'abcd' 'a', 'b', 'c', 'd' 3 DUP (1, 2) 67H, 3 DUP (?)
data X Y data
第4章
数值返回操作符
取得名字或标号的段地址和偏移地
址两个属性 [ ] 将括起的表达式作为存储器地址 $ 当前偏移地址 : 采用指定的段地址寄存器
第4章
OFFSET 名字/标号
返回名字或标号的偏移地址
SEG 名字/标号
返回名字或标号的段地址
TYPE 名字/标号 返回类型(DB=1,DW=2,DD=4) SIZE 变量名 返回长度(仅对DUP语句有效,其它变量均 =1) LENGTH 变量名 LENGTH*TYPE
第4章
1. 常数
常数(常量)表示一个固定的数值 它又分成多种形式: (1)十进制常数 (2)十六进制常数 (3)二进制常数 (4)八进制常数 (5)字符串常数 (6)符号常数
第4章
数值表达式
数值表达式一般是指由运算符连接的各种常
数所构成的表达式 汇编程序在汇编过程中计算表达式,最终得 到一个数值 程序运行之前,就已经计算出了表达式;所 以,程序运行速度没有变慢,但增强程序的 可读性 MASM对除伪指令外各种汇编时处理的指令 统称为操作符(Operator)
文件 XXX.ASM
汇编 程序
ASM MASM TASM
文件 XXX.OBJ XXX.LST XXX.CRF
出错
出错 文件 XXX.EXE XXX.MAP XXX.LIB
连接 程序
LINK
出错
DEBUG
.OBJ:目标文件,.LST:列表文件,.CRF:交叉引用文件 .MAP:映像文件,LIB:库文件
第4章
变量名
变量名为用户自定义标识符,表示初值表首
元素的逻辑地址;用这个符号表示地址,常 称为符号地址 变量名可以没有。这种情况,汇编程序将直 接为初值表分配空间,无符号地址 设置变量名是为了方便存取它指示的存储单 元
第4章
3.地址表达式 地址表达式由变量、标号、常量、寄存
器以及运算符组成。地址表达式的结果 是由汇编程序计算出的存储器地址,没 有属性。 变量或标号与某一整数相加减结果仍为 变量或标号,属性不变。 变量仅表示对应数据区的第一个数据项 的地址,若对后面的数据项进行操作则 需要用地址表达式来表示。
第4章
【例3.6】BUF的段地址是0500H,偏移地址 为0015H,BUF为字类型变量。 BUF DW 1111H, 2255H, 3333H BUF1 DB 9 DUP (1) 求下列指令执行后寄存器的值。 MOV MOV MOV MOV MOV MOV SI, OFFSET BUF ;SI=0015H BX, SEG BUF ;BX=0500H DI, TYPE BUF ;DI=2 CX, LENGTH BUF1 ;CX=9 DX, SIZE BUF1 ;DX=9 AL, BYTE PTR BUF+3 ;AL=22H