首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

計算機系統原理:特殊算術指令 imull/mull/cltd/idivl/divl 64 位運算詳解

     編輯:組合語言

指令概覽

特殊算術指令表

  • imull/mull:單運算元 64 位乘法 (有號/無號)
  • cltd:%eax 符號擴展到 %edx
  • idivl/divl:64 位除法,商存 %eax、餘數存 %edx

imull / mull 單運算元乘法

  • 隱含運算元:%eax
  • 結果:高 32 位 → %edx,低 32 位 → %eax
  • imull:有號乘法,先符號擴展被乘數再相乘,截斷 64 位
  • mull:無號乘法,純位元相乘

範例:imull $0x3 (%eax=0x82345600)

0x3 × 0x82345600 = 0xFFFF_FFFE_869D_0200 (64 位)
%edx = 0xFFFF_FFFE (高 32 位)
%eax = 0x869D_0200 (低 32 位)
僅看 %eax 有號值 = -2036530688 (溢出)
完整 64 位有號值 = -6331497984

imull 寄存器狀態

cltd 指令

%eax 最高位為 0 → %edx 清 0;最高位為 1 → %edx 置全 1 (32 個 1)。為 idivl 準備被除數高位。

idivl / divl 除法

  • 被除數:%edx:%eax 組成 64 位值
  • 商 → %eax,餘數 → %edx
  • idivl:有號除法,執行前自動符號擴展 (相當 cltd)
  • divl:無號除法

範例:idivl $0x3 (%eax=0x82345600)

0x82345600 ÷ 0x3 = 商 0xD6117200, 餘數 0x0
%eax = 0xD6117200
%edx = 0x0

idivl 寄存器狀態

應用價值

理解 32 位寄存器如何協作支援 64 位運算,強化 C 語言與組合語言對應分析能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved