0%

汇编指令

寄存器

16位寄存器

  • AX: accumulator, 累加寄存器
  • CX: counter, 计数寄存器
  • DX: data, 数据寄存器
  • BX: base, 基址寄存器
  • SP: stack pointer, 栈指针寄存器
  • BP: base pointer, 基址指针寄存器
  • SI: source index, 源变址寄存器
  • DI: destination index, 目的变址寄存器

8位寄存器

  • AL: 累加寄存器低位

  • CL: 计数寄存器低位

  • DL: 数据寄存器低位

  • BL: 基址寄存器低位

  • AH: 累加寄存器高位

  • CH: 计数寄存器高位

  • DH: 数据寄存器高位

  • BH: 基址寄存器高位

32位寄存器

EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI

在16位寄存器的指令前加E即可表示32位寄存器, 这个字母E来源于英文单词 “Extend”;

虽说EAX是一个32位寄存器, 但是他的高位即没有名字也没有编号, , 也就是说, 虽然我们可以吧EAX作为两个16位寄存器使用, 但只有低十六位用起来方便, 如果我们需要使用高16位时, 需要将高十六位移位至低十六;

段寄存器

  • ES: 附加段寄存器 ( extra segment )
  • CS: 代码段寄存器 ( code segment )
  • SS: 栈段寄存器 ( stack segment )
  • DS: 数据段寄存器 ( data segment )
  • FS: 附加段寄存器 ( extra segment )
  • GS: 附加段寄存器 ( extra segment )

DB

db是”data byte”的缩写, 指向文件中写入一个字节

db a, b, c;

写入a, b, c至文件

db 后可以接字符串, 会自动查询字符集存入对应的字节;

RESB

resb是”reserve byte”的缩写,

如果想在地址中空出10个字节, 可以写

RESB 10;

这样就会写入10个为0的字节

RESB 0x1fe-$

这里的$值当前代码行的的字节数,

在执行中, resb会先用0x1fe减去当前代码行数, 然后继续写入空字节

DW

dw是”data word”的缩写, 在计算机中 word一般值十六位的意思,

即写入16字节的数据

使用同DB

DD

dw是”data dounle-word”的缩写

即写入32字节的数据

使用同DB

MOV

mov是”move”的缩写, 表示赋值\

MOV AX,0 表示AX=0

ADD

add 是加法指令,

add SI,1 等于”SI=SI+1”

CMP

cmp 是比较指令

cmp AL,3 表示将AL中的值取出来与3做比较

JE

je是”jump if equal”的缩写

je是条件跳转语句. 如下

1
2
3
CMP AL,0

JE fin

相当于c语言的

1
2
3
4
if ( AL == 0 )
{
goto fin;
}

INT

int是”interrupt”的缩写, 表示中断的意思

HLT

hlt是”halt”的缩写, 表示停止

让cpu进入休眠状态, 受到外部输入后重新激活

JC

jc是”jump if carry”的缩写, 表示如果进位标识位是1时就跳转

Donate comment here.