⑴ 8086如何计算的物理地址
8086中含有存储器。存储器中每一个单元的地址可以用两种方法表示:
1.逻辑地址:其表达形式为“段地址:段内偏移地址”。
2.物理地址:CPU与存储器进行数据交换时在地址总线上提供的20位地址信息称为物理地址。
物理地址=段地址×10H+段内偏移量
注:H为16进制,CS :代码段寄存器,
⑵ 逻辑地址转换物理地址公式
物理地址是明确的、最终用在总线上的编号。那么逻辑地址转物理地址怎么转?我为大家介绍逻辑地址转物理地址的解决 方法 。希望大家喜欢。
逻辑地址转换物理地址公式参考如下
1. 物理地址和逻辑地址
物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)映射到实际的内存条上。物理地址是明确的、最终用在总线上的编号,不必转换,不必分页,也没有特权级检查(no translation, no paging, no privilege checks)。
逻辑地址:CPU所生成的地址。逻辑地址是内部和编程使用的、并不唯一。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。
(具体步骤 共三步)
1.确定虚拟地址(物理地址)的有效位
例如:假设页面大小1KB,共32页。(页面:逻辑地址 页框:物理地址)
由32(KB)=32×1024(B) 即等于32×1024 字节
二进制用多少位能有效表示这么多字节呢——答是:15位 因为32×1024=2^5×2^10=2^15
2.再次确定逻辑地址页面位数 你应该知道:逻辑地址=页号+页面
还是以上假设,那么页面大小为1KB=1024字节 同样的方法计算出表示位数:10位
如果给你逻辑地址:0000 1111 1000 0000
那么由:011+11100000000(相当于 页号+页面(10位))推得出页号011=3
3.根据页号找出对应的页框号
由 物理地址=页框号×页块大小(页块大小是等于页面大小的)+页内位移(即页面逻辑地址)
根据上面 物理地址=页框号×1024B + 1110000000 ( 这里的相加是指位置上而言)
例如:110+110=110110(即高地址+低地址)
提问:在一分页存储管理系统中,逻辑地址长度为16位,页面大小为4096B,现有一逻辑地址为2F6AH,且第0、1、2页依次存放在物理块5、10、11中,问相应的物理地址为多少?
答:4096B=2^12B
16位寻址一共2^16B
分页存储。共分的页:2^16/2^12=2^4=16 共分16页。
第0页的地址范围 0 - FFFH
第1页的地址范围 1000H - 1FFFH
第2页得地址范围 2000H - 2FFFH
.....
第11页 B000H - BFFFH
第15页 F000H - FFFFH
2F6AH=10 1111 0110 1010 在2页的范围对应物理块11
所以物理地址为:
2F6AH - 2000H + B000H = F6AH + B000H= BF6AH
⑶ 已知十六进制表示的段地址和偏移地址 怎么计算物理地址啊
比如:
段地址是:43C6h 偏移地址是:0048h
则,物理地址:(43C60+0048)h
应该是
⑷ 微机原理寻地址方式和求物理地址。
mov es:[si], ax 中目的操作数为 寄存器间接寻址,其物理地址=es*16(即左移4位)+si=20000h+0200h=20200h 。
从已有条件看,ax 为源操作数,但其 未知。
⑸ 2.6 什么是逻辑地址什么是物理地址如何由逻辑地址计算物理地址
【解】:物理地址:完成存储器单元或I/O端口寻址的实际地址成为物理地址,CPU型号不同其物理地址也不同。物理地址是指CPU和存储器进行数据交换时实际所使用的地址,而逻辑地址是程序使用的地址。物理地址由两部分组成:段基址(段起始地址高16位)和偏移地址。前者由段寄存器给出,后者是指存储单元所在的位置离段起始地址的偏移距离。当CPU寻址某个存储单元时,先将段寄存器的内容左移4位,然后加上指令中提供的16位偏移地址而形成20位物理地址。在取指令时,CPU自动选择代码段寄存器CS,左移4位后,加上指令提供的16位偏移地址,计算出要取指令的物理地址。堆栈操作时,CPU自动选择堆栈段寄存器SS,将其内容左移4位后,加上指令提供的16位偏移地址,计算出栈顶单元的物理地址。每当存取操作数时,CPU会自动选择数据段寄存器(或附加段寄存器ES),将段基值左移4位后加上16位偏移地址,得到操作数在内存的物理地址。
⑹ 通过虚拟地址计算物理地址 求过程
你打的太多了,有点乱,只说下地址转换问题:
1.虚拟地址:虚拟地址是以"段寄存器:偏移地址"形式存在的,例如--0542:24521360
2.线性地址:它是由分段部件把虚拟地址转化而来的.
3.物理地址:即真实存在的地址,由处理器的地址引脚寻找到的地址.
虚拟地址---->线性地址:
段寄存器是一个16位的寄存器,其中第0和1位控制着将要访问段的特权级,第2位说明是在gdt还是ldt寻找地址.高13位作为一个索引值,总共8192个索引.假设段寄存器-0000
0000
0000
1011(000b),那么我们可以知道rpl=3(特权级为3);ti=0,从gdt中选择段描述符;index=1,即将要索引的段描述符在gdt中的顺序号为1,由于一个段描述符占8个字节,所以其索引到的地址为"gdt的高32位+1*8".这也就是为什么gdt48位,留最低的16位作为限长的原因(8192*8=64k).
找到了段描述符,然后就是从段描述符中找出该段的位置了.段描述符是个8字节的内存空间,由于结构复杂,无法构图,省略段描述符的结构.我们只要知道在里面规定了该段的基址,限长,还有属性等等.找出基址后,再加上虚拟地址的偏址,就形成了32位的线性地址.由于偏址是32位的,所以该段独享4g的虚拟地址空间.
线性地址----->物理地址
该部分是由分页部件通过3级查找完成的.此时,我们把线性地址分为3段:0-11位(c)字节索引,12-21位(b)页表索引,22-31位(a)页目录索引.我们把页表描述符和页描述符通称为页表项,页表项占4个字节,总共占4kb大小.先以cr3为基址,以(a*4)为索引值,寻址页目录描述符.然后再以页目录地址的高20位地址为基址,以(b*4)为索引值,寻址页描述符.再以页描述符的高20位地址为基址,以c为偏移地址,相加得到物理地址.
从上可以看到页的大小是4kb,即一项任务cpu只调用该任务所占内存空间的4kb大小.有利于减少内存占用.
以上大体就是这样的,其中分页部件的转换相当复杂,不是三言两语就能说明白的.还有pentium之后,分页部件又采用了4mb的页面,线性地址采用2级寻址.才开启pae功能后,又形成了4级寻址.然后再结合后面的内存保护,i/o保护,任务保护及特权级的变换,形成了保护模式的大部分内容.
太复杂了,我也不是十分会.写的有些乱,但愿你能明白些.
⑺ 请指出下列指令源操作的寻址方式,并计算物理地址
mov [bx,],cx 寄存器间接寻址(或基址寻址) 物理地址为ds*16+bx
mov[2000H],BX 直接寻址 ds**16+2000h
mov[BP],BX,寄存器间接寻址(或基址寻址) 物理地址为ss*16+bp
mov[BP+200],BX,基址相对寻址 物理地址为ss*16+bp+200
mov[BX+SI+300],AX;基址加变址相对寻址 ds*16+bx+si+300
粗心大意,指令没有写逗号,学习态度不端正。另外,随便找本书看看就有,何必这点小事就问人?
⑻ 指出寻址方式并计算物理地址
第一种是指定段寄存器的方法
具体的物理地址是通过ES和BX来计算的,计算方法和DS:BX的方法一样,只不过是把DS换成了ES,没有加段指示前缀的话默认为DS
第二种是MASM提供的一种寻址方式
其实映射到指令的话就是"基址+偏移量"的寻址方式,SI是基址,VAL在这里代表偏移量,这条指定对应的指令是:
MOV AX,[SI+50H]
第三种和第二种类似
其实就是"基址+变址+偏移量"的寻址方式
具体的数值自己计算吧