汇编语法

# 基础语法

# 标号

为一个段命名,标号指代了一个地址,如 codesg

codesg segment

这个段由以下命令定义结束

codesg ends

# 声明段的类型

段的类型可能是代码也可能是数据,需要加以声明 assume

assume cs:codesg

# 几种结束

  • 段结束
段名 ends
  • 程序结束
end
  • 程序返回
mov ax, 4c00H
 int 21H

# 示例程序

编写 1.asm

assume cs:codesg
   codesg segment
     mov ax, 2
     add ax, ax
     add ax, ax
     mov ax, 4c00H
     int 21H
   codesg ends
   
   end

执行编译和链接

masm 1.asm
link 1.obj

# 设置程序入口

用一个标号标识,用 end 标号 结束程序入口

assume cs:codesg
   codesg segment
   start:    mov ax, 2
            add ax, ax
            add ax, ax
            mov ax, 4c00H
            int 21H
   codesg ends
   
   end start
小知识

程序被加载到内存后,还会在其前方设置一段内存设置代码 (psp) 用于与程序通信,运行时并不会从程序直接开始,而是从 psp 开始

# 数据的存储

对于 x86CPU, 数据在内存中是小端存储
我们规定关于一个地址编号
0x0001->0xFFFF
前为低地址,后为高地址,是按内存编号的方向区分
对于数据 0x1234 (十六进制数据,需要 16 个比特位存储)
需要拆分为两个字节存储

r 注意

在计算机中一个字节的存储可以完整存储,是没有大小端之分的

这个数据需要在两个相邻地址中存储,这就涉及到了谁先谁后的问题。
大端存储:高位数据 0x1200 需要存储在低地址,低位数据 0x34 需要存储在高地址。
小端存储:低位数据存储在低地址,高位数据存储在高地址。

x86CPU 小端存储的数据读入 CPU 寄存器的时候都会自动反转字节

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

PangBai 微信支付

微信支付

PangBai 支付宝

支付宝

PangBai 贝宝

贝宝