彙編指令

来源:https://www.cnblogs.com/liert/archive/2022/12/09/16821194.html
-Advertisement-
Play Games

add add 目的,源 ; 加法指令,結果放入目操作數,操作數的長度必須相同 adc adc 目的,源 ; 帶進位加法,目的=目的+源+CF and and 目的,源 ; 邏輯按位與 指令,結果放到目的操作數。 ; 影響標誌位OF、SF、ZF、PF和CF。 call call s ; 使call ...


add

add 目的,源 ; 加法指令,結果放入目操作數,操作數的長度必須相同

adc

adc 目的,源 ; 帶進位加法,目的=目的+源+CF

and

and 目的,源 ; 邏輯按位與 指令,結果放到目的操作數。
; 影響標誌位OF、SF、ZF、PF和CF。

call

call s
; 使call s下一條指令的 CS:IP 入棧(段內轉移只有 IP 入棧),跳轉到標號處

cmp

cmp des, sou ; des - sou 不改變 源/目的 的值

註:如果比較的是兩個無符號數,則零標誌位和進位標誌位表示的兩個操作數之間的關係如右表所示:

CMP結果 ZF CF
目的操作數 < 源操作數 0 1
目的操作數 > 源操作數 0 0
目的操作數 = 源操作數 1 0

註:如果比較的是兩個有符號數,則符號標誌位、零標誌位和溢出標誌位表示的兩個操作數之間的關係如右表所示:

CMP結果 標誌位
目的操作數 < 源操作數 SF ≠ OF
目的操作數 > 源操作數 SF=OF
目的操作數 = 源操作數 ZF=1

cmov

指令 同義名 條件 描述
cmovne cmovnz -ZF ZF不為0時,進行傳送

dec

dec 目的 ; 減一(自減)指令。

inc

inc 目的 ; 加一(自增)指令,和add 目的,1效果相同,inc的機器碼更短,,執行快

jmp

無條件跳轉
jmp 標號
jmp short 標號 ; 段內短轉移,位移範圍(-128~127)
jmp near ptr 標號 ; 段內近轉移,位移範圍(-32768~32767)
jmp far ptr 標號 ; 段間轉移
jmp word ptr 記憶體單元地址 ; 段內轉移
jmp dword ptr 記憶體單元地址 ; 段間轉移

jne、jnz

jne s ; 條件轉移指令。當ZF = 0,轉至標號處執行。
jnz s ; 條件轉移指令。當ZF != 0,轉至標號處執行。

lea

lea 目的,源
; 取有效地址指令,獲取的是源的記憶體單元的地址(偏移地址)不是數據
; 源操作數必須是存儲器操作數(ds:[0123H])或者標號

loop

s:
add ax, ax
loop s ; cx寄存器不為0,則跳轉到s;s標號
; 執行時,先(cx)=(cx)-1,再判斷cx是否為0

mov

mov ax, 0 ; 把 0 複製到 ax
mov byte ptr xx:[x], 0 ; 8 位數傳送 ptr – pointer (指針)縮寫。
mov word ptr xx:[x], 0 ; 16 位數傳送

movzx

movzx 16位寄存器, 8位寄存器
; 把8位寄存器的值複製給16位寄存器,前面用0填充
; 只適用於無符號整數

mul

乘法指令
mul 寄存器或記憶體單元
; 兩個相乘的數,位數必須是相同的,如果是8為其中一個預設在AL,結果存放在AX
; 如果是16位其中一個預設在AX,結果高位存放在DX,低位存放在AX

not

not 目的 ; 邏輯非 指令;結果放到目的操作數。
; 不影響標誌位。

offset

mov ax,offset 標號 ; 取標號的偏移地址
; offset是操作符不是彙編指令,由編譯器執行。

or

or 目的,源 ; 邏輯按位或 指令;結果放到目的操作數。
; 影響標誌位OF、SF、ZF、PF和CF。

push

push ax
; 將ax寄存器的數據壓入棧中
; 執行時,先SP - 2,隨後寫入數據,高位對高位,低位對低位.

pop

pop ax
; 從棧中取出數據存入ax
; 執行時,先取出數據寫入ax寄存器,隨後SP + 2

註:如果寄存器是32位的則SP ± 4。(push/pop 8位寄存器 報錯)

ret/retf

ret 相當於 pop ip
retf 相當於 pop ip pop cs

sub

sub 目的,源 ; 減法指令,結果放入目操作數。

sbb

sbb 目的,源 ; 帶借位減法,目的=目的-源-CF

test

