寄存器
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 | CMP AL,0 |
相当于c语言的
1 | if ( AL == 0 ) |
INT
int是”interrupt”的缩写, 表示中断的意思
HLT
hlt是”halt”的缩写, 表示停止
让cpu进入休眠状态, 受到外部输入后重新激活
JC
jc是”jump if carry”的缩写, 表示如果进位标识位是1时就跳转