x86汇编寻址理解

本文探讨了x86汇编语言中的寻址模式,对比了实模式和保护模式。实模式下,16位段寄存器与16位偏移地址组合成20位物理地址;保护模式引入了GDT表,段寄存器存储地址索引,通过GDT获取段基地址和属性,实现更灵活和安全的寻址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在cpu地址编码中,我以前接触过arm,avr的寻址方式,一般都是直接编码,地址映射就是地址总线的物理地址编码。而最近接触到IA32的汇编语言,感觉比arm复杂得多。所以做个学习笔记标记。

       在arm中,一般寻址都是在总线编码范围内寻址。而在x86中,分为实模式和保护模式,实模式是指在16为段地址编码下的寻址模式。因为intel cpu在最初的时候使用20位的地址总线,而寄存器只有16位,所以为了能够使16位的寄存器寻址到2#20次方,即1m的地址范围。不得不使用了一个叫做段的概念。即加了一个16位的段寄存器来和16位的通用寄存器进行对20位地址总线的寻址。寻址方式为:物理地址=16位 段寄存器左移4位+16位的段内偏移地址(一般使用16位寄存器来保存)。由这个公式可以看出,一共1m的地址,我们可以使用一个16位段寄存器加上一个16位的其他寄存器寻址到1m地址空间中的任意地址,这里还有一个注意的地方,在寻址时,可能存在两个寄存器的地址值不同,而计算出的地址相同的情况。如0012:0004 = 0010:0024 = 00124。intel的cpu由于为了向上兼容,所以以后的cpu都支持实模式。而且在cpu启动的时候,是以实模式方式启动的。

      保护模式,在IA32以后,由于地址总线和数据总线都是扩充到了32位,直接能寻址到4g的地址,所以不用担心寻址问题,但是,为能够保持cpu的向上兼容,依然使用了段的概念但是呢,和实模式下的寻址已经有了很大的不同。

      保护模式下:依然使用 实际地址(物理地址) = 段地址:段偏移地址这个方式进行寻址。但是寻址方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值