24
第第第 第第第第第第第第 4.1 第第第第第第第第第 宏宏宏宏宏宏宏宏 宏宏宏宏 : 第第第第第第第第第第第第第 第第 第第第第第第第第第第第第第第第 一,一 第第第第第第第第第第第 () 宏宏宏宏宏第第第第第 第第第第第第第第第第第第第第宏宏 : 第第第第第第第第第第第第第第第第第第 第第第第第第第第第第第第第第第第第 ,。 第第第第第第第第第第 第第第第第第第第 ,。 第第第第第第.OBJ) 第第第第;( .LST 第第第第第第第第 )( .CRF 第第)。 第第第第第宏宏宏宏

第四章 汇编语言程序设计 4.1汇编语言的基本语法

  • Upload
    matty

  • View
    210

  • Download
    0

Embed Size (px)

DESCRIPTION

第四章 汇编语言程序设计 4.1汇编语言的基本语法. 汇编过程. 检查源程序的语法错误,并给出出错信息。 产生 目标文件(. OBJ); 列表文件;(. LST )和交叉索引文件(. CRF 文件)。 展开宏指令。. 宏汇编语言及编程. 汇编语言: 一种面向机器的程序设计语言,是一种用符号表示的低级程序设计语言 (机器语言的符号化描述) 。 宏汇编语言: 增加 伪、宏指令 语句构成汇编 语言程序设计语言 。. 汇编: 汇编语言编写的程序不能由机器直接执行,必须经汇编程序翻译成机器语言程序。. 4.1汇编语言的基本语法. 连接程序. 机器码目标程序. - PowerPoint PPT Presentation

Citation preview

Page 1: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

第四章 汇编语言程序设计 4.1 汇编语言的基本语法

•宏汇编语言及编程

汇编语言 : 一种面向机器的程序设计语言,是一种用符号表示的低级程序设计语言(机器语言的符号化描述)。

宏汇编语言:增加伪、宏指令语句构成汇编语言程序设计语言。

汇编 : 汇编语言编写的程序不能由机器直接执行,必须经汇编程序翻译成机器语言程序。

• 检查源程序的语法错误,并给出出错信息。• 产生目标文件( .OBJ);列表文件;( .LST)和交叉索引文

件( .CRF文件)。• 展开宏指令。

•汇编过程

Page 2: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

4.1 汇编语言的基本语法

•列表文件( .LST文件)同时列出汇编语言源程序和机器语言目标程序的文件。•交叉索引文件( .CRF文件)列出程序中使用的符号、变量和标号以及引用情况。

•汇编过程

汇编与连接

EXAM.ASM

ASCII源程序

EXAM.OBJ

可选EXAM.LST

EXAM.CRF

机器码目标程序 MASM.EXE

汇编

汇编程序

EXAM.EXEEXAM.COM

LINK.EXE

连接

连接程序

可执行程序

Page 3: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

4.1 汇编语言的基本语法•宏汇编语句的基本格式

指令性语句——由指令构成[ 标号: ] 操作码 操作数 [ ;注释 ]如 : START: MOV AX ,DATA

指示性语句——由命令(伪指令)构成[ 名字 / 变量 ] 命令 参数 [ ;注释 ]如 : DATA SEGMENT AT 2000H

•常量、变量和标号 •常量

汇编源程序翻译成机器码目标程序期间已经有确定数值的量。分为数字常量和符号常量两类。 ( 指令中的立即数 ,MEM 直接地址)

Page 4: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

4.1 汇编语言的基本语法

数字常量:直接用数字进行表示的常量。

二进制: 10000100B 、 11110001020100B

十进制: 12356D

十六进制: 12ABH 、 0F56AH

(字母打头必须前面补 0,否则将出现汇编语法错误。)

如:

MOV AX , 100D

MOV BL , 0FAH

MOV CL , 1010 1000B

•常量、变量和标号 •常量

Page 5: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

4.1 汇编语言的基本语法

符号常量:用标识符(常量名)表示的常量。命名规则:

1 ) 0≤31 个 ASCII 码字符2 ) A~Z 、 a~z 、 0~9 、?、 @ 、 $ 及下划线构成。3 )?不能单独作为标识符。4 )无独立的保留字及运算符。

•常量、变量和标号 • 常量

合法标识符 :STA_124$

MOV_?

@103

非法标识符 :STA+124$

MOV

?

Page 6: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

4.1 汇编语言的基本语法•常量、变量和标号 • 常量 定义

常量名 EQU ( = ) 数值或字母例如: AA EQU 30

BB = 1000HCC EQU 10001010BDD = ‘ABC’MOV AX , AAMOV AL , AAMOV BX , BBMOV BH , BB ;错 BH 将产生溢出

改善程序的可读性,程序的修改调试方便。“=” 可重复定义 EQU 不可重复定义

Page 7: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

4.1 汇编语言的基本语法•常量、变量和标号 •变量内存单元地址的符号表示,存在地址的三个属性。