test ax, bx
; 將兩個操作數進行 邏輯與 運算,並根據運算結果設置相關的標誌位。
; 但是兩個操作數不會被改變。運算結果在設置過相關標記位後會被丟棄。
; TEST AX,BX 與AND AX,BX命令有相同效果,只是Test指令不改變AX和BX的內容,
; 而AND指令會把結果保存到AX中。
; 影響標誌:C,O,P,Z,S(其中C與O兩個標誌會被設為0)
Intel的技術手冊
TEMP ← SRC1 AND SRC2;      // 邏輯與的結果賦值給TEMP
SF ← MSB(TEMP);            // 最高位賦值給 SF 標誌位
IF TEMP = 0
THEN ZF ← 1;               // TEMP == 0  ZF 標誌位設置1
ELSE ZF ← 0;               // TEMP != 0  ZF 標誌位設置0
FI:
PF ← BitwiseXNOR(TEMP[0:7]);  //  PE = 將TEMP的低8位,從第0位開始,逐位取同或。也就是第0位與第1位的同或結果,去和第2位同或,結果再去和第3位同或....直到和第7位同或。
CF ← 0;                    // CF 和 OF 標誌位設置0
OF ← 0;
(* AF is undefined *)      // AF 不確定

xchg

xchg ax,bx ; 交換兩個寄存器的數據,兩個操作數的類型要相同,記憶體和記憶體之間不能使用

xor

xor 目的,源 ; 邏輯按位異或 指令;結果放到目的操作數。
; 影響標誌位OF、SF、ZF、PF和CF。

標誌寄存器

ZF(零標誌位)

用於記錄相關指令執行後的結果是否為0
為0: ZF = 1 不為0: ZF = 0
影響ZF的指令:add、sub、mul、div、inc、or、and等(大多數是運算指令)

PF(奇偶標誌位)

用於記錄相關指令執行後的結果所有bit位中1的數量是否為偶數
偶數: PF = 1 奇數: PF = 0

SF(符號標誌位)

用於記錄相關指令執行後的結果是否為負
負: SF = 1 非負 :SF = 0

CF(進位標誌位)

一般情況下,在進行無符號運算時,記錄運算結果的最高有效位向更高位的進位值(或借位值)
發生進位(借位):CF = 1 未發生進位(借位): SF = 0

OF(溢出標誌位)

一般情況下,在進行有符號運算時,記錄運算結果是否發生溢出
發生溢出:OF = 1 未發生溢出: OF = 0

未完待續,持續更新中...


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 內置包是python自帶的一些功能模塊,有需求時可以在自己文件中直接導入使用。 1.datetime包 python中的時間包,可以在業務開發中輔助我們處理時間信息; # datetime可以獲取當前時間 from datetime import datetime re = datetime.now ...
  • LinkedHashSet和LinkedHashMap 這兩個類維護一個雙向鏈表,可以記住插入元素的順序。 實例:LinkedHashMap 可以使用訪問順序來迭代處理映射條目,當get或者put訪問元素時,受影響的條目從當前位置刪除,然後放到末尾,隻影響鏈表,不影響散列表的桶。 LinkedHas ...
  • 本文揭秘全球數據科學崗位的薪資分佈情況!以及分析崗位、國家、工作經驗、雇佣形式、公司規模對薪資的影響,並貼心提供了求職建議和跳槽Tips! ...
  • 原文:Window系統的mysql資料庫定時備份 - Stars-One的雜貨小窩 最近老大提到了資料庫備份的功能,由於伺服器是window系統的,所以研究了下備份的方案,特此記錄 主要是實現每天定時備份功能,如果還要搞容災的話,就得對mysql資料庫進行主從配置了 cmd命令 核心的cmd命令如下 ...
  • 一、原理: 主要涉及的系統命令:ping -n 1 -w 1 IP地址 -n 為ping的次數,在linux下為-c;-w為等待超時時間; 利用Python多線程縮短時間,提升運行效率。 二、其它說明 DEV_NULL = open(os.devnull, 'w') 是在Python中實現的黑洞,類 ...
  • JZ38 字元串的排列 描述 輸入一個長度為 n 字元串,列印出該字元串中字元的所有排列,你可以以任意順序返回這個字元串數組。 例如輸入字元串ABC,則輸出由字元A,B,C所能排列出來的所有字元串ABC,ACB,BAC,BCA,CBA和CAB。 題目主要信息 給定一個長度為n的字元串,求其中所有字元 ...
  • 簡單記錄一下springboot引用kettle對接數據 第一步(這一步講述了下載kettle、創建資料庫連接、轉換等,如果這一步會的可以略過,直接看第二步) 先從kettle官網下載kettle,官網地址:https://sourceforge.net/projects/pentaho/ 進入官網 ...
  • 1.什麼是python的包 包就是一個文件夾,裡面放著一個個py文件或子包; 在包中可以被調用的一個個py文件,我們叫做模塊; 如上,test就是一個包、two.py就是test下的一個模塊,child是子包,結構和test包一樣; 包的身份證 可以看到test下還有一個__init__.py命名的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...