第四章 汇编语言程序设计 4.1汇编语言的基本语法
DESCRIPTION
第四章 汇编语言程序设计 4.1汇编语言的基本语法. 汇编过程. 检查源程序的语法错误,并给出出错信息。 产生 目标文件(. OBJ); 列表文件;(. LST )和交叉索引文件(. CRF 文件)。 展开宏指令。. 宏汇编语言及编程. 汇编语言: 一种面向机器的程序设计语言,是一种用符号表示的低级程序设计语言 (机器语言的符号化描述) 。 宏汇编语言: 增加 伪、宏指令 语句构成汇编 语言程序设计语言 。. 汇编: 汇编语言编写的程序不能由机器直接执行,必须经汇编程序翻译成机器语言程序。. 4.1汇编语言的基本语法. 连接程序. 机器码目标程序. - PowerPoint PPT PresentationTRANSCRIPT
第四章 汇编语言程序设计 4.1 汇编语言的基本语法
•宏汇编语言及编程
汇编语言 : 一种面向机器的程序设计语言,是一种用符号表示的低级程序设计语言(机器语言的符号化描述)。
宏汇编语言:增加伪、宏指令语句构成汇编语言程序设计语言。
汇编 : 汇编语言编写的程序不能由机器直接执行,必须经汇编程序翻译成机器语言程序。
• 检查源程序的语法错误,并给出出错信息。• 产生目标文件( .OBJ);列表文件;( .LST)和交叉索引文
件( .CRF文件)。• 展开宏指令。
•汇编过程
4.1 汇编语言的基本语法
•列表文件( .LST文件)同时列出汇编语言源程序和机器语言目标程序的文件。•交叉索引文件( .CRF文件)列出程序中使用的符号、变量和标号以及引用情况。
•汇编过程
汇编与连接
EXAM.ASM
ASCII源程序
EXAM.OBJ
可选EXAM.LST
EXAM.CRF
机器码目标程序 MASM.EXE
汇编
汇编程序
EXAM.EXEEXAM.COM
LINK.EXE
连接
连接程序
可执行程序
4.1 汇编语言的基本语法•宏汇编语句的基本格式
指令性语句——由指令构成[ 标号: ] 操作码 操作数 [ ;注释 ]如 : START: MOV AX ,DATA
指示性语句——由命令(伪指令)构成[ 名字 / 变量 ] 命令 参数 [ ;注释 ]如 : DATA SEGMENT AT 2000H
•常量、变量和标号 •常量
汇编源程序翻译成机器码目标程序期间已经有确定数值的量。分为数字常量和符号常量两类。 ( 指令中的立即数 ,MEM 直接地址)
4.1 汇编语言的基本语法
数字常量:直接用数字进行表示的常量。
二进制: 10000100B 、 11110001020100B
十进制: 12356D
十六进制: 12ABH 、 0F56AH
(字母打头必须前面补 0,否则将出现汇编语法错误。)
如:
MOV AX , 100D
MOV BL , 0FAH
MOV CL , 1010 1000B
•常量、变量和标号 •常量
4.1 汇编语言的基本语法
符号常量:用标识符(常量名)表示的常量。命名规则:
1 ) 0≤31 个 ASCII 码字符2 ) A~Z 、 a~z 、 0~9 、?、 @ 、 $ 及下划线构成。3 )?不能单独作为标识符。4 )无独立的保留字及运算符。
•常量、变量和标号 • 常量
合法标识符 :STA_124$
MOV_?
@103
非法标识符 :STA+124$
MOV
?
4.1 汇编语言的基本语法•常量、变量和标号 • 常量 定义
常量名 EQU ( = ) 数值或字母例如: AA EQU 30
BB = 1000HCC EQU 10001010BDD = ‘ABC’MOV AX , AAMOV AL , AAMOV BX , BBMOV BH , BB ;错 BH 将产生溢出
改善程序的可读性,程序的修改调试方便。“=” 可重复定义 EQU 不可重复定义
4.1 汇编语言的基本语法•常量、变量和标号 •变量内存单元地址的符号表示,存在地址的三个属性。
字节 DB ( 8 位)一个字节存贮单元字 DW ( 16 位)二个连续字节存贮单元双字 DD ( 32 位)四个连续字节存贮单元双字 DQ ( 64 位) 8 个连续字节存贮单元双字 DT ( 80 位) 10 个连续字节存贮单元
段属性:段地址,段寄存器的值
偏移地址:段内地址。
变量类型:变量所在存贮单元的类型,由存贮伪指令指定。
4.1 汇编语言的基本语法•常量、变量和标号 •变量定义
变量名 存贮伪指令 表达式 1 ,表达式 2 ,……
例如:X DB 0AH
AA EQU 1ABCH
Y DW AA
STR DB ‘ABCD1234’ , 12H , 0ACH
重复子句表达式:N DUP (表达式)
例如:AA DB 10 DUP ( 0 )BB DW 5 DUP ( 21*5 ), 0DH , 0AH
4.1 汇编语言的基本语法•常量、变量和标号 •标号
指令性语句存放地址的符号表示。同变量一样 , 存在三个与地址有关的属性,常用于指令的转移和
子程序调用。
例如 :MOV SI , 100HMOV DI , 200HMOV CX , 10H
LOOP1 : MOV AL , [SI]MOV [DI] , ALINC SIINC DILOOP LOOP1 ;此处 LOOP1 不是保留字
•标号定义标号名: 机器指令语句
•表达式与运算符
由操作数(常量、变量、标号)和运算符构成。
在汇编时完成相应的运算 ( 数字常数 ) ,( OBJ)目标程序中不存在表达式,应用程序的 DEBUG调试中不可能看到任何表达式。•算术运算符
+ 、―、 * 、 /
MOD 除法取余运算→10 MOD 3=1
SHL 左移运算21H SHL 1 结果 42H ,相当于乘 2 的操作。SHR 右移运算84 SHR 2 结果 21H ,相当于除 4 的操作。
( SHL 、 SHR 注意和相应的逻辑指令区别)
•表达式与运算符
•关系运算符EQ 、 NE 、 LT 、 LE 、 GT 、 GE运算的结果为真用 0FFFFH 表示 , 否则为 0 。
例如 : MOV BX,((PORT LE 5) AND 20H)当 POTR 小于 5 为 MOV BX,20H 否则为 MOV
BX,0H
•逻辑运算符AND 、 OR 、 NOT 、 XOR
例如: AND AL , 86H AND 0FH
AND 是指令。 AND 逻辑运算符, 86H AND 0FH=06H
汇编后的指令是: AND AL , 06H
与逻辑运算指令不同 , CPU 不执行任何操作,汇编时运算,在目标程序中只是一个常数。
4.1 汇编语言的基本语法
•表达式与运算符•分析运算符
4.1 汇编语言的基本语法
• 求段基址 SEG 符号名 MOV AX , SEG AA
SEG AA 为立即寻址是 AA 的段地址
•求符号名的类型值 TYPE 符号名 MOV AL , TYPE CC返回变量 CC 的类型的字节数。字节数据: TYPE CC=1 字数据: TYPE CC=2双字数据: TYPE CC=4 8 字节数据: TYPE CC=810 字节数据: TYPE CC=10标号: NEAR=0FFFFH FAR=0FFFEH
•求偏移地址 OFFSET 符号名 MOV SI , OFFSET BB OFFSET BB 为立即寻址 , 是 BB 的偏移地址
•表达式与运算符——分析运算符 4.1 汇编语言的基本语法
• 变量的元素个数 LENGTH 符号名DUP 定义的变量的元素个数,否则 =1如, BUF DW N DUP ( ? ), LENGTH BUF=N
X DD 12345678H , LENGTH X=1• 求符号名分配的总字节数 SIZE 符号名
返回变量的总字节数: SIZE=LENGTH*TYPE 例如:
BUF1 DB N1 , N2 , N3 …, N10
BUF2 DB 10 DUP ( 0 )
BUF3 DW 10 DUP (?)
OFFSET BUF1=0000H
TYPE BUF1=1
LENGTH BUF1=1
SIZE BUF1=1
OFFSET BUF2=000AH
TYPE BUF2=1
LENGTH BUF2=10
SIZE BUF2=10
OFFSET BUF3=0014H
TYPE BUF3=2
LENGTH BUF3=10
SIZE BUF3=20
•表达式与运算符•属性运算符
4.1 汇编语言的基本语法
• 定义类型算符 PTR
格式:类型 PTR 表达式类型 BYTEWORD DWORD
例如:MOV BYTE PTR [DI] , 12H ;将 [DI] 定义为字节类型。MOV [DI], 12H ;非法指令INC WORD PTR [BX] ;字加 1INC BYTE PTR [BX] ;字节加 1 ,当( [BX] ) =1FFH 时
结果 ;不相同INC [BX] ;非法指令BUFW DW 1234H ; BUF 为字类型。MOV AH , BYTE PTR BUFW ;将 BUFW 指定为字节类型
。AH=34H
•表达式与运算符•属性运算符
4.1 汇编语言的基本语法
• 指定新属型算符 THIS
格式: THIS 类型指定下一个存贮单元的类型,与 EQU ( = )一起定义新变量。
类型 BYTEWORD DWORD
例如:XYZ EQU THIS BYTE ; XYZ 为字节类型的变
量ABC DW 4321H , 2255H ; ABC 为字类型的变量XYZ 、 ABC 表示同一存贮单元,这一单元有两种类型。MOV [SI] , XYZ ;将 ABC 的低 8 位 21H送入 [SI]
MOV [DI] , ABC ;将 ABC 字单元 4321H送入 [DI] 单元。 为当前内存单元指定新的类型,不改变原来定义的类型。
•指示性语句(伪指令)4.1 汇编语言的基本语法
• 符号定义伪指令: EQU ( = )
格式:符号名 EQU ( = ) 表达式例如:
COUNT EQU 20ABC=21H+4
MOV AL , COUNT ;将 20 送 AL
MOV AL , ABC ;将 25H 送 AL
B EQU 10 ;非法定义
如: A=3
B EQU 5 ;定义 B=5
A=10 ;重定义 A 为 10
EQU 不能重复定义, = 可任意重复定义。
•指示性语句(伪指令)4.1 汇编语言的基本语法
• 段定义伪指令格式:段名 SEGMENT [ 定位方式 ][组合方式 ][‘ 类别名’ ]
段名 ENDS
定义了以段名命名的存贮段。汇编时给该段名分配一个段基值。
…
例如:DATA SEGMENT
…
DATA ENDSCODE SEGMENT
…
CODE ENDS
定义了二个段,段名分别为 DATA 、 CODE 。
•指示性语句(伪指令)4.1 汇编语言的基本语法
• 段定义伪指令的参数格式:段名 SEGMENT [ 定位类型 ][组合方式 ][‘ 类别名’ ]
•定位方式:段的起始地址边界PAGE—— 指定起始地址的低 8 位是 0 ,称页边界
XXXX XXXX XXXX 0000 0000B
PARA—— 指定起始地址的低 4 位是 0 ,称段边界(缺省)XXXX XXXX XXXX XXXX 0000B
WORD—— 指定起始地址的低 2 位是 0 ,称字边界XXXX XXXX XXXX XXXX XX00B
BYTE—— 指定起始地址为任意值。XXXX XXXX XXXX XXXX XXXXB
( PARA 为缺省方式)
•指示性语句(伪指令)4.1 汇编语言的基本语法
• 段定义伪指令的参数格式:段名 SEGMENT [ 定位类型 ][组合方式 ][‘ 类别名’ ]
•组合方式:连接程序时设定本段与其它段的连接方式。 (模块化程序设计 )
PUBLIC :同名段依次连接起来,形成一个连续的段。
COMMON :同名段共用同一段起始地址,相互重叠段的长度,为最长的段的长度。
AT 表达式:定位在表达式所指定的段地址。(代码段例外)
STACK :同名段构成一个连续的堆栈段,自动初始化 SP 。
MEMORY :表示本段定位在所有段的地址之上,高地址处。
空缺( NONE )不与任何段相连接。各段有独立段基址。
(缺省方式)
•指示性语句(伪指令)4.1 汇编语言的基本语法
• 段定义伪指令的参数格式:段名 SEGMENT [ 定位类型 ][组合方式 ][‘ 类别名’]•类别名:用单引号括起来的字符串。类别名相同的段按先后顺序
存放在一个连续的存贮区中,形统一的物理段。 (模块化程序设计 )
•定位伪指令格式: ORG 地址表达式指定程序或数据在内存单元的起始地址。
例如:
ORG 100H
MOV AX , DATA ;指令偏移地址为 100H 。
MOV AX , BX ;其后的指令依次存放。
•指示性语句(伪指令)4.1 汇编语言的基本语法
•段寄存器说明伪指令 格式: ASSUME 段寄存器:段名 1 ,段寄存器:段名 2……
在代码段,告诉汇编程序 CS 、 DS 、 ES 、 SS 应具有的符号段基址,但是段寄存器( CS 除外)还必须用传送指令赋值。一般紧跟在 SEGMENT 语句之后例如: CODE SEGMENT PARA
ASSUME CS : CODE , DS : DATAMOV AX , DATAMOV DS , AX ;传送指令赋值……
CODE ENDSDATA SEGMENT
……DATA ENDS
•指示性语句(伪指令)4.1 汇编语言的基本语法
•过程(子程序)定义伪指令 格式:过程名 PROC NEAR[FAR]
…………
过程名 ENDP
过程名:过程的起始地址,如子程序定义。类型: NEAR 近过程(主、子同段)
FAR 远过程(主、子在两个不同的代码段)
过程应由 RET 指令返回与远近无关。
•指示性语句(伪指令)4.1 汇编语言的基本语法
•模块命名伪指令(开始伪指令) NAME
格式: NAME 模块名如: NAME CODE1
非模化程序设计中可不用 NAME 、 TITLE 命令,不影响程序汇编。
•标题命名伪指令 TITLE
格式: TITLE 名字当程序中所有程序都没有 NAME 时,可用 TITLE 命令。
在 LST 中方式中的每一页输出该命名。
•程序结束伪指令 END格式: END 标号
标号为程序中第一条指令性指令标号。
课后作业:1. P188 4.1 4.3 4.4
4.5 为错误的题