通过游戏学指针系列5:实战理解内存与cpu 一。什么是汇编 1语言分类: 机器语言:00011111 低级语言:汇编语言 高级语言:c,c++,java,net,php,python,都是高级语言 2什么是机器语言 一串01,编写程序就是靠一串,例如:00000001 3什么是汇编语言 将此串1000100111011000翻译为一句英文 Mov eax,ebx 二.认识一下cpu 实战通过打开某个软件,查看内存和cpu,具体情况: 1将学习软件拖到od中 2查看cpu窗口 (1)cpu中存放数据的东东 Eax: Ecx: Edx: Ebx: (2)运算逻辑部件 (3)控制部件 三.认识一下内存 1cpu要工作,那么数据来源于哪里呢,来源于内存 2 指令和数据,没有区别,就是一串0和1构成的 四.cpu和内存的关系 目标:获取内存地址中某个内容,cpu与内存如何交互 1cpu通过控制线向内存发送命令,说我要读: 2cpu将地址3发送给内存,3是从地址线传过去的 3内存把数据取出来的08,通过数据线,传给cpu 4cpu用一个寄存器eax=08 五.实战:改变内存中某个地址中的内容 1打开od,od界面说明: 右上角:cpu窗口 左下角:内存地址窗口 左上角: 机器码 左中:汇编指令 2在command中输入查看内存的命令 db 内存地址:表示以字节方式查看内存 3修改内存地址中对应的内容 双击 修改内存地址中对应的内容 4总结: 内存中全部以字节为最小单位 以11为例,这就是一个字节 1 1 0001 0001 最大值是:FF 六.实战二:s=768+12288-1280(实战cpu,内存如何使用) 1. 将三个数转换为16进制,分别为0x300,0x3000,0x500 2. 将第一个数放到一个寄存器中、 代码规则: mov eax,0x3000 mov:固定的,相当于c中的= eax:从cpu中的寄存器名称中随便取的(但是必须是cpu窗口左上角那一块有8个的,尽量取前4个或者后三个) 0x300:具体的数据 相当于: int eax=0x300; 2将另一个数放到另一个寄存器中 mov ebx,0x3000 3将两个数相加 语法: Add 第一个数,第二个数 add eax,ebx 4将上面的eax的结果减去0x500 语法: sub eax,ebx:结果同样放到eax中 5测试 (1)查看当前灰色背景图,表示程序刚好执行到这儿 (2)按F8往下执行一句,此时观察寄存器eax的值 (3)不断按F8看结果
|