簡介
數據交換指令是load/store指令的一種特例,它把一個暫存器單元的內容與暫存器內容交換;或把數據在兩個指定的目標軟組件之間進行交換,數據交換指令屬於一種數據傳送指令。數據交換指令是一個
原子操作(atomic operation),原子操作可以是一個步驟,也可以是多個操作步驟,但是其順序不可以被打亂,也不可以被切割而只執行其中的一部分。也就是說,在連續的匯流排操作中讀/寫一個存儲單元,在操作期間阻止其他任何指令對該存儲單元的讀/寫。在
單片機彙編
指令中,使用數據交換
指令可以完成
累加器A和內部RAM之間的位元組或者
半位元組交換。位元組交換是指令完成
累加器A與內部RAM單元內容的全位元組交換,形式如下:
彙編指令格式 指令編碼 周期數 定址方式 操作XCH A ,Rn 1100 1rrr 1 暫存器定址 (A)<-->(Rn)XCH A,direct 11000101 1 直接定址 (A)<-->(direct)XCH A,@Ri 1100011i 1 暫存器間接定址 (A)<-->(Ri)
半位元組交換是指累加器A與內部RAM單元內容的低4位交換,高4位內容不變,該操作只影響標誌位P,形式如下:
彙編指令格式 指令編碼 周期數 定址方式 操作XCHD A,@Ri 1101011i 1 暫存器間接定址 (A3~0<-->(Ri)3~0)
彙編指令格式 指令編碼 周期數 定址方式 操作SWAP A 11000100 1 暫存器定址 (A3~0<-->A7~4)
數據傳送指令
數據傳送指令是彙編語言程式設計中使用最頻繁也是最重要的一類指令。這類指令一般是把源運算元傳送到目的運算元,指令執行後,源運算元不變,目的運算元改為源運算元。常見的傳送類型發生在內部RAM之間,這類指令除了可以通過累加器進行傳送外,還可以在數據存儲器之間或工作暫存器與數據存儲器之間直接進行數據傳送,非常簡單方便。數據傳送指令1次可傳送1個數據或1批數據。傳送1批數據時,執行時間較長,在傳送過程中如果有中斷請求,往往允許暫時終止現行指令的執行而轉入中斷處理程式,處理完畢返回原程式後,再從該指令中止處繼續執行下去。
運算元
運算元是運算符作用於的實體,是表達式中的一個組成部分,它規定了指令中進行數字運算的量 。
運算元指出指令執行的操作所需要數據的來源。運算元是彙編語言指令的一個欄位。在運算元這個欄位中可以放運算元本身,也可以放操作地址,還可以放操作地址的計算方法。
通常一條指令均包含操作符和運算元。例如:在比較指令中操作符指定計算機做比較操作,運算元則指定進行比較的兩個數值。運算元是指令執行的參與者,也就是各種操作的對象.與之有關的是操作碼,所謂操作碼是說明計算機要執行哪種,如傳送,運算,移位,跳轉等操作,它是指令中不可缺少的組成部分。
暫存器運算元:指令要操作的數據存放在CPU中的暫存器里,指令中給出暫存器名即可。
立即運算元:指令要操作的數據以常量的形式在指令中出現,稱為立即數,它只能作為源運算元。