内存,贮存暂时数据的当地.在运转中的程序.正在看的图片,正在修改的文本,你现在在看的这章教程,一概都被复制一份在内存里.
这一章讲的便是内存数据了.现在的电脑,内存都上G了吧.可是,你知道么?在电脑刚开机那会儿,最多能用1MB的内存!这是因为CPU其实有几个形式,实形式和保护形式,以及64位形式,(再往后的更强壮的形式我就不说了,因为……我也不知道!)拜访内存,就需求寻址,刚开机的时分,CPU在实形式下,什么是实形式呢?那是很久以前的CPU的16位形式,那时分的电脑内存只需1MB,也便是说寻址办法只需够寻址1MB就行了.天然不或许数G内存都用上.后来80386CPU的32位保护形式出来了(其实中心有个80286,从286开端就有保护形式了,不过好像不是32位的),386保护形式的寄存器是32位了.能寻址4GB内存(暂时只教实形式,保护形式之类就不具体说了.今后再看看能不能也写进这教程里)现在新出现的80686有64位形式,寄存器是64位的.
嘛,说要点,实形式的寻址办法.内存是一维的,数据都依照一条线摆放,拜访内存需求供给一个内存地址.内存第1个字节的地址是0,(电脑数学,0是起点),恩,便是那样,第2个字节的地址是1.顺次类推.寻址办法便是拜访内存供给地址的办法.在实形式里,寄存器有16位,也便是说独自一个寄存器能表达的地址最多只需64KB(请自行验证,验证办法:用计算器的二进制形式,输入16个1,转10进制)
64KB啊!那显着不够用啊!所以,实形式寻址运用2个寄存器进行寻址,依照”段:偏移”的办法寻址.
前面说过段寄存器CS,DS,ES,SS,便是专门用来寻址用的,存储”段”那部分的数据.至于”偏移”部分的数据嘛…能够用寄存器BX,SI,DI,SP,IP,BP中的任何一个来表明,也能够直接用数字表明.实例:
CS:BX
CS:1234
那么,”段:偏移”又怎么表达一个一维地址的呢?请看下边:
CPU 经过地址线告诉内存它要操作的当地.在CPU里边有20根地址线,也便是说,”段:偏移”寻址办法只能寻址20位的地址(所以说就算2个16位寄存器合一起,想寻址32位的内存地址那也是不可的…),20位,也便是1MB.那么,把2个16位的数据转换成20位呢?
算法是这样的:
(段*16)+偏移
恩,段寄存器里边的数值乘以16(在16进制中是10)加偏移地址.
实例:
段寄存器=15
偏移地址=128
所以寻址得到的内存地址为:(15*16)+128=368
恩, 讲完寻址办法了.接着讲数据的低位高位排序.将来在学习过程中,你会碰到一些数字倒过来贮存的状况,比如说五万三千二百一十七,贮存在内存中却是 71235,这便是高位和低位按顺序摆放了,在这个数字里,7是个位,所以在最前,1是十位所以第2.以此类推.或许你现已震动的发现了,没错,电脑中的数字没有反,是咱们实际顶用的数字反了,五万三千二百一十七咱们用53217表明,咱们把最高的万位的5放在了最前面!在寄存器中也是如此,低位在前高位在后.
接着讲讲汇编中的数字表明办法吧.在汇编中能够输入10进制2进制16进制等数字(当然,编译生成代码后都是2进制.)这么多的进制,假如没有阐明,汇编编译器一定会弄错.那么咱们怎么向编译器表明哪个数字是多少进制的呢?
咱们能够在数字后边加个英文字母表明,2进制的数字在后边加B,实例:01110011B 16进制的数字则在后边加H,实例:1F3AH,至于10进制则不需求,一切的数字进制后边都有一个英文字母,那么其间一种进制不必也不要紧的是吧?因为10进制最常用所以就把后边不必加英文字母的权力给了它,在汇编中10进制数字不必特别表明.
别的,因为16进制触及到了英文字母,ABCDEF,有或许和汇编代码弄混,所以,假如16进制第一个数字是英文字母,则有必要在前面加个0.
实例:
A2H
有必要写成:
0A2H
好了,本章就说道这儿了~