汇编Day03内存

每个应用程序(进程)都有自己独立的4GB内存空间,但是这个内存不是物理内存,只是假的内存

内存地址:

内存太大没办法起名字,所以只能用编号,当我们想向内存中存储数据,或者从内存中读取数据时,必须用到这个编号,就像写信必须要写收信人地址一样。

这个编号又称为内存地址(32位0x0000 0000,前面的0可以省略),每个地址代表一块内存(1byte=8bit)

正是因为内存地址是32位,所以最多有 0xFFFF FFFF+1(因为还要包括0x0000 0000)块内存,即2^32byte==4GB。

  1. 立即数到内存
    1. MOV BYTE(限定内存段宽度为1byte) PTR DS:[037FD60](内存地址),1
    2. MOV DWORD(宽度为4字节的内存段) PTR DS:[0037FD60],0X12345678//虽然一个地址代表内存块(1字节),但是当存入4个字节时,就会向以其为首地址的4个内存段存入该值。
  2. 寄存器到内存
    1. MOV DWORD PTR DS:[39D004],EAX 当我们使用mov指令移动数据的时候,两边的数据宽度必须一致。
  3. 内存到寄存器
    1. MOV eax,DWORD PTR DS:[39D004]

内存地址的5种形式:

形式1:【立即数】

读取内存的值:

MOV EAX,DWORD PTR DS:[0x13FFC4]

向内存中写入数据

MOV DWORD PTR DS:[0x13FFC4],EAX

形式2;【reg】reg代表八个32位通用寄存器中任意一个

假设:EAX 0x13FFC4

MOV DWORD PTR DS:[EAX],12345678

形式3:[reg+立即数]

mov eax,dword ptr ds:[ECX+4]//ECX所储存的值+4即为内存编号

形式4:【reg+reg*1/2/4/8】

形式5:【reg+reg*1/2/4/8+立即数】

小端存储模式(80x86上绝大多数应用都是小端存储模式)

大端模式:数据高位在低位,数据低位在高位

小端模式:数据低位在低位,数据低位在低位

例如:mov word ptr ds:[0x0000 0000],0x1A2C 先存低位的2C再存高位的1A

2C(数据低位)0x0000 0000(内存低位)
1A0x0000 0001
 0x0000 0002
 0x0000 0003
  
  
 0xFFFF FFFF(内存高位)

 

 

 

 

 

 

 

 

 

 

再例如:mov byte ds:[0x0000 0000],0x1A2C3E4F     //只把4F存进去了

2.DTDEBUG内存窗口的使用

db  002AFFD8 以一个字节一个字节的方式来查看以002AFFD8为首地址的内存段

dw  002AFFD8 以两个字节两个字节的方式来查看以002AFFD8为首地址的内存段

dd  002AFFD8 以4个字节4个字节的方式来查看以002AFFD8为首地址的内存段

常用汇编指令

mov指令

1、MOV r/m8,r8          r 通用寄存器    
    
2、MOV r/m16,r16        m 代表内存
    
3、MOV r/m32,r32        imm 代表立即数

4、MOV r8,r/m8          r8 代表8位通用寄存器
    
5、MOV r16,r/m16        m8 代表8位内存
    
6、MOV r32,r/m32        imm8 代表8位立即数
    
7、MOV r8, imm8         byte 字节
    
8、MOV r16, imm16       word 字
    
9、MOV r32, imm32       dword 双字

ADD指令
            
ADD AL, imm8 //al=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/m32

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
    
SUB r8, r/m8
    
SUB r16, r/m16
    
SUB r32, r/m32

AND指令//与运算
            
AND AL, imm8
        
AND AX, imm16
        
AND EAX, imm32
        
AND r/m8, imm8
        
AND r/m16,imm16
        
AND r/m32,imm32
        
AND r/m16, imm8
        
AND r/m32, imm8
        
AND r/m8, r8
        
AND r/m16, r16
        
AND r/m32, r32
        
AND r8, r/m8
        
AND r16, r/m16
        
AND r32, r/m32


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


XOR指令://异或运算
        
XOR AL, imm8
    
XOR AX, imm16
    
XOR EAX, imm32
    
XOR r/m8, imm8
    
XOR r/m16,imm16
    
XOR r/m32,imm32
    
XOR r/m16, imm8
    
XOR r/m32, imm8
    
XOR r/m8, r8
    
XOR r/m16, r16
    
XOR r/m32, r32
    
XOR r8, r/m8
    
XOR r16, r/m16
        
XOR r32, r/m32


NOT指令:非指令
    
NOT r/m8

NOT r/m16

NOT r/m32

MOVS指令:移动数据,可以从内存到内存移动数据

MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]//EDI和ESI这两个容器是固定用法,分别储存了两个地址,简写为:MOVSB

MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI]       简写为:MOVSW

MOVS DWORD PTR ES:[EDI],WORD PTR DS:[ESI]    简写为:MOVSD

例如:

MOV EDI,12FFD8

MOV ESI,12FFD0

MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]//这个指令每执行一次,EDI和ESI内所存储的地址就会自动加1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值