mov
movl
mov long : 32bits
movw
mov word : 16bits
movb
mov byte : 8bits
movsb
- 字符串传输指令
- 把DS:SI这个地址的N个字节复制到ES:DI这个地址上
lea
- 取有效地址(偏移量)
- lea ignore_int, %edx 表示把ignore_int处的有效地址传给edx(note:是去ignore_int处的偏移量,而不是ignore_int处存储的内容)
lds
- 使用方法:
lds mem,reg
- 代表意义:mem代表偏移地址,reg代表寄存器;把mem的低字节放入到reg中,mem的高字节放入ds中
les
- 使用方法:
les mem,reg
- 代表意义:mem代表偏移地址,reg代表寄存器;把mem的低字节放入到reg中,mem的高字节放入es中
lfs lgs lss
- 同lds、les的用法相同,只不过高字节存入的寄存器不同
push
- 将栈指针sp移动,然后将数据保存到堆栈中(note:push总是先压入高地址,再压入低地址)
- 下面执行的过程是 ax = 0xff11; sp = sp - 2, 保存ax到栈空间
movb ff11h,%ax
push %ax
pop
与push相反
call
- 暂时就先理解为函数调用吧
- call xxx(xxx 为标号,我觉得可以将标号理解为c语言中的函数名称)
iret
中断返回指令
shl
SHL(左移)指令使目的操作数逻辑左移一位,最低位用 0 填充。最高位移入进位标志位,而进位标志位中原来的数值被丢弃;
int
- int指令可以引发中断
int n
n代表中断号- 执行过程:
- 取中断类型n
- 标志寄存器入栈,IF=0、TF=0
- cs、ip入栈
- (ip)=(n4),(cs) = (n4 + 2)
inc
- 加1指令
- inc指令速度比add指令快,占用空间小
- inc指令会影响AF OF PF SF ZF标志位,但不会影响CF标志位
dec
- 减1指令
- dec指令速度比sub指令快,占用空间小
- dec指令会影响AF OF PF SF ZF标志位, 但不会影响CF标志位
fill伪指令
- 格式:
.fill repeat,size,value
- 产生repeat个大小为size字节的重复拷贝,size最大是8,size字节的值是value
in
- 从端口输入一个字节或字到AL或AX中,源操作数是端口地址,可以是8位的常量或者DX中的一个16位地址
- 使用方式:
in AL,imm(应该不需要是8位,也可以是16位,比如3F8h)
in AL,dx
out
- 将累加器中的一个字节或字输出到端口,端口地址如果在范围0-FF之间,可以是一个常量,也可以在DX中存放0-FFFFh之间的端口地址
- 指令格式:
out imm8, accum(应该不需要是8位,可以是16位,比如3F8h)
out dx, accum
ltr
- 使用方式:
ltr %ax
- 意义:将寄存器ax中的值加载到任务寄存器TR中
lldt
- 使用方式:
lldt %ax
- 意义:将寄存器ax中的值加载到局部描述符表寄存器LDTR
stosb
- 该指令为单字符输出指令
- 调用该指令,可以将累加器AL中的值传递到当前ES段的DI地址处,并根据DF的值来影响DI,如果DF为0,则调用该指令后,DI自增1
- 使用方法:
1.设置ES和DI
mov ax, #xxxx
mov es,ax
mov di,#yyyy
2.设置AX的值
mov ax,#zzzz
3.写入
stosb
cld与std
org
- 汇编伪指令
.org xxxx
- 告诉汇编器下一条指令的偏移地址为xxxx
xchg
- 指令格式:
xchg reg mem; xchg mem reg; xchg reg reg;
- 功能:对两个寄存器或者寄存器与内存变量之间进行交换,交换不会对标志位产生影响