2.汇编-内存

2.汇编-内存

寄存器数量和容量有限,为了存储大量数据,所以我们需要内存

  1. 每个程序都会有自己的独立的4GB内存空间(

这里的内存其实是虚拟的,并不是真的给了程序4G内存,当程序读或者写这段内存的时候,操作系统才会把使用的内存映射到物理内存上
物理内存和内存条之间还有一层映射

WX20170916-044017

1Bit 就是一个位 也就是可以存储1个0或者1
1Byte(字节) = 8Bit
1KB = 1024Byte
1MB = 1024KB
1GB = 1024MB

内存地址

  1. 内存太大没法起名字,所以只能用编号,当我们想读取或者写入数据到内存的时候,就必须用到编号
  2. 这个编号又称为内存地址(32位,前面0可以忽略),换算成16进制,那么就是8个16进制数表示
WX20170916-044944@2x

为何32位中单个应用程序只能用4G内存?

因为内存地址只有32位 那么寻址只能是 0x000000000xffffffff
也就是0xffffffff +1(0x0也是一个地址) = 10000000 个Byte,
一个Byte(字节)可以存储8位(Bit) 那么可以存储 100000000 * 8 = 800000000个0或者1(16进制)
换算成10进制就是34359738368个Byte
通过计算(34359738368/8(Byte)/1024(KB)/1024(MB)/1024(GB)) 就是4GB

内存操作

  1. 立即数到内存(内存需要声明数据宽度,并且写入的数据必须和内存数据宽度匹配)

BYTE = 1字节 =8bit
WORD = 2字节 =16bit
DWORD = 4字节 =32bit

MOV BYTE PTR DS:[19FFF0],0xFF
MOV WORD PTR DS:[19FFF0],0xFFFF
MOV DWORD PTR DS:[19FFF0],0x12345678
  1. 寄存器值到内存

内存地址的每个编号,代表的是一个byte字节
那么我们写的word(双字节)和dword(四字节)的多出来宽度的数据哪里去了?
这里其实会往后写
比如往``写四字节 0x12345678
那么实际情况会是:

0x0019FFF0 12
0x0019FFF1 34
0x0019FFF2 56
0x0019FFF3 78

会连续使用4个字节的内存

MOV DWORD PTR DS:[19FFF0],EAX
MOV WORD PTR DS:[19FFF0],AX
MOV BYTE PTR DS:[19FFF0],AL
  1. 内存到寄存器
MOV EAX,DWORD PTR DS:[19FFF0]
MOV AX,WORD PTR DS:[19FFF0]
MOV AL,BYTE PTR DS:[19FFF0]
  1. 内存到内存

在汇编中,大多数操作都不可以内存到内存

内存的5种形式

立即数

  1. 读取内存的值:
MOV EAX,DWORD PRT DS:[0X19FFC4]
  1. 向内存中写入数据:
MOV DWORD PTR DS:[0X13FFC4],EAX

[REG] reg代表寄存器,可以使8个通用寄存器中的任意一个

  1. 读取内存的值:
MOV ECX,0X13FFD0
MOV EAX,DWORD PTR DS:[ECX]
  1. 向内存中写入数据:
MOV EDX,0X13FFD8
MOV DWORD PTR DS:[EDX],0X87654321

[REG+立即数]

  1. 读取内存的值:
MOV ECX,0X13FFD0
MOV EAX,DWORD PRT DS:[ECX+4]
  1. 向内存中写入数据:
MOV EDX,0X13FFD8
MOV DWORD PTR DS:[EDX+0XC],0X87654321

[REG+REG*{1,2,4,8}]

  1. 读取内存的值:
MOV EAX,13FFC4
MOV ECX,2
MOV DWORD PTR DS:[EAX+ECX*4],87654321
  1. 向内存中写入值:
MOV EAX,13FFC4
MOV ECX,2
MOV DWORD PTR DS:[EAX+ECX*4],87654321

[REG+REG*{1,2,4,8}+立即数]

  1. 读取内存的值:
MOV EAX,13FFC4
MOV ECX,2
MOV DWORD PTR DS:[EAX+ECX*4+4],87654321
  1. 向内存中写入值:
MOV EAX,13FFC4
MOV ECX,2
MOV DWORD PTR DS:[EAX+ECX*4+4],87654321

小端存储模式

内存地址对应一个内存单元
每个单元的大小就是8位(byte) 一个字节

WX20170916-071145

情况1:

MOV BYTE PTR DS:[0x00000000],0X1A
0x00000000 0x1A
0x00000001
0x……….

情况2:

MOV WORD PTR DS:[0x00000000],0x1A2C

分析:
以字节为单位:数据 0x1A2C1A为高位 2C为低位
内存 0x00000000 为低位 0x00000001 为高位

大端模式:

0x00000000 1A
0x00000001 2C

小端模式:

0x00000000 2C
0x00000001 1A

那么我们的存储到底用的那种模式呢?

在x86架构中绝大多数都是用的小端存储(非绝对,受编译器影响)
在arm中绝大多数采用大端模式存储(非绝对,受编译器影响)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354