目录 Table of Contents
第一条汇编指令
第一条汇编指令实例
数据传送指令 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 那边.