当前位置:  技术问答>linux和unix

Oragne'S

    来源: 互联网  发布时间:2016-09-02

    本文导语:  最近在看于渊的Oragne'S。 mov ax, cs                 ;cs段初始值是零 mov ds, ax                 ;ds段置零 mov es, ax                 ;es段置零 mov ss, ax                 ;ss段置零 mov sp...

最近在看于渊的Oragne'S。
mov ax, cs                 ;cs段初始值是零
mov ds, ax                 ;ds段置零
mov es, ax                 ;es段置零
mov ss, ax                 ;ss段置零
mov sp, 0100h              ;在实模式下,是为了各个段共用一个段基址。赋值给sp是初始化栈指针,
; 初始化 32 位代码段描述符
xor eax, eax               ;eax 寄存器置零
mov ax, cs                 ;把代码段的地址放到ax
shl eax, 4                 ;由于eax 是32位的,相当于把ax的值放到了高16位
                                       ;此时的eax里是段地址
add eax, LABEL_SEG_CODE32  ; 32位代码段的物理地址 ,相当于段基地址+32位偏移地址

问题1:cs的值开始时应该是0000:7c00的基地址0000,xor eax, eax  使得eax = 0,那么shl eax, 4  还有何意义?寄存器值为零还有移位的必要吗?
问题2:xor eax, eax 是eax=0,为什么不用mov eax,0h呢?

|
问题2:刚搜了一下,有两个说法
1. xor eax, eax 指令比 mov eax,0h 短一些。
这个要查一下指令集。不过我觉得这很可能是对的,mov eax,0h 这里面有4个字节的立即数,显然浪费。
2. 关于执行速度,有人说xor比较快,有人说一样。这个我不太确定。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3