注册 登录
编程论坛 汇编论坛

两个汇编语言的概念问题

shaoyuan 发布于 2008-09-29 20:45, 2578 次点击
段的大小指的是什么,即段的概念是什么?
一个存储单元是多少?
8 回复
#2
ONEPROBLEM2008-09-29 23:53
LZ问的应该是DOS汇编吧.
什么是段?这个问题三言两语说不清~~
我是这样理解的:整个内存空间就像一把有"刻度"的尺子,我们所说的"段"就等于在这把尺子中取一部分的"刻度".
假如,尺子的长度是10厘米,我从第5厘米开始数,到第8厘米,这个段的长度就是3厘米;它是从第5厘米开始算的,偏移量是3 .
一个存储单元是多少?
一般是一个字节吧.
#3
rediums2008-09-30 00:48
段的概念来源于8086处理器,8086处理器为16位处理器,内部寄存器为16位,地址总线为20位,所以,20位地址总线能够寻址1M的内存空间,内存的地址是用20个数据位来表示,但对于内部的16位寄存器来说,无法容纳20位的地址,所以CPU把内存划分为最大为64K的段,这样就能用16位寄存器来寻址这64K的空间了,通过把1M的内存空间划分为若干个64K的段,这样内部寄存器就能偶操纵整个1M的空间了。当然段的大小可以任意,只要不大于64K就行了。

CPU内部有四个段寄存器,CS,DS,SS,ES,用它们来存储内存中段的起始地址,因为内存地址是20位的,所以对于段的起始地址就有了一定的要求,20位中的最后四位必须是0,CS,DS,SS,ES这四个段寄存器在存储起始地址的时候只存储前16位,CPU在实际访问内存的时候会自动在段寄存器的末尾加上四个零(左移四位),构成实际内存中的起始地址。

访问内存采取段地址+偏移地址的方式,偏移地址一般存放在SI,DI,IP中,最大值为64K,也就是一个段的最大容量。

内存中的最小存储单元是1个数据位,但CPU在访问内存的时候是以字节、字,双字或者四字来访问的,给定一个地址,CPU可以访问一个字节,一个字,一个双字或者四字,当然,8086处理器一次最多只能访问一个字,386以后的处理器可以访问更多。
#4
猫昵宝贝2008-10-01 01:28
谢谢  学习了
#5
耙耙虫2008-10-01 20:57
汇编好麻烦啊~~~~~
#6
耙耙虫2008-10-01 20:58
我看完3楼说的,现在都不知道门朝哪了......
#7
boliyuan2008-10-01 22:31
我们现在正在学微机原理,我觉得三楼的说没错。。。呵呵,支持!
#8
liujiahuan2011-10-03 23:12
xuele
#9
darkdsn2012-11-27 22:07
两个汇编语言的概念问题
 段的大小指的是什么,即段的概念是什么?
 一个存储单元是多少?
首先要说存储单元本身是一个字节,也就是8位,实际存储时还有一个校验位,也就是9位,在汇编语言中(除了早期小于16位的处理器外)就是字节.
段一般来说是X86处理器引入的,X86处理器的寄存器是16位的要访问多于64K的地址要使用更大的段寄存器,从8086的20位段寄存器到48位的现代段寄存器都有.早期的16位寄存器表明在寄存器寻址时段是16位数---也就是64K大小,换句话说就是64K字节.
现代的段(如64位处理器)实际上已变成32位数---也就是4G大小,换句话说就是windowsX32所能访问的大小,windowsX64中就又能看到段寄存器了,除非是做系统,一般也看不到。
1