在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、寄存器结构这是一个寄存器的结构: 二、CPU窗口解释图片左上角,有蓝色选中的那一块是反汇编窗口,这个窗口显示的是汇编代码 右上角那块是寄存器窗格,我们要知道CPU本身只负责运算,不负责储存数据,数据一般都储存在内存里。但是CPU的计算速度远远高于内存的读写速度,为了避免被拖慢,CPU一般自带一级缓存和二级缓存,基本上CPU缓存可以看出读写速度较快的内存。但是缓存还是不够快,另外数据在缓存里的地址是不固定的,cpu每次读写需要读址会拖慢速度,因此除缓存之外cpu还自带了寄存器。用来储存最常用的数据,哪些最频繁读取的数据(循环变量),都会放在寄存器里面,CPU优先读写寄存器,再由寄存器跟内存交换数据。 程序运行的时候,系统会给它分配一段内存用来储存程序和运行产生的数据。这段内存有起始地址和结束地址。比如从0x1000到0x8000(十六进制数用0X或0x做前缀,0是数字零,而不是字母o),起始地址是较小的那个地址,结束地址反之。这种由用户主动划分出来的内存区域叫做Heap(堆),它由起始地址开始,由低位(地址)向高位(地址)增长。Heap的一个重要特点是不会自动消失,必须手动释放,或者由垃圾回收机制来回收。对,内存泄露泄露的就是heap。 在这个函数执行完毕,stack和heap还会发生一些变化: 在stack里面还有一个帧的概念。帧就是说系统开始执行函数的时候会为其建立一个帧(frame),所有函数的内部变量,比如上一个例子里的i,k,a都会保存在这个帧里面。函数执行结束后,该帧就会被回收释放所有的内部变量,不再占用空间。那么如果是A函数中调用B函数,那么B函数也会建立一个帧,简单来说,调用栈有几层,就有几帧。然后回收的时候是先从B函数的帧开始回收,也就是栈的后进先出。 stack是由内存区域的结束地址开始。高位(地址)向低位(地址)分配。比如内存区域的结束地址是0x8000,第一帧假定是16字节(一个内存地址代表一个字节的存储空间),这一次分配的内存是0x8000~0x7FF1那么下一次的分配地址就会从0x7FF0开始。 mov [a],b 注意: mov eax, [ebx] ; 将ebx值指示的内存地址中的4个字节传送到eax中 假设ebx指示的内存地址已经分配了4个字节, 三、关于声明汇编语言中,声明内存大小事一般用DB(1byte),DW(2byte),DD(4byte) 四、一些思考为什么数组里只能存放固定的数据类型呢?我的想法是这样的,因为数组给每一块空间分配的内存大小是一样的,比如说int是4个字节,所以数组里每一块空间都能保存四个字节的内容,而这个时候往数组里放其他数据类型,如果小了,那么空间就浪费了,如果大了,那就放不进去。所以规定职能存放固定的数据类型吧。 参考博客:http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论