2.内存
寄存器和内存有什么区别呢?
计算器也有算的快的和算的慢的,那么,计算速度快的叫做寄存器,计算速度慢的叫做内存。它们的结构差不多,都是定宽。但是寄存器由于速度快,所以价格贵,那么在CPU内部,寄存器的数量就会非常有限,只有8个,所以我们可以命名。然而内存速度慢,便宜,所以数量比较多,那么久没必要取名字了,所以只能取个编号。内存中寄存器的编号是32位的。
ds:[个数],表示内存单元。
ptr指的是指针point
word是两个字节
byte是一个字节
dword是四个字节
如:dword/word/byte ptr ds:[32位的数]。[]里面不仅仅可以写一个具体的数,还可以写某一个寄存器的值。
第一个寄存器叫做BASE寄存器(8个寄存器都可以),第二个寄存器是INDEX也是8个寄存器之一。后面乘一个数scale(2的次幂),后面再加一个数(DISP)
BASE+INDEX(1,2,4,8)+DISP
可以有5种组合
BASE
INDEX*(1,2,4,8)
DISP
BASE+INDEX×(1,2,4,8)
BASE+INDEX×(1,2,4,8)+DISP
cpu 实现了将地址赋给寄存器:LEA 指令把方括号里面内存的编号给目标寄存器:load
effective address。
当一个值不好确定宽度时,使用 dword ptr 或者 word ptr,byte ptr,源可以是
内存或寄存器,也可以是立即数,但是目标不能是立即数。两方都可以是内存,但是内存只能在一个地方出现。两边的数据宽度要一样。所以指令是由操作码和操作数组成,操作码是表明我想干什么。复杂的指令也是由简单的指令组合而成。
内存地址的用处是什么?
当用户运行程序时,cpu 需要不停地去从存储区取代码和数据,这样非常耗时,于是
cpu 先将可能用到的代码和数据从存储区全部放入内存,再从内存中取数据和代码。看似多了一个过程,但是从内存中获取比存储区快得多,所以节省了很多时间。
内存地址的表示方法有哪些?
内存地址的表示方法有很多,除了上图中的表示方法外,还有其他四种表示方法。
以下是内存地址表示方法的组成成员:
·位移(Displacement) - 8 位、16 位或 32 位值
·基(Base) - 通用目的寄存器
·索引(Index) - 除 ESP 外的通用目的寄存器
·比例因子(Scale Factor) - 1,2,4 或 8
下列五种地址模式为常用组合:
·位移
·基
·基 + 位移
·(索引×比例因子)+ 位移
·基 + (索引×比例因子)+ 位移