汇编语言与接口技术第四章 汇编程序

汇编语言与接口技术第四章 汇编程序

汇编程序更多的应该在实践中掌握。故仅做概念总结。

标识符

标识符简单来说就是程序员自己定义的名字,来表示常量,变量,标号,子程序名之类的。

标识符的命名规范

  1. 标识符可以由字母,数字和四种特殊字符(?,_,@,$)构成,最大长度不超过247。
  2. 汇编语言中都是大小写不敏感的,所以‘A'和’a'有相同的功用
  3. 标识符不可以用数字开头(这样就可以很好的和十六进制数字做区分)
  4. 标识符不能单独用“?”或者“$"命名,但”_"和“@”可以。

标号

标号是代码中表示数据位置的符号,可以提示程序跳转的位置。具体来讲就是判断,循环等操作时提示要跳转的地址是什么从而对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 表示结束汇编源程序

相应的还有ENDSENDP

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

程序编写还是实操吧。

posted @   Mxrurush  阅读(248)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示