常用匯編指令
CMP A,B 比較A與B其中A與B可以是寄存器或內存地址,也可同時是兩個寄存器,但不能同都是內存地址。這個指令太長見了,許多明碼比較的軟件,就用這個指令。
MOV A,B 把B的值送給A其中,A與B可是寄存器或內存地址,也可同時是兩個寄存器,但不能同都是內存地址。
Xor a,a異或操作,主要是用來將a清空
LEA裝入地址,例如LEA DX,string 將字符的地址裝入DX寄存器
PUSH 壓棧
POP 出棧
ADD 加法指令 格式:ADD DST,SRC 執行的操作:(DST)<-(SRC)+(DST)
SUB 減法指令 格式:SUB DST,SRC 執行的操作:(DST)<-(DST)-(SRC)
MUL 無符號乘法指令 格式: MUL SRC 執行的操作:字節操作(AX)<-(AL)*(SRC);字操作(DX,AX)<-(AX)*(SRC);雙字操作:(EDX,EAX)<-(EAX)*(SRC)
DIV 無符號除法指令 格式:DIV SRC 執行的操作:字節操作:16們被除數在AX中,8位除數為源操作數,結果的8位商在AL中,8位余數在AH中。表示為:
(AL)<-(AX)/(SRC)的商,(AH)<-(AX)/(SRC)的余數。字操作:32位被除數在DX,AX中。其中DX為高位字,16位除數為源操作數,結果的16位商在AX中,16位余數在DX中。表示為:(AX)<-(DX,AX)/(SRC)的商,(DX)<-(DX,AX)/(SRC)的余數。
雙字操作:64位的被除數在EDX,EAX中。其中EDX為高位雙字;32位除數為源操作數,結果的32位商在EAX中,32位余數在EDX中。表示為:
(EAX)<-(EDX,EAX)/(SRC)的商,(EDX)<-(EDX,EAX)/(SRC)的余數。
NOP 無作用,可以用來抹去相應的語句,這樣的話,嘿嘿嘿…
CALL調用子程序,你可以把它當作高級語言中的過程來理解。
控制轉移指令:
JE 或JZ 若相等則跳
JNE或JNZ 若不相等則跳
JMP 無條件跳
JB 若小於則跳
JA 若大於則跳
JG 若大於則跳
JGE 若大於等於則跳
JL 若小於則跳
JLE 若小於等於則跳
總的來說,以上幾個,都是比較常見的,需要掌握,但需要掌握的絕不止這幾個,其它的指令希望你能在私下裏再了解一下,可以找相應的教程來看。
剛才忘了,現在再把數制轉換也給貼上:
首先說二進制轉換為十進制的問題:
各位二進制數碼乘以與其對應的權之和即為該二進制相對應的十進制數。例如:
10100=2的4次方+2的2次方,也就是十進制數20。
11000=2的4次方+2的3次方,也就是十進制數24。
接著說一下十進制數轉換為二進制數的方法:
這樣的方法到底有多少,我也不清楚,我只講最簡單的一個-除法:
把要轉換的十進制數的整數部分不斷除以2,並記下余數,直到商為0為止。
例:N=34D(說明一下,你可能在某些數字的後邊看到過加有一個字母,這個字母便是用來表示數制的,十進制數用D,二進制數用B,八進制數用O,十六進制數用H)
34/2=17 (a0=0)
17/2=8 (a1=1)
8/2=4 (a2=0)
4/2=2 (a3=0)
2/2=1 (a4=0)
1/2=0 (a5=1)
所以N=34D=100010B。
對於被轉換的十進制數的小數部分則應不斷乘以2,並記下其整數部分,直到結果的小數部分為0為止。
十六進制數與二進制數、十進制數之間的轉換:
總的來說,十六進制數與二進數之間的轉換,應該算是很簡單的了,你只需把與之相對應的數值進行轉換就成了。
十六進制數的基數是16,共有16個數碼,它們是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中A表示十進制中的10,其余類推。它們與二進制和十進制數的關系如下:
0H=0D=0000B,1H=1D=0001B,2H=2D=0010B,3H=3D=0011B,4H=4D=0100B,5H=5D=0101B,6H=6D=0110B,7H=7D=0111B,8H=8D=1000B,9H=9D=1001B,AH=10D=1010B,BH=11D=1011B,CH=12D=1100B,DH=13D=1101B,EH=14D=1110B,FH=15D=1111B
所以,二進制與十六進制之間要進行轉換的話,只要把它們由低到高每四位組成一級,直接用十六進制來表示就可以了:
例: 1000 1010 0011 0101
8 A 3 5
十六進制轉二進制則用只需將每一位用四位二進制數來表示就成了:
例: A B 1 0
1010 1011 0001 0000
最後是十六進制數與十進制數之間的互相轉換
十六進制數轉十進制數
各位十六進制數與其對應權值的乘積之和即為與此十六進制數相對應的十進制數。
例:N=BF3CH
=11*16的3次方+15*16的2次方+3*16的1次方+12*16的0次方
=11*4096+15*256+3*16+12*1
=48956D
十進制轉十六進制
我還是只講最簡單的除法:
把要轉換的十進制數的整數值部分不斷除以16,並記下余數,直到商為0為止。
例N=48956D
48956/16=3059 (a0=12)
3059/16=191 (a1=3)
191/16=11 (a2=15)
11/16=0 (a3=11)
所以N=48956D=BF3CH。
---------------------
本文來自 lenhan12345 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/lenhan12345/article/details/1588360?utm_source=copy
常用匯編指令