在匯編語言中,MOV指令是數據傳送指令,也是最基本的編程指令,用于將一個數據從源地址傳送到目標地址(寄存器間的數據傳送本質上也是一樣的)。
32位指令集
1、一般傳送指令
MOV指令:
格式:
MOV目的-->除CS、IP以外的寄存器或存儲器
源-->寄存器、存儲器、立即數
ex :
MOV ECX ,EDX ; EDX->ECX
ECX =00000034H
EDX =00000052H
指令執行結果: ECX = 00000052H, EDX不變,標志寄存器也不變。
MOVSX、MOVZX指令:
格式:
MOV目的-->寄存器或存儲器
源-->寄存器、存儲器
MOVSX:按符號擴展傳送數據指令,將源操作數的內容---傳送-->目標操作數。目的操作數左邊空缺的為用源操作數的符號進行填充??蓪τ蟹柕臄颠M行擴展,以便運算。
MOVZX:按零擴展傳送數據指令,將源操作數的內容---傳送-->目標操作數。目的操作數左邊空缺用0填充??蓪o符號的數進行擴展,以便運算。
ex:
MOV BL, 80H; 80H->BL
MOVSX AX, BL ; 80H用符號擴展為FF0H->AX
MOVZX AX, BL ; 80H用零擴展為0080H->AX
標志寄存器狀態不變。
XCHG指令 :
格式:
XCHG目的、源-->兩個操作數,其中一個操作數可為通用寄存器,另一個操作數可為通用寄存器或存儲器,兩個操作數的長度必須一致。
ex:
XCHG BH,BL ;BH和BL進行字節交換
XCHG SI, DI ;SI和DI進行字節交換
XCHG EBX,ECX ;EBX和ECX進行雙字節交換
XCHG AL,MEM_BYTE ;寄存器和內存進行字節交換
XCHG MEM_WORD, AX ;寄存器和內存進行字節交換
XCHG ESI,MEM_DWORD ;寄存器和內存進行雙字節交換
標志寄存器狀態不變。
下面看下小編遇到的問題:匯編語言MOV指令
MOV AX,BX
MOV AH,BX
MOV DX,AL
第二句都錯誤,,那么第三句呢(8位數據放到16位REG里),,
若正確,放高8位還是低8位呢??? 高8位都補0???
解決:
在匯編語言中,MOV指令是數據傳送指令,也是最基本的編程指令,用于將一個數據從源地址傳送到目標地址(寄存器間的數據傳送本質上也是一樣的)。其特點是不破壞源地址單元的內容。
例如:
1、MOVAX,2000H;將16位數據2000H傳送到AX寄存器。
2、MOVAL,20H;將8位數據20H傳送到AL寄存器。
3、MOVAX,BX;將BX寄存器的16位數據傳送到AX寄存器。
4、MOVAL,[2000H];將2000H單元的內容傳送到AL寄存器。
擴展資料:
匯編語言特點:
1、機器相關性
這是一種面向機器的低級語言,通常是為特定的計算機或系列計算機專門設計的。因為是機器指令的符號化表示,故不同的機器就有不同的匯編語言。使用匯編語言能面向機器并較好地發揮機器的特性,得到質量較高的程序。
2、高速度和高效率
匯編語言保持了機器語言的優點,具有直接和簡捷的特點,可有效地訪問、控制計算機的各種硬件設備,如磁盤、存儲器、CPU、I/O端口等,且占用內存少,執行速度快,是高效的程序設計語言。
總結
以上所述是小編給大家介紹的匯編語言MOV指令,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對html5模板網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!