算術邏輯運算指令 (匯編)

乘除運算指令

MUL

指令實現兩個無符號操作數的乘法運算。

乘數是OPRD,被乘數位于AL、AX或EAX中(由OPRD的尺寸決定,乘數和被乘數的尺寸一致)。

乘積尺寸翻倍:16位乘積送到AX;32位乘積送DX:AX;64位乘積送EDX:EAX。 操作數OPRD可以通用寄存器,可以存儲單元,但不能是立即數。

IMUL

有符號數乘法指令(sIgned MULtiply)

DIV

指令實現兩個無符號操作數的除法運算。

除數 (OPRD) 大小被除數商存放位置余數存放位置計算公式
8位?(例如 BL)AX?(16位)ALAHAX / OPRD
16位?(例如 BX)DX:AX?(32位)AXDX(DX:AX) / OPRD
32位?(例如 EBX)EDX:EAX?(64位)EAXEDX(EDX:EAX) / OPRD

商在AL、AX或者EAX中;余數在AH、DX或者EDX中(商和余數的尺寸與oprd相同)。 操作數OPRD可以是通用寄存器,可以是存儲單元,但不能是立即數。

IDIV

指令實現兩個有符號操作數的除法運算。

尺寸由除數OPRD決定。

操作數OPRD可以是通用寄存器,可以是存儲單元,但不能是立即數

如果不能整除,余數的符號與被除數一致,而且余數的絕對值小于除數的絕對值。

符號擴展指令

指令把AL中的符號擴展到AH。

若AL的最高有效位為0,則AH=0;

若AL的最高有效位為1,則AH=FFH,也即AH的8位全都為1

指令把EAX中的符號擴展到EDX。

EAX的最高有效位為0,則EDX=0;

若EAX最高有效位為1,則EDX=FFFF FFFFH,也即EDX的32位全都為1。

指令把AX中的符號擴展到EAX的高16位。

AX的最高有效位為0,則EAX的高16位都為0;

若AX的最高有效位為1,則EAX的高16位都為1。

邏輯運算指令

處理器提供一組邏輯運算指令

否指令 ? ? ? ? ?NOT

按位取反

這是一個邏輯運算,而不是算術運算

最重要的“坑”:它不是求負數!

這是最需要理解的一點:NOT?指令不是求負數的指令!

求一個數的負數(二進制補碼),正確的指令是?NEG

讓我們對比一下:

指令操作例子 (EDX = 10)結果 (十進制)解釋
NOT EDX按位取反NOT 10-11這是邏輯操作,不是算術操作。
NEG EDX求負數NEG 10-10這是算術操作,計算?0 - EDX

與指令 ? ? ? ? ?AND

AND EAX, 3?在功能上等價于?EAX % 4(計算 EAX 除以 4 的余數)

對EAX(設 1001)? 和3(0011),每位對應相乘? ,結果(0001)

X % 2??在功能上完全等價于?X & (2? - 1)

X % 4X & 3因為 4 是 22,而 3 = 4 - 1 = (22 - 1)
X % 8X & 7因為 8 是 23,而 7 = 8 - 1 = (23 - 1)
X % 16X & 15因為 16 是 2?,而 15 = 16 - 1 = (2? - 1)

或指令 ? ? ? ? ?OR

指令本身:OR ECX, EDX

  • 功能:這是按位或(Bitwise OR)?操作。

  • 操作:它將?ECX?寄存器的每一位與?EDX?寄存器的對應位進行“或”運算,并將結果存回?ECX?寄存器。

    • ECX = ECX | EDX

  • 規則:兩位中只要有一位是1,結果就是1。

    • 0 OR 0 = 0

    • 0 OR 1 = 1

    • 1 OR 0 = 1

    • 1 OR 1 = 1

異或指令 ? ? ?XOR

測試指令(TEST)

移位指令

