1 / 24

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

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

matty
Download Presentation

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

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

  2. 4.1汇编语言的基本语法 连接程序 机器码目标程序 MASM.EXE LINK.EXE 汇编程序 EXAM.ASM 汇编 EXAM.OBJ 连接 EXAM.LST 可选 ASCII 源程序 EXAM.EXE EXAM.COM EXAM.CRF 可执行程序 • 汇编过程 • 列表文件(.LST文件) • 同时列出汇编语言源程序和机器语言目标程序的文件。 • 交叉索引文件(.CRF文件) • 列出程序中使用的符号、变量和标号以及引用情况。 汇编与连接

  3. 4.1汇编语言的基本语法 • 常量、变量和标号 • 常量 汇编源程序翻译成机器码目标程序期间已经有确定数值的量。分为数字常量和符号常量两类。(指令中的立即数,MEM直接地址) • 宏汇编语句的基本格式 指令性语句——由指令构成 [标号:] 操作码操作数 [;注释] 如: START: MOV AX ,DATA 指示性语句——由命令(伪指令)构成 [名字/变量] 命令 参数 [;注释] 如: DATA SEGMENT AT 2000H

  4. 4.1汇编语言的基本语法 • 常量、变量和标号 • 常量 数字常量:直接用数字进行表示的常量。 二进制:10000100B、11110001020100B 十进制:12356D 十六进制:12ABH、0F56AH (字母打头必须前面补0,否则将出现汇编语法错误。) 如: MOV AX,100D MOV BL,0FAH MOV CL,1010 1000B

  5. 4.1汇编语言的基本语法 合法标识符: STA_124$ MOV_? @103 非法标识符: STA+124$ MOV ? • 常量、变量和标号 • 常量 符号常量:用标识符(常量名)表示的常量。 命名规则: 1)0≤31个ASCII码字符 2)A~Z、a~z、0~9 、?、@、$及下划线构成。 3)?不能单独作为标识符。 4)无独立的保留字及运算符。

  6. 4.1汇编语言的基本语法 • 常量、变量和标号 • 常量 定义 常量名 EQU(=) 数值或字母 例如: AA EQU 30 BB = 1000H CC EQU 10001010B DD = ‘ABC’ MOV AX,AA MOV AL,AA MOV BX,BB MOV BH,BB ;错BH将产生溢出 改善程序的可读性,程序的修改调试方便。 “=”可重复定义 EQU不可重复定义

  7. 4.1汇编语言的基本语法 • 常量、变量和标号 • 变量 内存单元地址的符号表示,存在地址的三个属性。 段属性:段地址,段寄存器的值 偏移地址:段内地址。 变量类型:变量所在存贮单元的类型,由存贮伪指令指定。 字节DB (8位)一个字节存贮单元 字DW (16位)二个连续字节存贮单元 双字DD (32位)四个连续字节存贮单元 双字DQ (64位)8个连续字节存贮单元 双字DT (80位)10个连续字节存贮单元

  8. 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

  9. 4.1汇编语言的基本语法 • 常量、变量和标号 • 标号 指令性语句存放地址的符号表示。 同变量一样,存在三个与地址有关的属性,常用于指令的转移和子程序调用。 • 标号定义 标号名:机器指令语句 例如: MOV SI,100H MOV DI,200H MOV CX,10H LOOP1: MOV AL,[SI] MOV [DI],AL INC SI INC DI LOOP LOOP1 ;此处LOOP1不是保留字

  10. 表达式与运算符 • 由操作数(常量、变量、标号)和运算符构成。 • 在汇编时完成相应的运算(数字常数),(OBJ)目标程序中不存在表达式,应用程序的DEBUG调试中不可能看到任何表达式。 • 算术运算符 • +、―、*、/ • MOD 除法取余运算→10 MOD 3=1 • SHL 左移运算 • 21H SHL 1 结果42H,相当于乘2的操作。 • SHR 右移运算 • 84 SHR 2 结果21H,相当于除4的操作。 • (SHL、SHR注意和相应的逻辑指令区别)

  11. 4.1汇编语言的基本语法 • 表达式与运算符 • 逻辑运算符 • AND、OR、NOT、XOR • 例如:AND AL,86H AND 0FH • AND是指令。 • AND逻辑运算符,86H AND 0FH=06H • 汇编后的指令是:AND AL,06H 与逻辑运算指令不同,CPU不执行任何操作,汇编时运算,在目标程序中只是一个常数。 • 关系运算符 • EQ、NE、LT、LE、GT、GE • 运算的结果为真用0FFFFH表示,否则为0。 • 例如: MOV BX,((PORT LE 5) AND 20H) • 当POTR小于5为MOV BX,20H否则为MOV BX,0H

  12. 4.1汇编语言的基本语法 • 表达式与运算符 • 分析运算符 • 求段基址 SEG 符号名 • MOV AX, SEG AA • SEG AA 为立即寻址是AA的段地址 • 求偏移地址OFFSET 符号名 • MOV SI,OFFSET BB • OFFSET BB 为立即寻址,是BB的偏移地址 • 求符号名的类型值TYPE 符号名 • MOV AL,TYPE CC • 返回变量CC的类型的字节数。 • 字节数据: TYPECC=1 字数据: TYPECC=2 • 双字数据: TYPECC=4 8字节数据: TYPECC=8 • 10字节数据: TYPECC=10 • 标号:NEAR=0FFFFH FAR=0FFFEH

  13. 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

  14. 4.1汇编语言的基本语法 • 表达式与运算符 • 属性运算符 • 定义类型算符PTR • 格式:类型PTR 表达式 • 类型BYTE WORD DWORD 例如: MOV BYTE PTR [DI],12H ;将[DI]定义为字节类型。 MOV [DI], 12H ;非法指令 INC WORD PTR [BX] ;字加1 INC BYTE PTR [BX] ;字节加1,当([BX])=1FFH时结果 ;不相同 INC [BX] ;非法指令 BUFW DW 1234H ;BUF为字类型。 MOV AH,BYTE PTR BUFW ;将BUFW指定为字节类型。 AH=34H

  15. 4.1汇编语言的基本语法 • 表达式与运算符 • 属性运算符 • 指定新属型算符 THIS • 格式:THIS 类型 • 指定下一个存贮单元的类型,与EQU(=)一起定义新变量。 • 类型BYTE WORD 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]单元。 为当前内存单元指定新的类型,不改变原来定义的类型。

  16. 4.1汇编语言的基本语法 • 指示性语句(伪指令) • 符号定义伪指令:EQU (=) • 格式:符号名 EQU(=) 表达式 • 例如: • COUNT EQU 20 • ABC=21H+4 • MOV AL,COUNT ;将20送AL • MOV AL,ABC ;将25H送AL EQU不能重复定义,=可任意重复定义。 如: A=3 B EQU 5 ;定义B=5 A=10 ;重定义A为10 B EQU 10 ;非法定义

  17. 4.1汇编语言的基本语法 • 段定义伪指令 • 格式:段名 SEGMENT [定位方式][组合方式][‘类别名’] … 段名 ENDS 定义了以段名命名的存贮段。汇编时给该段名分配一个段基值。 例如: DATA SEGMENT … DATA ENDS CODE SEGMENT … CODE ENDS 定义了二个段,段名分别为DATA、CODE。 • 指示性语句(伪指令)

  18. 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为缺省方式)

  19. 4.1汇编语言的基本语法 • 指示性语句(伪指令) • 段定义伪指令的参数 • 格式:段名 SEGMENT [定位类型][组合方式][‘类别名’] • 组合方式:连接程序时设定本段与其它段的连接方式。(模块化程序设计) • PUBLIC:同名段依次连接起来,形成一个连续的段。 • COMMON:同名段共用同一段起始地址,相互重叠段的长度,为最长的段的长度。 • AT 表达式:定位在表达式所指定的段地址。(代码段例外) • STACK:同名段构成一个连续的堆栈段,自动初始化SP。 • MEMORY:表示本段定位在所有段的地址之上,高地址处。 • 空缺(NONE)不与任何段相连接。各段有独立段基址。 • (缺省方式)

  20. 4.1汇编语言的基本语法 • 指示性语句(伪指令) • 段定义伪指令的参数 • 格式:段名 SEGMENT [定位类型][组合方式][‘类别名’] • 类别名:用单引号括起来的字符串。类别名相同的段按先后顺序存放在一个连续的存贮区中,形统一的物理段。(模块化程序设计) • 定位伪指令 • 格式:ORG 地址表达式 • 指定程序或数据在内存单元的起始地址。 例如: ORG 100H MOV AX,DATA ;指令偏移地址为100H。 MOV AX,BX ;其后的指令依次存放。

  21. 4.1汇编语言的基本语法 • 指示性语句(伪指令) • 段寄存器说明伪指令 • 格式:ASSUME 段寄存器:段名1,段寄存器:段名2…… • 在代码段,告诉汇编程序CS、DS、ES、SS应具有的符号段基址,但是段寄存器(CS除外)还必须用传送指令赋值。一般紧跟在SEGMENT语句之后 例如:CODE SEGMENT PARA ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX ;传送指令赋值 …… CODE ENDS DATA SEGMENT …… DATA ENDS

  22. 4.1汇编语言的基本语法 • 指示性语句(伪指令) • 过程(子程序)定义伪指令 • 格式:过程名 PROC NEAR[FAR] • ………… • 过程名 ENDP • 过程名:过程的起始地址,如子程序定义。 • 类型:NEAR 近过程(主、子同段) • FAR 远过程(主、子在两个不同的代码段) 过程应由RET指令返回与远近无关。

  23. 4.1汇编语言的基本语法 • 指示性语句(伪指令) • 模块命名伪指令(开始伪指令)NAME • 格式:NAME 模块名 • 如:NAME CODE1 • 程序结束伪指令 END • 格式:END 标号 标号为程序中第一条指令性指令标号。 • 标题命名伪指令 TITLE • 格式:TITLE 名字 • 当程序中所有程序都没有NAME时,可用TITLE命令。在LST中方式中的每一页输出该命名。 非模化程序设计中可不用NAME、TITLE命令,不影响程序汇编。

  24. 课后作业: • P188 4.1 4.3 4.4 • 4.5为错误的题

More Related