2_第一条汇编指令

第一条汇编指令

第一条汇编指令实例

数据传送指令 mov

mov 顾名思义就是数据移动, 数据传送 (AT&T 语法)

mov Source, Dest

它有两个操作数, 一个源, 一个目的.

  • 注意 AT&T 写的时候, 左侧是源, 右侧是目的.

这个代码意思是说, 将一个 "双字" 从 Source 移动到 Dest

  • 允许的操作数, 类型如下

首先是立即数, 也就是常整数, 整数常量

整数常量只能用来表示 Source

第二个就是寄存器, 可以是 8 个通用寄存器之一.

再者也可以是存储器, 也就是一个地址. 因为它移动的是一个 l, 也就是一个 double word, US所以是 4 个连续的字节.

那么这种存储器的地址表示呢, 它会支持多种的寻址方式

数据传送指令支持的不同操作数类型组合

括号里面是什么呢, 它表示内存地址

简单的寻址模式

如果我们有个操作数是访问内存的话, 那么内存地址怎么计算, 或者叫作怎么寻址呢 ?

间接寻址 (R) Mem[Reg[R]]

间接寻址, 我们还是拿 movl (%ecx), %eax 这个例子来说, (%ecx) 就是我把 ecx 里面的数值作为一个内存的地址去访问这个地方的数据, 去把它数据拿出来而不是把地址拿出来. 是把 Memory Address 所指明的那个位置, 里面的数据拿出来, 把它作为操作数, mov 过去

基址+偏移量 寻址 D(R) Mem[Reg[R]+D]

实际上和刚才的差不多, 无非就是说, 我在括号外面加了一个常数. 比方说这个例子 :

movl 8(%ebp), %edx

寄存器 ebp 里面的值拿出来加上 8, 加出来的和作为内存的地址.

有了内存地址之后呢, 把内存里面的这个数取出来, 再挪过去 edx 那边.