匯編指令的一般性要求: 1、兩個操作數的尺寸必須一致; 2、操作數不能同為內存. ;mov ;該指令不影響 EFlags ? ??? mov val, 123 ??? PrintDec edx????? ;123 --------------------------------------------------------------------------------------------------------------- Lea ;該指令不影響 EFlags ? .data 讓我感到比較困惑的是?? lea 的那條居然會輸出地址? - - --------------------------------------------------------------------------------------------------------------- XCHG(Exchange): 交換指令 ?數據交換指令 XCHG ?格式: XCHG OPRD1,OPRD2 其中的OPRD1為目的操作數,OPRD2為源操作數 ?功能: 將兩個操作數相互交換位置,該指令把源操作數OPRD2與目的操數OPRD1交換. ?說明: 1. OPRD1及OPRD2可為通用寄存器或存儲器,但是兩個存儲器之間是不能用XCHG指令? ----???? 實現的. ?????? 2. 段寄存器內容不能用XCHG指令來交換. ????????? 示例: XCHG AX,BX ????????? 注意: 此處通過中間寄存器,也很容易實現兩個存儲器操作數的交換. ?????? 4. 本指令不影響狀態標志位. XCHG r/m, r/m --------------------------------------------------------------------------------------------------------------- XLATB(Translate Byte)、XLAT(Translate): 換碼指令 查表指令 XLAT/XLATB ;XLATB 可簡化為 XLAT ? .data ? ? mov al, 1 ??? PrintHex al ;42 - 這是 'B' 的 ASSII 編碼 --------------------------------------------------------------------------------------------------------------- MOVSX 指令 格式: MOVSX OPD,OPS 功能: 將8位或16位的OPS符號擴展為16位或32位, 再傳給OPD.所謂的符號擴展, 就是當??? ----? 把一個字節擴展為字或是一字擴展為雙字時,高位字節的各位和原數最高位相同,這??????? 可以保證原來用補碼表示的數值不變.這條指令一般用于帶符號數的擴展. 如果源操作數的最高位是 1, MOVSX 會將目標寄存器中高出的位補 1; 反之補 0 說明: 指令舉例 1. MOVSX EAX ,BX???? ? .data |