移位計數:所有用寄存器指定次數的移位/循環移位指令(SHL,?SHR,?SAR,?ROL,?ROR,?RCL,?RCR),有且只能使用?CL?寄存器來存放移位次數。

一般移位指令

算術左移指令 ? ?SAL(Shift Arithmetic Left)

邏輯左移指令 ? ?SHL(SHift logic Left)

算術右移指令 ? ?SAR(Shift Arithmetic Right)

?對于?y >> 4?(右移)

這是關鍵所在!>>?(右移) 的行為取決于?y?的類型:

  • 如果?y?是【無符號】類型 (例如?unsigned int,?uint32_t)

    • y >> 4?是?邏輯右移

    • 高位補?0

  • 如果?y?是【有符號】類型 (例如?int,?int32_t)

    • y >> 4?是?算術右移

    • 高位補?符號位(原來最高位的值,0或1)。這是為了保持負數的符號,實現“除以2的冪”的數學效果。

邏輯右移指令 ? ?SHR(SHift logic Right)

4者之間的比較

當右移兩位(或更多位)時,情況略有不同。

核心規則依然不變:CF始終保存的是【最后一次】移位操作所移出的那個比特位。

這意味著,如果一條指令移位N位(N>1),CPU實際上是在內部執行了N次單步移位。而CF在每一步都會被覆蓋,最終只保留最后一步(即第N次移位)?移出的那個位。

1.?ADD EBX, 0

  • 操作EBX + 0,結果存回?EBX。這相當于一個?NOP(無操作),但它會根據結果設置標志位

  • 結果EBX?的值不變,仍是?7400EF9Ch?(0111 0100 ...)。

  • 標志位分析

    • CF?(進位標志): 加法沒有產生最高位的進位,所以?CF = 0

    • ZF?(零標志): 結果不是零,所以?ZF = 0

    • SF?(符號標志): 結果的最高位是?0?(正數),所以?SF = 0

    • PF?(奇偶標志): 計算結果的最低字節是?9Ch?(1001 1100)。數其中?1?的個數:有?4?個?1(偶數個),所以?PF = 1

  • 你的注釋是正確的


2.?SHL EBX, 1

  • 操作:將?EBX?的所有位向左移動1位。最高位(MSB)被移入?CF,最低位(LSB)補?0

  • 計算前:?EBX = 0111 0100 0000 0000 1110 1111 1001 1100

  • 計算過程:

    1. 最高位?0?被移出,進入?CF

    2. 所有位左移一位。

    3. 最低位補?0

  • 計算后:?EBX = 1110 1000 0000 0001 1101 1111 0011 1000?(這就是?E801DF38h)

  • 標志位分析

    • CF: 被移出的最高位是?0,所以?CF = 0

    • ZF: 結果?E801DF38h?顯然不是零,所以?ZF = 0

    • SF: 結果的最高位現在是?1(負數),所以?SF = 1

    • PF: 計算結果的最低字節是?38h?(0011 1000)。數其中?1?的個數:有?3?個?1(奇數個),所以?PF = 0

  • 你的注釋是正確的


3.?MOV CL, 3?和?SHL EBX, CL

  • MOV CL, 3:這只是一個數據傳送,不影響任何標志位

  • SHL EBX, CL:現在?CL = 3,所以這條指令將?EBX?邏輯左移3位

  • 計算前:?EBX = 1110 1000 0000 0001 1101 1111 0011 1000?(E801DF38h)

  • 計算過程:
    相當于左移1位,重復3次。我們關注最后一次(第3次)移位移出的位,它決定?CF

    1. 第一次左移:移出最高位?1?-> (臨時CF=1), EBX變成?1101 0000 ...

    2. 第二次左移:移出新的最高位?1?-> (臨時CF=1), EBX變成?1010 0000 ...

    3. 第三次左移:移出新的最高位?1?->?這是最終決定CF的位CF = 1
      所有位左移3位后,最低3位補?000

  • 計算后:?EBX = 0100 0000 0000 1110 1111 1001 1100 0000?(這就是?400EF9C0h)

  • 標志位分析

    • CF: 如上所述,最后一次移位移出的位是?1,所以?CF = 1

    • ZF: 結果?400EF9C0h?不是零,所以?ZF = 0

    • SF: 結果的最高位現在是?0(正數),所以?SF = 0

    • PF: 計算結果的最低字節是?C0h?(1100 0000)。數其中?1?的個數:有?2?個?1(偶數個),所以?PF = 1

