会汇编的来

来源:百度知道 编辑:UC知道 时间:2024/06/30 09:19:49
物理地址等于首地址*16+偏移地址,物理地址是内存中二十位的,首地址存在寄存器里用十六位表示,编移地址也是十六位的,物理地址等于首地址左移四个零后加十六位的偏移地址,我想问的是:偏移地址一定就是十六位吗?不一定吧。比如偏移地址是8的话,则偏移地址就表示为
0000 0000 0000 1000的吧,这样就是十六位了,还有我想问一下,在内存里的单一的内存单元是用压缩性BCD码表示的呢,还是用非BCD码表示的呢/?偶是刚学,所以有许多不懂的地方,请高手详细的说一下。

是的,偏地址一定是16位的,因为偏移地址是放在一个16位的字寄存器中。换句话说,只要放在字寄存中一定是16位的,至于说这个值是多少,哪怕是0,也是字类型的。

你可能跟段标号等内容搞混了,段分为段内和段外的直接与间接转移。这个是依据偏移长度而定的,并非是多少位的问题。一般段内短转移为8位,偏移长度不超过256的单元。这些定义是汇编定义,而偏移地址的定义更类似于机器码中的内容,与硬件术语很近。

至于内存中的数据,那只是由0和1组成的8位字节而已,本身是没有类型的,那怕是字符,也是用这个去表示的。之所以表示是什么码的问题,那只是程序功能方面的理解。也就是说,给你一个数据,你并不知道它是什么类型,比如是BCD还是二进制。这个是我们使用时的一种理解而已。如果你让这个数表示为非压缩8421码的话,再进行加减时要使用调整码,在读取时你把它做为8421码就行了。但是如果是二进制,则不需要。在机器内存中,只有数据,没有其他的东西,那怕是指令也是数据。汇编是为了助记才使用指令的。

这个是认知问题,它的形式是由你程序使用而决定的,跟具体的机器码无关。所以内存中只是由0,1组成的二进制形式而已!

偏移地址一定是16位的,因此决定了一个段的容量为2的16次方字节(64KB),就像你说的偏移地址为8,那么表示就是你写的那个。只有内存存储的问题,我想你是因为学过高级语言才会问这个问题,由于汇编是和机器直接打交道的语言,就没有存储类型这一说了。而我们存储的数据时候,是由我们自己定义相关的数据类型和相关规范,存储的时候它只关心要存的是0还是1.比如说一个64位的数字存储在高级语言JAVA里面我们只需要定义其类型为double其余我们都不用管了,但是在汇编里面我们需要自己安排这64位数字要怎么放置,是放在那个地方,你可以把低8位作为高8位,但是我们一般不这样做,因为这样很麻烦。我们一般都遵从高字节放高地址,低字节放地址