1.通用寄存器
例:AX寄存器本身就在EAX里面,为了便于记忆,可以理解为EAX的后一半或者前一半就为AX。同理可得,AL本身就在AX里,,,,,,,,,,,,,,
1.MOV指令
(1)代码演示(占位):
MOV EAX,OxAAAAAAAA
MOV AX,OxBBBB
MOV AH,OxCC
MOV AL,OxDD
MOV( *** 作码)后面的第一个为目标 *** 作数,第二个为源 *** 作数。
作用:拷贝源 *** 作数到目标 *** 作数。
①源 *** 作数可以是立即数,通用寄存器,段寄存器,或者内存单元,
②目标 *** 作数可以是通用寄存器,段寄存器,或者内存单元。
③ *** 作数的宽度,必须一样。
④源 *** 作数和目标 *** 作数不能同时为内存单元。
MOV ECX,EAX: 是把先前EAX的值复制一份放到ECX中。
(2)MOV的语法
r为通用内存器 m代表内存 imm代表立即数
即:r8为8位通用内存器,m8代表8位内存,imm8代表8位立即数。(最大8位,可输入小于8位的,其余位自动补0)
2.ADD指令(加法指令)
3.SUB指令(减法指令)
SUB r32,r/m32
4.逻辑指令
(1)AND指令
(2)OR指令
(3)XOR指令
前三个指令书写格式与ADD,SUB指令相同,仅仅变前三个大写字母,在这里不多进行表示。
(4)NOT指令
5.寄存器与内存的区别
(1)寄存器位于CPU内部,执行速度快,但比较贵。
(2)内存速度相对较慢,但成本低,所以可以做得很大。
(3)寄存器和内存没有本质区别,都适用于存储数据的容器,都是定宽的。
(4)寄存器通常有八个,EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI.
(5)计算机中有几个常用计量单位:BYTE,WORD,DWORD
BYTE 字节=8(BIT)
WORD 字 =16(BIT)
DWORD 双字 =32(BIT)
1 KB=1024 BYTE
1 MB=1024 KB
1 GB=1024 MB
6.内存的数量特别庞大,无法每个内存单元都起一个名字,所以要用编号来代替,我们称计算机CPU是32位或者64位,有很多书上之所以叫32位计算机,是因为寄存器的宽度是32位,是不准确的,因为还有很多寄存器都是大于32位的。
32位计算机:是因为计算机的寻址编号是32位的。
32位计算机的编号最大是32位,也就是32个1,换成16进制为FFFFFFFF,也就是说,32位计算机内存寻址的最大范围是0~4G,内存的单位是字节,那内存中能存储的信息最多为FFFFFFFF+1,即4G.。
但 32位的计算机,能识别的内存最多不一定为4G ,有的 *** 作系统可以改变寻址范围。
7.内存的格式
(1)每个内存的单元宽度为8。
(2)[编号]称为地址。
(3)地址的作用,当我们想从内存中读取数据或者想向内存写入/读取数据。
例:mov word ptr DS:[Ox12345678],OxFFFF 其中word为(要读/写多少)宽度
又或者 mov eax,dword prt ds:[Ox1234556]
prt:Point代表后面是一个指针(指针的意思就是里面存的不是普通的值,而是个地址)
ds:段寄存器
[]内的是:内存编码,必须是32位,前面的0可以省略
注意:地址编码不要随便写,因为内存是有保护的,并不是所有的内存都可以直接读写(需要特别处理),建议地址编码写成esp的值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)