循環移位指令

左循環移位指令 ? ?ROL(ROtate Left)

右循環移位指令 ? ?ROR(ROtate Right)

帶進位左循環移位指令 ? ?RCL(Rotate Left through CF)

帶進位右循環移位指令 ? ?RCR(Rotate Right through CF)

雙精度移位指令

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95250.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95250.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Agentless:革命性的無代理軟件工程方案

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術! 01. 什么是Agentless? Agentless是由伊利諾伊大學香檳分校…

CVE Push Service | 高危漏洞實時情報自動化推送工具

工具介紹 🔥 CVE Push Service | 自動化高危漏洞情報推送 ? 面向網絡安全從業者的 高危漏洞實時情報推送工具 自動拉取 NVD 最新漏洞數據,篩選 CVSS ≥ 7.0 的高危漏洞,并通過 Server醬3 第一時間推送到您的設備,幫助您在應急響…

SpringBoot的基礎介紹,用法和配置

為什么會推出一款全新的SpringBoot?雖然Spring已經取得了非常大的成功,他的優點非常的多,將創建方法的權利給了Spring架構使我們程序員寫代碼更加的便利。但是Spring也有很多的缺點:配置麻煩,而且很多都是模板化的配置…

深度學習】--卷積神經網絡

?????? 卷積神經網絡 卷積神經網絡(Convolutional Neural Network,簡稱CNN)是一種深度學習模型,特別適用于處理具有網格結構的數據。主要目的是自動地、層次化地從原始數據中學習有效的特征表示,以完成特定的任…

RK3588部署YOLOv8姿態估計

1. YOLOv8姿態估計與部署 姿態估計(Pose estimation)是一項涉及識別圖像中關鍵點位置的任務。 關鍵點可以表示對象的各個部分,如關節、地標或其他獨特特征,關鍵點的位置通常表示為一組2D[x, y]或3D[x, y, visible]坐標。 YOLOv8-Pose人體姿態估計,會先檢測出圖像中…

信創之-麒麟v10服務器安裝tengine(已完成)

之前的文章太長了,所以單獨寫背景:java8springbootnginxredissqlserverwindows server2000目前java8已經更換,windows也已經更換,sqlserver也已經更換成dm8其實java的靜態文件目錄,可以很好處理前端網站了,…

Redis進階(上)

Redis系統架構中各個處理模塊是干什么的? Redis 系統架構 本課時,我將進一步分析 Redis 的系統架構,重點講解 Redis 系統架構的事件處理機制、數據管理、功能擴展、系統擴展等內容。 事件處理機制 Redis 組件的系統架構如圖所示,主…

【K8s】整體認識K8s之監控與升級/ETCD的備份和恢復/kustomization/CRD

metrics-server 先說一下metrics-server,這是一個聚合器,專門用來顯示集群的資源使用情況,主要是內存和cpu。 安裝 metrics-server kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.0/comp…

【數據分享】多份土地利用矢量shp數據分享-澳門

而今天要說明數據就是多份土地利用矢量shp數據分享-澳門。數據介紹▲ 土地利用數據(2025年)▲土地利用數據(2018年)▲ 30m土地利用數據(2023年)▲ 公路鐵路道路河流水系數據概況其他概況注:本文…

增強現實—Gated-attention architectures for task-oriented language grounding

