汇编语言与接口技术第四章 汇编程序
汇编语言与接口技术第四章 汇编程序
汇编程序更多的应该在实践中掌握。故仅做概念总结。
标识符
标识符简单来说就是程序员自己定义的名字,来表示常量,变量,标号,子程序名之类的。
标识符的命名规范
- 标识符可以由字母,数字和四种特殊字符(?,_,@,$)构成,最大长度不超过247。
- 汇编语言中都是大小写不敏感的,所以‘A'和’a'有相同的功用
- 标识符不可以用数字开头(这样就可以很好的和十六进制数字做区分)
- 标识符不能单独用“?”或者“$"命名,但”_"和“@”可以。
标号
标号是代码中表示数据位置的符号,可以提示程序跳转的位置。具体来讲就是判断,循环等操作时提示要跳转的地址是什么从而对IP进行正确的修改。
FLG:
....
....
LOOP FLG
LP:
....
CMP AX ,DX
JMP LP
伪指令
伪指令没有对应的机器码,它仅仅在汇编过程中指导汇编器做出正确的操作。
比如 ASSUME 指导汇编器逻辑段地址和段寄存器的绑定,使得段寄存器的值就可以代表某逻辑段地址
ASSUME CS:CODES, DS:DATA, SS:STACKS
SEGMENT 指导汇编器开辟对应的逻辑段空间
DATA SEGMENT
ARR DB 1010 DUP('$')
LEN DB ?
SUM DW ?
TIP1 DB 0DH,0AH,'Please input a number: ','$'
TIP2 DB 0DH,0AH,'The sum is: ','$'
P DW 10000,1000,100,10,1
results DB 10 DUP('$')
DATA ENDS
STACKS SEGMENT
STACKS ENDS
END 表示结束汇编源程序
相应的还有ENDS,ENDP等
EQU,可以重新定义指令,数值,变量的名字,效果类似cpp中的#define ,它起到为标识符的作用,其会指导汇编器在汇编器把定义好的别称替换成对应的指令或数值。另外,它不会给标识符分配空间,这些定义出的别称在汇编过程中都被替换。
MOVE EQU MOV
INF EQU 7FFFH
和EQU很像的还有=伪指令。它也可以为标识符赋值,但功能没有EQU强大,只能赋值数值或者数值表达式。但=伪指令可以在程序中多次赋值同一标识符,但EQU 只能赋值一次。
SEG,段属性伪指令。返回操作数的段地址。
OFFSET,返回操作数的偏移地址。
LENGTHOF,返回数据的个数。
SIZEOF,返回数据所占内存。
TYPE,返回数据类型所占的空间大小。
有这样的公式:LENGTHOG * TYPE = SIZEOF
PTR,临时强制转换数据类型,可以修改程序所指向的内存空间大小,从而达到数据类型对齐的效果。一般修饰存储器地址,它可以让原来指向1字节变成指向两字节,但无法真正的扩充内存空间,所以PTR修饰寄存器和立即数都是没有意义的。
甚至于
MOV DX,word ptr al
这样还会报错,因为我们并不能把8位寄存器扩展到16位。
$,地址计数器引用符号,返回的是一个偏移地址,总指向当前最近的未被使用的内存空间。
指令
指令是一条汇编语句,由标号,指令助记符 ,操作数,注释四部分组成。标号和注释可以没有
以上的构成了程序的框架,一个汇编的基础框架如下
DATA SEGMENT; 定义数据段
DATA ENDS; 数据段结束
STACKS SEGMENT; 定义堆栈段
STACKS ENDS; 段结束
CODES SEGMENT; 定义代码段
ASSUME CS:CODES, DS:DATA, SS:STACKS; 链接各个段和段寄存器
START:; 开始标号
MOV AX, DATA; 这两行真正的给段寄存器赋值 初始化DS
MOV DS, AX
; 这里写代码 实现功能
MOV AH, 4CH; 返回DOS的功能调用,是所有汇编语言源程序的结束语句
INT 21H
CODES ENDS; 段结束
END START; 结束汇编源程序的伪指令
DOS功能调用
都是将操作编号放入AH中,然后用INT 21调用。
01号功能
功能:读入一个字符并将其ASCII码放入AL中。
MOV AH,01H
INT 21H
02号功能
功能:输出在DL中的字符
MOV AH,02H
MOV DL,'C'
INT 21H
09号功能
功能:将段首址在DX中的字符串输出。
MOV AH,09H
LEA DX,STRING
INT 21H
0A号功能
功能:读入字符串并将之放在DS:DX中
MOV AH,0AH
LEA DX,STRING
INT 21H
4C号功能
功能:结束程序
MOV AH,4CH
INT 21H
程序编写还是实操吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」