第四章
4.1 8086汇编语言的语句
0. 变量:通过伪指令定义的标识符
- 格式: 变量名 DB/DW/DD/DQ/DT 表达式
- a)变量名:标识符;
- b)变量类型:标定变量所指地区的数值属性;
- c)表达式:表示变量所表示的内容;
- 1)常数或运算公式,多个时由从左到右,从上到下(由低到高)排放;
- 2)字符串: 须用单引号引出,编译时/存放在内存中时,以ASCII码的值存放;
- 3)?:表示占着内存,内容随机;
- 4)DUP:格式:n DUP (重复操作的值) 表示在内存中将“重复操作的值”重复放置n次;
- 5)地址表达式:表达式的内容为存放的地址;只能为DB或DD类型
- 为DB类型时:变量名表示该变量首存储地址的偏移; 表达式中的标号表示该指令的首字节地址的偏移;
- 为DD类型时:低字节预置偏移地址;高字节预置段地址;
- 表达式中的变量/标号可与常数相加减
- 变量或标号不能与变量或标号相加,但可相减,减完为无属性的纯数字。
1. 指令性语句 :可由汇编程序翻译成机器语言
- 格式 : [标号:] 操作码 [操作数1,] [操作数2,] [;注释]
- 标号:用符号表示的地址,表明语句所在的地址
- a)指令性语句的标识符;
- b)可由数字、字母、特殊字符(?,·,@,-,¥)组成,且字母在前;
- c)最多31个字符;
- d)属性:
- 1)段地址属性:标号的段地址表示标号所表示的指令语句所在的段地址;
- 2)偏移地址:标号的偏移地址表示标号所表示的指令语句所在的偏移地址;
- 3)类型:段内引用:NEAR;段间引用:FAR;
- 操作助记符:表示指令语句的基本操作功能;
- 操作数:可带可不带,多个用逗号隔开;
- 标号:用符号表示的地址,表明语句所在的地址
2. 指示性语句 :CPU不执行,仅帮助CPU理解汇编程序的意义
- 格式: [标识符(名字)] 指示符(伪指令) 表达式 [;注释]
- 标识符:由数字、字母、下划线组成,其意义由伪指令指定;
- 指示符:标定标识符为数据/代码/堆栈/附加段,并规定其属性;
- a)EQU语句:相当于C语言中的#define
- 格式: 名称 EQU 表达式
- b)=(赋值语句):与EQU的区别是可以对同一名字重复定义。
- c)LABLE语句:定义标号的类型(NEAR/FAR)与定义变量的类型(BYTE/WORD/DWORD)。
- a)EQU语句:相当于C语言中的#define
- 表达式:由操作数和操作符组成;
- a)算术运算符:加减乘除取模(MOD)
- b)逻辑运算符:与(AND)或(OR)非(NOT)异或(XOR)
- c)关系运算符:EQ(=);NE(!=)LT(<)GT(>)<=(LE)>=(GE),其类型是布尔类型
- d)分析运算符:
- SEG:取段地址
- OFFSET :取偏移地址
- TYPE:取类型
- SIZE:取尺寸大小
- LENGTH:取长度
- e)综合运算符
- PTR运算符:重新定义变量或标号的类型
- 格式:类型 PTR 表达式
- THIS运算符:改变存储区的类型
- PTR运算符:重新定义变量或标号的类型
4.2 汇编语言程序结构
4.2.1 段定义语句
- 主要用于定义逻辑段
- 格式:
- 段名 SEGMENT [定位类型] [组合类型] [‘类别’]
…… - ENDS
- a)段名:表示该段语句的地址。
- b)定位类型:PAGE/PARA/WORD/BYTE
- c)组合类型:表示该段与其他同名段间的连接方式
- 段名 SEGMENT [定位类型] [组合类型] [‘类别’]
- 格式:
组合类型名 | 意义 |
---|---|
PUBLIC | 只要是满足定位类型,就可依次连接 |
COMMON | 所有同名段共享存储空间,且以最长的段最为连接后的空间容量 |
AT | 将段定位到由表达式求得的节边界地址上 |
STACK | 把所有带有堆栈属性的模块依次连接 |
MEMORY | MEMORY后的第一个段连在同段名段中的最高地址,之后的按COMMON处理 |
- ’类别‘:决定连接时装入各逻辑段的顺序,相同类别的逻辑段装入连续的内存区,无名的按先后排序装入内存。
4.2.2 ASSUME 语句
指出逻辑段与物理段的关系
- 格式:
- ASSUME 段寄存器名:段名[段寄存器名:段名,……]
- 段寄存器:CS/DS/SS/ES
- 段名:由SEGMENT伪指令定义的段名。
- ASSUME 段寄存器名:段名[段寄存器名:段名,……]
4.2.3 ORG伪指令
- 格式:ORG 表达式
- 指明该语句下一条程序的段内偏移地址。其表达式为2字节无符号数。
4.2.4 PUBLIC与EXTRN伪指令
- PUBLIC:其后定义的符号公用。
- 格式:PUBLIC 符号
- EXTRN:引用外部的符号与符号的类型
- 格式:EXTRN 名字:类型
4.2.5 汇编语言过程定义
定义格式:过程名 PROC [类型]
……
RET
过程名 ENDP
- 1)过程名: 一种供调用的标识符,或调用的入口地址,其段地址和偏移地址表示过程中第一个语句的段地址和偏移地址
- 2)类型: NEAR:过程与调用程序在同一段;FAR:过程与调用程序在不同段
- 3)PROC/ENDP:过程定义的关键字,一个表开始另一个表结束;
- 4)RET:返回到调用指令的下一条指令。
- 5)过程的调用:CALL 过程名。
4.2.6 标准程序返回方式
1)使用中断调用20H
2)使用DOS的功能调用
- 在结束后插入:MOV AH,4CH
INT 21H
4.3 子程序
4.3.1 子程序结构(同过程调用)
4.3.2 主程序与子程序的参数传递
1)寄存器传参
- 子程序的入口参数和出口参数由寄存器传递
2)指定内存单元传参
- 入口参数和出口参数同在一个指定区
3)堆栈传参
- 入口参数和出口参数通过堆栈传递
4.4 DOS功能调用
输入/显示功能
- 单字符输入
- MOV AH,O1H
- INT 21H
- 可将输入的单字符储存到AL中
- 单字符显示
- MOV DL,待显示单字符的ASCII码
- MOV AH,02H
- INT 21H
- 多字符输入
- MOV DX,数据区首偏移地址
- MOV AH,0AH
- INT 21H
- 多字符显示
- MOV DX,待显示字符串首地址偏移地址
- MOV AH,05H
- INT 21H