🌟🌟 歡迎來到我的技術小筑,一個專為技術探索者打造的交流空間。在這里,我們不僅分享代碼的智慧,還探討技術的深度與廣度。無論您是資深開發者還是技術新手,這里都有一片屬于您的天空。讓我們在知識的海洋中…

CC攻擊的技術分析與防御策略

CC攻擊(Challenge Collapsar Attack)是一種針對Web應用的拒絕服務攻擊方式,其主要通過模擬正常用戶行為來消耗服務器資源。為了更好地理解這種攻擊,讓我們詳細分析其技術原理及防御策略。CC攻擊的技術原理CC攻擊主要是通過發送大量…

【圖論】分層圖

一、分層圖的核心思想 分層圖是一種將圖的不同狀態拆分為多個“層”的建模方法,每層對應一種特定狀態。通過這種方式,可以將復雜的狀態轉移問題轉化為多層圖中的最短路徑問題。 核心特點: 層內邊:表示普通操作(如正常行…

當穩定幣開始生息:USDT0 與 Berachain 的二次進化故事

如果說過去幾年,穩定幣是 DeFi 世界里最安穩的一塊基石,那么 2025 年的 Berachain 正在把它們重新塑造成一種新的資產類型。在這條新興的公鏈上,穩定幣不再只是 “資金的搬運工”,而是搖身一變,成為能生息、能博弈、能…

Kafka、RabbitMQ 與 RocketMQ 在高并發場景下的高可用與性能對比分析

Kafka、RabbitMQ 與 RocketMQ 在高并發場景下的高可用與性能對比分析 消息隊列作為分布式系統中常見的異步解耦組件,在高并發場景下對可用性和性能提出了極高的要求。本文基于生產環境需求,深入分析 Kafka、RabbitMQ 與 RocketMQ 三大主流消息中間件在高…

深入理解 HTTP 與 HTTPS:區別以及 HTTPS 加密原理

目錄 一、HTTP 與 HTTPS 的基本概念 二、HTTP 與 HTTPS 的核心區別 三、為什么需要 HTTPS? 四、HTTPS 的加密通信原理(核心) 1. 客戶端發起 HTTPS 請求 2. 服務端返回 SSL/TLS 證書 3. 客戶端驗證證書 4. 客戶端生成對稱密鑰并用公鑰…

零售行業的 AI 革命:從用戶畫像到智能供應鏈,如何讓 “精準營銷” 不再是口號?

AI 浪潮下的零售變革?在科技飛速發展的今天,人工智能(AI)正以前所未有的態勢席卷全球,深刻地改變著各行各業的運營模式和發展軌跡,零售行業自然也難以置身事外。AI 技術憑借其強大的數據處理能力、精準的分析預測能力…

PyTorch 面試題及詳細答案120題(96-105)-- 性能優化與調試

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。 前后端面試題-專欄總目錄 文章目錄 一、本文面試題目錄 96. 如何查看PyTorch模型的…

Linux 孤兒進程 (Orphan Process)

🎁個人主頁:工藤新一 🔍系列專欄:C面向對象(類和對象篇) 🌟心中的天空之城,終會照亮我前方的路 🎉歡迎大家點贊👍評論📝收藏?文章 文章目錄孤…

Linux Tun/Tap 多隊列技術

🔥 Linux Tun/Tap 多隊列技術 引用:Linux tun/tap 驅動多隊列模式(C/C) 📖 引言 Tun/Tap 是 Linux 內核提供的虛擬網絡設備,廣泛應用于 VPN、虛擬化、網絡隧道等領域。傳統單隊列模式在高吞吐量場景下存…

docker 啟動一個clickhouse , docker 創建ck數據庫

1. 拉鏡像:docker pull clickhouse/clickhouse-server2. 創建容器并且啟動命令:docker run -d --name clickhouse-server \-p 8123:8123 -p 9000:9000 \clickhouse/clickhouse-server3. 日志文件的映射,可以自己配置下,目前創建的…