汇编语言-段地址

之前在Nand2Teris课程的VM那节里我止不住的吐槽指针,今天看了王爽的汇编语言,发现指针还是个蛮常见的概念。

指针主要服务于段地址。8086CPU是16结构,也就是寄存器的宽度、运算器处理的数据,还有数据传输都是16bit。但为了提高寻址能力,就弄了20根地址线,通过合并2个16bit的地址得到20位的物理地址,合并方法就是 段地址*16 + 偏移地址 = 物理地址。这里*16就等价于左移4位。

但是,段地址的使用还是很灵活的。就像Nand2Teris课程里的LCL一样,把内存分成段,使用更方便。

目前在汇编语言里有3种段:代码段、数据段、栈段。

代码段通过 CS:IP 访问,数据段通过 DS:[address] 访问,栈段通过 SS:SP访问。

上面的IP/SP都是寄存器,存放偏移地址,address也是偏移地址;CS/DS/SS都是段寄存器。在8086CPU里还有一种ES寄存器,暂不了解。

说到段寄存器,有个特点是,不能使用"mov 段寄存器 数据" ,也就是说不能直接把数据传给段寄存器,这是硬件特点。

但是段寄存器、内存单元、偏移地址之间都是可以互相传值的,比如

mov ds ax

mov ax [0]

mov [1] ax

扫描二维码关注公众号,回复: 5962447 查看本文章

猜你喜欢

转载自www.cnblogs.com/fanmu/p/10744287.html
今日推荐