字节 DB ( 8 位)一个字节存贮单元字 DW ( 16 位)二个连续字节存贮单元双字 DD ( 32 位)四个连续字节存贮单元双字 DQ ( 64 位) 8 个连续字节存贮单元双字 DT ( 80 位) 10 个连续字节存贮单元

段属性:段地址,段寄存器的值

偏移地址:段内地址。

变量类型:变量所在存贮单元的类型,由存贮伪指令指定。

Page 8: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

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

Page 9: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

4.1 汇编语言的基本语法•常量、变量和标号 •标号

指令性语句存放地址的符号表示。同变量一样 , 存在三个与地址有关的属性,常用于指令的转移和

子程序调用。

例如 :MOV SI , 100HMOV DI , 200HMOV CX , 10H

LOOP1 : MOV AL , [SI]MOV [DI] , ALINC SIINC DILOOP LOOP1 ;此处 LOOP1 不是保留字

•标号定义标号名: 机器指令语句

Page 10: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•表达式与运算符

由操作数(常量、变量、标号)和运算符构成。

在汇编时完成相应的运算 ( 数字常数 ) ,( OBJ)目标程序中不存在表达式,应用程序的 DEBUG调试中不可能看到任何表达式。•算术运算符

+ 、―、 * 、 /

MOD 除法取余运算→10 MOD 3=1

SHL 左移运算21H SHL 1 结果 42H ,相当于乘 2 的操作。SHR 右移运算84 SHR 2 结果 21H ,相当于除 4 的操作。

( SHL 、 SHR 注意和相应的逻辑指令区别)

Page 11: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•表达式与运算符

•关系运算符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 汇编语言的基本语法

Page 12: 第四章 汇编语言程序设计 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 的偏移地址

Page 13: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•表达式与运算符——分析运算符 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

Page 14: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•表达式与运算符•属性运算符

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

Page 15: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•表达式与运算符•属性运算符

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] 单元。 为当前内存单元指定新的类型,不改变原来定义的类型。

Page 16: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•指示性语句(伪指令)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 不能重复定义, = 可任意重复定义。

Page 17: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•指示性语句(伪指令)4.1 汇编语言的基本语法

• 段定义伪指令格式:段名 SEGMENT [ 定位方式 ][组合方式 ][‘ 类别名’ ]

段名 ENDS

定义了以段名命名的存贮段。汇编时给该段名分配一个段基值。

例如:DATA SEGMENT

DATA ENDSCODE SEGMENT

CODE ENDS

定义了二个段,段名分别为 DATA 、 CODE 。

Page 18: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•指示性语句(伪指令)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 为缺省方式)

Page 19: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•指示性语句(伪指令)4.1 汇编语言的基本语法

• 段定义伪指令的参数格式:段名 SEGMENT [ 定位类型 ][组合方式 ][‘ 类别名’ ]

•组合方式:连接程序时设定本段与其它段的连接方式。 (模块化程序设计 )

PUBLIC :同名段依次连接起来,形成一个连续的段。

COMMON :同名段共用同一段起始地址,相互重叠段的长度,为最长的段的长度。

AT 表达式:定位在表达式所指定的段地址。(代码段例外)

STACK :同名段构成一个连续的堆栈段,自动初始化 SP 。

MEMORY :表示本段定位在所有段的地址之上,高地址处。

空缺( NONE )不与任何段相连接。各段有独立段基址。

(缺省方式)

Page 20: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•指示性语句(伪指令)4.1 汇编语言的基本语法

• 段定义伪指令的参数格式:段名 SEGMENT [ 定位类型 ][组合方式 ][‘ 类别名’]•类别名:用单引号括起来的字符串。类别名相同的段按先后顺序

存放在一个连续的存贮区中,形统一的物理段。 (模块化程序设计 )

•定位伪指令格式: ORG 地址表达式指定程序或数据在内存单元的起始地址。

例如:

ORG 100H

MOV AX , DATA ;指令偏移地址为 100H 。

MOV AX , BX ;其后的指令依次存放。

Page 21: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•指示性语句(伪指令)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

Page 22: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•指示性语句(伪指令)4.1 汇编语言的基本语法

•过程(子程序)定义伪指令 格式:过程名 PROC NEAR[FAR]

…………

过程名 ENDP

过程名:过程的起始地址,如子程序定义。类型: NEAR 近过程(主、子同段)

FAR 远过程(主、子在两个不同的代码段)

过程应由 RET 指令返回与远近无关。

Page 23: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

•指示性语句(伪指令)4.1 汇编语言的基本语法

•模块命名伪指令(开始伪指令) NAME

格式: NAME 模块名如: NAME CODE1

非模化程序设计中可不用 NAME 、 TITLE 命令,不影响程序汇编。

•标题命名伪指令 TITLE

格式: TITLE 名字当程序中所有程序都没有 NAME 时,可用 TITLE 命令。

在 LST 中方式中的每一页输出该命名。

•程序结束伪指令 END格式: END 标号

标号为程序中第一条指令性指令标号。

Page 24: 第四章 汇编语言程序设计 4.1汇编语言的基本语法

课后作业:1. P188 4.1 4.3 4.4

4.5 为错误的题