『壹』 匯編語言指令大全,要詳細的 !!!!
一、數據位傳送指令:
1、MOV C, bit ;bit 可直接定址位 C←(bit)
2、MOV bit,C ;C 進位位 (bit) ← C
二、位變數修改指令:
1、CLR C ; 將C=0
2、CLR bit
3、CPL C ; 將C求反再存入C
4、CPL bit ; 將bit求反再存入bit
5、SETB C ; 將C=1
6、SETB bit ; (bit) ← 1
三、位變數邏輯指令:
ANL C, bit ANL C, bit ORL C, bit ORL C, bit
『貳』 匯編命令
這是32位匯編
mov ecx 00000037 //ecx=00000034 把ecx寄存器的值設為37 相當於c語言的賦值語句 如 int a = 37
Cmp byte ptr[ecx],00 //ecx=0012A444 cmp相當於不保存結果的sub減法指令 把ecx 地址里的內容與00相比較
Mov dl,[ecx+eax+08] //ecx=0012A43C EAX=00000000 與第一句差不多,把[ecx+eax+08] 里的值傳給dl,dl寄存器是八位的
Mov [ecx+eax+08],dl //ecx=0012A43C EAX=00000000 與上一句相對應,把dl里的值傳送給內存[ecx+eax+08]
下面的都差不多了,自己好好理解一下吧
Cmp byte ptr [edx+ecx],00 //edx=0012A444 ecx=00000000
Mov cl,[ecx+ebp+08] //ecx=00000008 ebp=0012A43C
Mov al,[eax+ecx+08] //eax=0012A408 ecx=00000000
Mov bl,[ecx+eax] //ecx=00000000 eax=0012A444
『叄』 匯編語言中,p命令和t命令有什麼區別
在匯編語言程序調試的DEBUG環境中,有三個執行指令的命令:
.
T命令:單步執行,每次只執行一條代碼語句,遇到子程序後進入子程序逐條執行指令;
.
P命令:類似T命令,若有子程序,直接執行完子程序全部指令而不是逐條執行指令,在遇到循環指令時,會直接執行至CX遞減至0;
.
G命令:多步執行,可以跟地址和斷點,即格式為 G[=address] [breakpoints],運行到[breakpoints]指定位置的指令後暫停,若不加參數則從當前IP運行到程序結束。
『肆』 匯編語言jnc命令有什麼用處
轉移指令。
意思是CF=0,則跳轉,表示的是AX大於或等於0的時候轉移到EXIT處,所以JNC也可以看成是加法沒有進位,減法沒有借位的時候轉移。
在匯編語言中,用助記符代替機器指令的操作碼,用地址符號或標號代替指令或操作數的地址。在不同的設備中,匯編語言對應著不同的機器語言指令集,通過匯編過程轉換成機器指令。特定的匯編語言和特定的機器語言指令集是一一對應的,不同平台之間不可直接移植。
(4)匯編命令嗎擴展閱讀:
由於匯編指令系統龐大,因而需構建指令系統體系,其指令數量龐大,格式復雜,可記憶性差等。指令中最難的是指令所支持的定址方式,其實質就是指令中操作數如何獲取。對於處理器而言,就是如何找到他所需的數據。
但對於計算機底層的匯編語言而言,這種定址方式將涉及大量的計算存儲格式,與 復雜的存儲管理方式緊密相關,因而難以理解。最後,匯編指令還關繫到如何影響標志位,但處理器標志位非常復雜,因而對其機制掌握就比較困難。
『伍』 主要的匯編指令有哪些
LDR 和STR——用於字和無符號位元組
指令格式:
LDR/STR{cond}{T} Rd,<地址>
LDR/STR{cond}B{T} Rd,<地址>
LDR{cond}{T} Rd,<地址> 載入指定地址的字數據到Rd中;
STR{cond}{T} Rd,<地址> 存儲Rd中的字數據到指定的地址單元中;
LDR{cond}B{T} Rd,<地址> 指令載入指定地址的位元組數據到Rd的的最低位元組中(Rd的高24位清零);
STR{cond}B{T} Rd, <地址> 指令存儲Rd中的最低位元組數據到指定的地址單元中。
T為可選後綴,若有T,那麼即使處理器是在特權模式下,存儲系統也將訪問看成處理器是在用戶模式下,T 在用戶模式下無效,不能與前索引偏移一起使用T。
地址部分可用的形式有4種:
零偏移(zero offset) [Rn] ,Rn的值作為傳送數據的地址。如:
LDR R0,[R1];
前索引偏移(pre-indexed offset) [Rn,Flexoffset]{!} 在數據傳送之前,將偏移量Flexoffset加到Rn 中。其結果作為傳送數據的存儲器地址。若使用後綴「!」,則結果寫回到Rn 中,且Rn 不允許是R15,如:
LDRB R0,[R1,#8]
LDR R0,[R1,#8]!
程序相對偏移(program relative) label(label 必須是在當前指令的土4KB 范圍內) 。
程序相對偏移是前索引形式的另一種版本。從PC 計算偏移量,並將PC 作為Rn 生成前索引指令,不能使用後綴「!」,如:
LDR R0,place ;
place地址裝入R0
後索引偏移(post-indexed offset) [Rn],Flexoffset。在數據傳送後,將偏移量Flexoffset 加到Rn 中,結果寫回到Rn,Rn 不允許是R15,如:
LDR R0,[R1],R2,LSL#2 ;
將存儲器地址為R1 的字數據讀入寄存器R0,並將新地址R1+R2×4寫入R1。
偏移量Flexoffset可以是下兩種形式之:
1) 取值范圍是-4095 到+4095 的整數的表達式,經常是數字常量,如:
STR R5,[R7],#--8
2) 一個寄存器再加上移位(移位由立即數指定),如:
{-}Rm{,shift}
其中:
- :可選負號。若帶符號「一」,則從Rn 中減去偏移量。否則,將偏移量加到Rn 中。
Rm :內含偏移量的寄存器。Rm 不允許是R15。
Shift:Rm 的可選移位方法。可以是下列形式的任何一種:
ASR n :算術右移n 位(1<=n<=32)
LSL n :邏輯左移n 位(1<=n<=31)
LSR n :邏輯右移n 位(1<=n<=32)
ROR n :循環右移n 位(1<=n<=31)
RRX :循環右移1 位,帶擴展。
AND―――――邏輯」與」操作指令
指令格式:
AND{cond}{S} Rd,Rn,operand2
AND指令將操作數operand2 與Rn 的值按位邏輯」與」,結果存放到目的寄存器Rd 中。若設置S,則根據運算結果影響N、Z位,在計算第二操作數時,更新C位,不影響V位(指令ORR、EOR、BIC 對標志位的影響同AND 指令)。
指令示例:
ANDS R1,R1,R2 ;R1=R1&R2,並根據運算的結果更新標志位
AND R0,R0,#0x0F ;R0=R0&0x0F,取出R0最低4位數據。
ORR―――――邏輯」或」操作指令
指令格式:ORR{cond}{S} Rd,Rn,operand2 ORR指令將操作數operand2 與Rn 的值按位邏輯」或」,結果存放到目的寄存器Rd 中。指令示例:
ORRS R1,R1,R2 ;R1=R1|R2,並根據運算的結果更新標志位
ORR R0,R0,#0x0F ;R0=R0|0x0F,將R0最低4位置1,其餘位不變。
BIC―――――位清除指令
指令格式:
BIC{cond}{S} Rd,Rn,operand2
BIC指令將Rn 的值與操作數operand2 的反碼按位邏輯」與」,結果存放到目的寄存器Rd 中。指令示例:BIC R0,R0,#0x0F ;將R0最低4位清零,其餘位不變。
CMP―――――比較指令
指令格式:
CMP{cond} Rn,operand2
CMP指令用Rn的值減去操作數operand2 ,並將結果的狀態(Rn 與operand2比較是大、小、相等)反映在CPSR中,以便後面的指令根據條件標志決定程序的走向。CMP指令與SUBS指令完成的操作一樣,只是CMP指令只減,不存結果。
指令示例:
cmp R0,R1 ;比較R0,R1
beq stop ;R0=R1跳到stop
blt less ;R0<R1跳到Less
.
.
.
Less:
.
.
.
Stop:
.
.
.
SUB―――――減法運算指令
指令格式:
SUB{cond}{S} Rd,Rn,operand2 SUB指令用Rn 的值減去操作數operand2 ,並將結果存放到目的寄存器Rd 中。 指令示例:
SUBS R1,R1,R2 ;R1=R1-R2,並並根據運算的結果更新標志位
SUBGT R3,3,#1 ;大於則 R3=R3-1
SUB R0,R2,R3,LSL#2; R0=R2-(R3<<2)
ARM分支指令
助記符
說明
操作
B{cond} lable
分支指令
PC← lable
BL{cond} lable
帶鏈接的分支指令
LR← PC-4 ,PC←lable
BX{cond} Rm
帶狀態切換的分支指令
PC← Rm,切換處理器狀態
指令的條件碼
條件碼 助記符後綴 標志 含義
0000 EQ Z置位(Z=1) 相等
0001 NE Z清零(Z=0) 不相等
0010 CS C置位 無符號數大於等於
0011 CC C清零 無符號數小於
0100 MI N置位 負數
0101 PL N清零 整數或0
0110 VS V置位 溢出
0111 VC V清零 未溢出
1000 HI C置位且Z清零 無符號數大於
1001 LS Z置位且C清零 無符號數小於等於
1010 GE N等於V(N=V=1或N=V=0) 帶符號數大於或等於
1011 LT N不等於V 帶符號數小於
1100 GT Z清零且N等於V 帶符號數大於
1101 LE Z置位或N不等於V 帶符號數小於或等於
1110 AL 忽略 無條件執行
;GPIO寄存器宏定義
GPFCON EQU 0x56000050
GPFDAT EQU 0x56000054
GPFUP EQU 0x56000058
EXPORT LEDTEST
AREA LEDTESTASM,CODE,READONLY ;該偽指令定義了一個代碼段,段名為LEDTESTASM,屬性只讀
LEDTEST
;設置GPF4-GPF7為output
ldr r0,=GPFCON
ldr r1,[r0]
bic r1,r1,#0xff00
orr r1,r1,#0x5500
str r1,[r0]
;禁止GPF4-GPF7埠的上拉電阻
ldr r0,=GPFUP
ldr r1,[r0]
orr r1,r1,#0xf0
str r1,[r0]
looptest
;將數據埠F的數據寄存器的地址附給寄存器r2
ldr r2,=GPFDAT
ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0xb0
str r3,[r2] ;GPF6 output 0
ldr r0,=0x2fffff
bl delay ;調用延遲子程序
ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0x70
str r3,[r2] ;GPF7 output 0
ldr r0,=0x2fffff ;初始計數值
bl delay ;調用延遲子程序
ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0xd0
str r3,[r2] ;GPF5 output 0
ldr r0,=0x2fffff
bl delay ;調用延遲子程序
ldr r3,[r2]
bic r3,r3,#0xf0
orr r3,r3,#0xe0
str r3,[r2] ;GPF4 output 0
ldr r0,=0x2fffff
bl delay ;調用延遲子程序
b looptest
delay
sub r0,r0,#1 ;r0=r0-1
cmp r0,#0x0 ;將r0的值與0相比較
bne delay ;比較的結果不為0(r0不為0),繼續調用delay,否則執行下一條語句
mov pc,lr ;返回
END ;程序結束符
『陸』 匯編指令test的用法
test屬於邏輯運算指令,其功能為功能執行BIT與BIT之間的邏輯運算和測試功能(兩操作數作與運算,僅修改標志位,不回送結果)。
Test對兩個參數(目標,源)執行AND邏輯操作,並根據結果設置標志寄存器,結果本身不會保存。EST AX, BX與AND AX, BX命令有相同效果。TEST語法規格:TEST r/m,r/m/data。其影響標志包括:C,O,P,Z,S(其中C與O兩個標志會被設為0)。
test的運用舉例:利用Test指令測試一個位,例如寄存器:
test eax, 100b;/b後綴意為二進制/
jnz ******;/如果eax右數第三個位為1,jnz將會跳轉/
jnz跳轉的條件非0,即ZF=0,ZF=0意味著零標志沒被置位,即邏輯與結果為1。
與匯編指令test功能相仿的還有cmp指令,CMP屬於算術運算指令,其功能為功能為比較兩個值(寄存器,內存,直接數值),與Test指令的測試功能相仿,其語法格式為CMP r/m,r/m/data,影響的標志位包括C,P,A,Z,O。
CMP比較.(兩操作數作減法,僅修改標志位,不回送結果)。cmp實際上是只設置標志不保存結構的減法,並設置Z-flag(零標志)。零標志很像carry,也是內部標志寄存器的一位。
『柒』 匯編指令和匯編語言指令之間的區別是什麼
匯編指令,assembler directives,亦稱偽指令,用於指示匯編程序如何匯編源程序,不參與匯編代碼生成。
匯編語言指令,assembly language instructions,可供執行的程序代碼。
記住directives和instructions二者區別就明晰了。
『捌』 匯編指令EQU的作用
EQU是等值命令。
匯編指令EQU的作用如下。
1、用符號名代表字元串 。用一個具有一定含義的符號名定義某一個較長的字元串,在隨後的程序中就用該符號名。
2、用符號名關鍵字或指令助憶符 。用一個(組)程序員自己習慣的符號名來代替匯編語言中的關鍵字或指令助憶符。
(8)匯編命令嗎擴展閱讀:
匯編其他指令
SHL邏輯左移
SAL算術左移(=SHL)
SHR邏輯右移( 每位右移, 低位進 CF, 高位補 0)
SAR算術右移(每位右移, 低位進 CF, 高位不變)
ROL循環左移
ROR循環右移
CBW位元組轉換為字(把AL中位元組的符號擴展到AH中去)
CWD字轉換為雙字(把AX中的字的符號擴展到DX中去)
CWDE字轉換為雙字(把AX中的字元號擴展到EAX中去)
CDQ雙字擴展(把EAX中的字的符號擴展到EDX中去)