<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## 寄存器 X86-64大約有16個64位整數寄存器,其中棧指針`rsp`和基址指針`rbp`較為特殊,`rsi`和`rdi`跟處理字符串相關。后面的八個寄存器是編號的,使用起來沒有特殊限制。 * rax rbx rcx rdx * rsi rdi rbp rsp * r8 - r15 *其中rax的結構如下* `rax`的低八位為`al`,接著八位是`ah`,合并為`ax`,低32位為`eax`,整個64位是`rax`。 *R8的結構如下* 大多數編譯器產品會混合使用32位和64位模式。32位用來做整數計算,64位一般用來保存內存地址(指針)。 ## 尋址模式 `mov`指令有一個決定移動多大數據的單字母前綴 * movb Byte 8bits * movw Word 16bits * movl Long 32bits * movq Quadword 64bits 對于使用AT&T語法的GAS(GNU匯編器): GAS匯編指令通常以字母“b”,“s”,“w”,“l”,“q”或“t”來確定要操作的大小操作數。 * b =字節(8位) * s =短(16位整數)或單個(32位浮點) * w =單詞(16位) * l = long(32位整數或64位浮點數) * q =四(64位) * t =十個字節(80位浮點數) ## leal 和 movl區別 leal(load effective address) ?S,D ?->?&S -> D movl S,D ->?S -> D 簡單的說就是 movl是把訪問的內存內容賦值給寄存器, leal是將地址賦值給寄存器 ## 棧指令 | 指令 | 效果 | 描述 | | --- | --- | --- | | pushq S | %rsp ← %rsp - 8 | 將四字壓入棧 | | (%rsp) ← S | | popq D | D ← (%rsp) | 將四字彈出棧 | | %rsp ← %rsp + 8 | ### 需要注意的點 * pushq指令的行為等價于:`subq $8, %rsp` 與`movq %rbp, (%rsp)`兩條指令的合效果。 * popq指令的行為等價于: `movq (%rsp), %rax` 與`addq $8, %rsp`兩條指令的合效果。 * push/pop指令不存在其他后綴。 ## 算數和邏輯指令 | 指令 | 效果 | 描述 | | --- | --- | --- | | leaq S , D | D ← &S | 加載有效地址 | | inc D | D ← D + 1 | 加一 | | dec D | D ← D - 1 | 減一 | | neg D | D ← -D | 取負 | | not D | D ← ~D | 取補 | | add S , D | D ← D + S | 加 | | sub S , D | D ← D - S | 減 | | imul S , D | D ← D \* S | 乘 | | div S , D | D ← D ÷ S | 除 | | xor S , D | D ← D ^ S | 異或 | | or S , D | D ← D | S | 或 | | and S , D | D ← D & S | 與 | | sal k , D | D ← D << k | 左移 | | shl k , D | D ← D << k | 左移(等同于sal) | | sar k , D | D ← D >>(A) k | 算數右移 | | shr k , D | D ← D >>(L) k | 邏輯右移 | ## 加載有效地址 **加載有效地址**指令leaq實質上是movq指令的變形。它的指令形式是從內存讀取數據到寄存器,但實際上leaq沒有引用內存。他的作用是將內存地址放入操作數中。**該命令的目標必須是一個寄存器**,同時leaq可以簡潔的描述算數運算,所以有時它的使用與有效地址的計算無關。例如: ``` long scale(long x, long y, long z) { long t = x + 4 * y + 12 * z; return t; } ``` ``` ; long scale(long x, long y, long z) ; x in %rdi, y in %rsi, z in %rdx scale: leaq (%rdi, %rsi, 4), %rax ; x + 4 * y leaq (%rdx, %rdx, 2), %rdx ; z + 2 * z leaq (%rax, %rdx, 4), %rax ; (x + 4 * y) + 4 * (3 * z) ``` ## 特殊的算數指令 | 指令 | 效果 | 描述 | | :-- | :-- | :-- | | imulq S | %rdx : %rax ← S × (%rax) | 有符號全乘法 | | mulq S | %rdx : %rax ← S × (%rax) | 無符號全乘法 | | clto | %rdx : %rax ← 符號擴展(%rax) | 擴展為八字 | | idivq S | %rdx ← (%rdx) : (%rax) mod S | 有符號除法 | | | %rdx ← (%rdx) : (%rax) ÷ S | | | divq S | %rdx ← (%rdx) : (%rax) mod S | 無符號除法 | | | %rdx ← (%rdx) : (%rax) ÷ S | | * %——百分號表示這是一個寄存器。 * e表示extend 意思是擴展到了32位。因為以前的intel寄存器都是16位的,它們的名字就是%ax,%bx等等,所以擴展到32位之后就在開頭加上一個e,改名叫%eax,%ebx等
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看