通用寄存器-内存读写

来源:互联网 发布:艳照门 张柏芝 知乎 编辑:程序博客网 时间:2024/05/18 06:21
通用寄存器-内存读写
代码演示:
MOV EAX,0xAAAAAAAA
MOV AX,0xBBBB
MOV AH,0xCC
MOV AL,0xDD

MOV指令
MOV EAX,AAAAAAAA
MOV AX,0BBBB
MOV AH,0CC
MOV AL,0DD

MOV EBX,BBBBBBBB
MOV EAX,EBX
MOV AX,CX
MOV AH,DL

MOV的语法
1、MOVr/m8,r8         r通用寄存器
2、MOVr/m16,r16     m代表内存
3、MOVr/m32,r32     imm代表立即数
4、MOVr8,r/m8         r8代表8位通用寄存器
5、MOVr16,r/m16     m8代表8位内存
6、MOVr32,r/m32    imm8代表8位立即数
7、MOV r8,imm8
8、MOV r16,imm16
9、MOV r32,imm32

MOV 目标操作数,源操作数
作用:拷贝源操作数到目标操作数
1、源操作数可以是立即数、通用寄存器、段寄存器、或者是内存单元。
2、目标操作数可以是通用寄存器、段寄存器或乾内存单元、
3、操作数的宽度必须一样
4、源操作数和目标操作数不能同时为内存单元。

ADD指令
 ADD AL,imm8
ADD AX,imm16
ADD EAX,imm32
ADD r/m8,imm8
ADD r/m16,imm16
ADD r/m32,imm32
ADD r/m16,imm8
ADD r/m32,imm8
ADD r/m8,r8
ADD r/m16,r16
ADD r/m32,r32
ADD r8,r/m8
ADD r16,r/m16
ADD r32,r/32

SUB指令
SUB AL,imm8
SUB AX,imm16
SUB EAX,imm32
SUB r/m8,imm8
SUB r/m16,imm16
SUB r/m32,imm32
SUB r/m16,imm8
SUB r/m32,imm8
SUB r/m8,r8
SUB r/m16,r16
SUB r/m32,r32


OR指令
OR AL,imm8
OR AX,imm16
OR EAX,imm32
OR r/m8,imm8
OR r/m16,imm16
OR r/m32,imm32
OR r/m16,imm8
OR r/m32,imm8
OR r/m8 r8
OR r/m16,r16
OR r/m32,r32
OR r8,r/m8
OR r16,r/m16
OR r32,r/m32

NOT 指令
NOT r/m8
NOT /m16
NOT r/m32

寄存器与内存的区别:
1、寄存器位于CPU内部,执行速度快,但比较贵。
2、内存速度相对较慢,但成本较低,所以可以做的很大。
3、寄存器和内存没有本质区别,都是用于存储数据的容器,都是定宽的。
5、计算机中的几个常用计量单位:BYTE WORD DEORD
BYTE 字节=8(BIT)
WORD 字 =16(BIT)
DWORD 双字=32(BIT)

1KB = 1024BYTE
1MB =1024KB
1GB = 1024MB
6、内存的数量特别庞大,无法每个内存单元都起一个名字,所以用编号来代替,我们称计算机CPU是32位或者是64位。
有很多书上说之所以叫32位计算机是因为寄存器的宽度是32位,是不准确的,因为还有很多寄存器是大于32位的。
计算机内存的第一个字节会有一个编号(即内存编号的单位是字节),如下图:
0x00000000
0x00000001
0x00000002
......
......
......
......
.....
......
0xFFFFFFFF
32位计算机的编号最大是32位,也就是32个1,换成16进制为FFFFFFFF,也就是说,32位计算机内存寻址的最大范围是FFFFFFFF,
内存的单位是字节,那内存中能存储的信息最多为:FFFFFFFF+1字节即4G,这也是为什么我们在一个XP系统上面内存小于4G.
7 、只要是32位的计算机,那么最多识别的内存为4G,对吗?
正常情况下。

通用寄存器-内存读写
从指定内存中写入/读取数据
mov dword ptr ds[0x0012ff34],0x12345678
mov eax,dword ptr ds:[0x0012FF34]
dword:要卖多少 此是是4字节   byte==1字节word ==2字节
ptr:Point 代表后面是一个指针(指针的意思就是里面的不是普通的值,而是个地址)
ds:段寄存器 先不用管 记住就行
0x0012FF34:内存编号 ,必须是32位的 前面0可以省略
注意:地址编号不要随便写,因为内存是有保护的,并不是所有的内存都可以直接读写(需要特别处理)建议地址编号写成esp的值
mov [0x12345678],0xFFFF  
mov word ptr DS:[0x12345678],0xFFFF
原创粉丝点击