AT&T下汇编语法

mov

movl

mov long : 32bits

movw

mov word : 16bits

movb

mov byte : 8bits

movsb

  • 字符串传输指令
  • 把DS:SI这个地址的N个字节复制到ES:DI这个地址上

lea

  1. 取有效地址(偏移量)
  2. lea ignore_int, %edx 表示把ignore_int处的有效地址传给edx(note:是去ignore_int处的偏移量,而不是ignore_int处存储的内容

lds

  1. 使用方法:lds mem,reg
  2. 代表意义:mem代表偏移地址,reg代表寄存器;把mem的低字节放入到reg中,mem的高字节放入ds中

les

  1. 使用方法:les mem,reg
  2. 代表意义:mem代表偏移地址,reg代表寄存器;把mem的低字节放入到reg中,mem的高字节放入es中

lfs lgs lss

  • 同lds、les的用法相同,只不过高字节存入的寄存器不同

push

  1. 将栈指针sp移动,然后将数据保存到堆栈中(note:push总是先压入高地址,再压入低地址
  2. 下面执行的过程是 ax = 0xff11; sp = sp - 2, 保存ax到栈空间
movb ff11h,%ax
push %ax

pop

与push相反

call

  1. 暂时就先理解为函数调用吧
  2. call xxx(xxx 为标号,我觉得可以将标号理解为c语言中的函数名称)

iret

中断返回指令

shl

SHL(左移)指令使目的操作数逻辑左移一位,最低位用 0 填充。最高位移入进位标志位,而进位标志位中原来的数值被丢弃;

int

  1. int指令可以引发中断
  2. int nn代表中断号
  3. 执行过程:
    1. 取中断类型n
    2. 标志寄存器入栈,IF=0、TF=0
    3. cs、ip入栈
    4. (ip)=(n4),(cs) = (n4 + 2)

inc

  1. 加1指令
  2. inc指令速度比add指令快,占用空间小
  3. inc指令会影响AF OF PF SF ZF标志位,但不会影响CF标志位

dec

  1. 减1指令
  2. dec指令速度比sub指令快,占用空间小
  3. 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;
  • 功能:对两个寄存器或者寄存器与内存变量之间进行交换,交换不会对标志位产生影响

猜你喜欢

转载自blog.csdn.net/u012850592/article/details/103903449