和汇编语言有关的问题

来源:百度知道 编辑:UC知道 时间:2024/05/12 07:00:56
我最近在看一本IBM PC汇编程序设计的书,有几个问题
1)书中第二章里写到一个关于物理地址的计算式,16d*段地址+偏移地址=物理地址.我不知道应该怎么用比较好,,应该用什么数代入进行计算.
2)关于存储器的一个问题,书上写代位存入代地址,高位存入高地址,以相反的次序进入,我总觉得和堆栈里的后进先和有矛盾,希望解答一下.
3)书上说:存储器以字为单位进行存储,也就是机器以偶地址访问存储器,这样对于奇地址的单元访问一个字要访问两次存储器,我不是很明白,希望可以解答一下.

谢了
对于第一个问题物理地址的求法不知道哪位可以给一个具体的计算例子?

1)答:段地址放在段寄存器中,如DS、ES、SS等等,偏移地址放在普通寄存器中,如BX、DX等等。以DS:BX为例,其物理地址 = DS*16+BX。但你算这个值没什么用,因为所有的寄存器都是16位的,放不下这么大的值。

楼上关于“段是若干栋楼,偏移量是门牌号”的比喻不太准确,因为一个物理地址可以由不同的段址+偏移量组合来访问。建议这样来理解,内存是一条长长的直路,偏移量是眼睛的视力范围,太远就看不见了。而段就是脚下所站的位置,原来看不见的地方往前走一段距离就能看见了。

2)答:没太弄懂你的问题。内存是可以随机存取的(所以叫RAM),进入内存还要什么次序么?

3)答:CPU一次操作只能存取[0,1]或[2,3]或[4,5]这样的内存内容。如果你在[1,2]中放一个字,CPU就只能先存取[0,1],然后把[1]留下,再存取[2,3],最后把留下的[1]与[2]合并后给你。

************************
物理地址的例子(所有数字为16进制):
0001:0000的物理地址为00010
0010:0100的物理地址为00200
0100:F000的物理地址为10000
1000:2345的物理地址为12345
方法很简单,将段地址左移一个16进制位(相当于乘16)再与偏移量相加即可。

1.内存空间分成若干个段,每个段由若干个字节组成,如果想找到一个物理地址,首先要找到该地址所在段的段地址,然后再加上偏移量就可以了。你可以这样理解。内存是一个小区,段是若干栋楼,偏移量是门牌号。
2、对于一个栈,top指针是越来越小的。
3、你说的那种情况不会出现,操作系统分配内存空间的时候会把那个多余的地址空下来。

第二题::
假设地址为0x6532
存入寄存器后::
32
65
上面32是低位,下面65是高位.
与栈是类似的.只是把两个(如32)当作一个数来进栈而已.