❶ 請告訴我一些常用的匯編語言
A B (把A復制為B)
md A (新建文件夾A)
cd .. (回到上一文件夾)
exit (退出)
註:DOS不是匯編
❷ 主要的匯編指令有哪些啊
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 ;程序結束符
❸ 匯編語言指令大全,要詳細的 !!!!
一、數據位傳送指令:
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
❹ 介紹幾種匯編語言吧
匯編語言又稱符號語言,是一種符號化的機器語言,直接面向硬體(cpu、內存、i/o等)編程,它將機器指令的操作碼、操作數由二進制代碼改為人們熟悉的符號。比機器語言(二進制代碼)便於記憶。比起高級語言,結構合理,執行效率高,佔用內存空間小。病毒、木馬程序大都用匯編語言編寫。
由於匯編語言與硬體的密切關系,其同計算機硬體(尤其是cpu構架)有關。目前常用的是IBM-PC計算機系列的80x86匯編語言。
廣泛使用的,對匯編語言的源程序進行匯編的匯編程序為masm(Macro-Assembler,宏匯編)。
❺ 匯編語言常用指令
單片機匯編語言匯編錯誤原因分析
匯編語言的指令格式,目前有兩種不同的標准:Windows下的匯編語言基本上都遵循Intel風格的語法,比如:MASM、NASM;而Unix/Linux下的匯編語言基本上都遵循AT&T風格的語法;
一、匯編語言語句的通用格式
[名稱[:]] 指令碼 [第一操作數][,第二操作數] ;注釋
匯編語言的指令碼的操作數的個數可以是0、1、2個;當操作數的個數為2的時候,語句還有兩種不同的格式:
Windows下Intel風格的匯編語言語句格式為:
[名稱[:]] 指令碼 目的操作數DST,源操作數SRC ;注釋
Unix/Linux下AT&T風格的匯編語言語句格式為:
[名稱[:]] 指令碼 源操作數SRC,目的操作數DST ;注釋
例如: CYCLE: ADD AX,02H ;(AX)匯編語言語句格式中的"名稱"並不是所有語句都必需的,但是,如果語句中帶有"名稱",那麼,大多數情況下,"名稱"都表示的是內存中某一存儲單元的地址,也就是"名稱"後面各項在內存中存放的第一個存儲單元的地址(包括該"名稱"所在段的段地址和段內偏移地址);比如上面的指令中,CYCLE就是該語句的名稱,CYCLE表示的就是其後面的機器指令碼在內存中存放的第一個地址;"名稱"與指令碼之間的分隔符可以是冒號":",也可以是空格字元" ";當以冒號分割時,該名稱代表的是一個標號;當以空格分割時,該名稱代表的可能是標號,也可能是變數;當指令碼有多個操作數的時候,相鄰兩個操作數之間要用逗號","分割;指令碼與操作數之間必須以空格分割;匯編語言語句的注釋必須以分號";"開頭;
二、組成語句的元素
1、常數:
匯編語言中的常數有整數、字元串;二進制、八進制、十進制、十六進制;匯編語言採用不同的後綴區分:
B:二進制數; O:八進制數; D:十進制數; H:十六進制數;
當一個數值後面沒有後綴的時候,默認為十進制數;
字元串常數是用一對單引號('')括起來的一串字元;
2、表達式:
由操作數和操作符組成;
算數運算操作符: +、-、*、/、MOD,等;取模運算MOD是取兩數相除的余數;
邏輯運算操作符: AND(邏輯與)、OR(邏輯或)、NOT(邏輯非)、XOR(邏輯異或);
注意:邏輯運算符同時又可以是邏輯運算指令的指令碼,只有當它們出現在指令的操作數部分時,才是操作符;例如:
ADD AL,0CH ADD 0FH ;第一個ADD是指令碼,第二個ADD是操作符;
關系運算操作符: EQ(相等)、NE(不等)、LT(小於)、GT(大於)、LE(小於等於)、GE(大於等於);
匯編語言中的表達式不能單獨構成語句,只能是語句的組成部分;
注意:語句中表達式的求值不是在語句執行時完成的,而是在對源程序進行匯編鏈接時完成的.所以,語句中各表達式的值必須在匯編或鏈接時就是確定的,也就是說,表達式中各標識符的值在匯編或鏈接時就應該是確定的;
3、標號:
標號是由標識符表示的指令的名稱,用於指示對應指令的位置(地址);
標號具有三個屬性:段地址、偏移地址和類型;
標號的段地址和偏移地址屬性是指該標號所對應的指令所在段的段地址和段內偏移地址;
標號的類型有兩種:NEAR和FAR;標號定義成NEAR類型,表示該標號在段內使用,而定義成FAR類型則表示該標號可以在段間使用;
標號的定義:在指令碼前面加上標識符和冒號":";
例如:START: PUSH DS
這條語句裡面,START就是我們定義的標號,它代表指令PUSH的地址,所以,標號可以作為程序轉移指令的操作數(即:要轉向的地址);標號還可以採用偽指令來定義;例如:用LABEL偽指令和過程定義偽指令來定義;
4、變數:
與高級語言一樣,並不是所有的操作數都是常數,匯編語言也有自己的變數,變數的值在程序運行期間是可以被改變的;
A.定義變數:匯編語言中,變數的定義是通過偽指令來完成的;定義變數的偽指令格式如下:
變數名 DB 表達式 ;定義位元組變數,又稱單位元組變數(1個連續位元組),DB-->BYTE
變數名 DW 表達式 ;定義字變數,又稱雙位元組變數(2個連續位元組),DW-->WORD
變數名 DD 表達式 ;定義雙字變數,又稱四位元組變數(4個連續位元組),DD-->DWORD
變數名 DF 表達式 ;定義六位元組變數,又稱六位元組變數(6個連續位元組),DF-->FWORD
變數名 DQ 表達式 ;定義長字變數,又稱八位元組變數(8個連續位元組),DQ-->QWORD
變數名 DT 表達式 ;定義十位元組變數(10個連續位元組),DT-->TBYTE;
其中,變數名是一個合法的標識符,變數名後面不能加冒號":",只能用空格;變數名不是必要的,可有可無;變數的類型由關鍵字DB、DW、DD、DQ、DT來定義;
變數定義語句中的"表達式"是用於對變數進行初始化的,可有一下幾種情況:
(1).一個或多個常數或表達式;當為多個常數或表達式時,期間要用逗號隔開;如DATA1--DATA4;
(2).帶單引號的字元串;
對於位元組型(DB)變數,每個變數的大小為1個位元組,每個變數的值不能超過1個字元,每個位元組內存入一個字元的ASCII碼值,整個字元串可以在同一對單引號內給出,這相當於是定義了一個字元數組,如DATA5;
對於字類型(DW)變數,每個變數的大小為2個位元組,每個變數的值不能超過2個字元,若為2個字元時,同樣遵循高位存入高位元組,低位存入低位元組的規則;若為1個字元,則該字元的ASCII碼值存入到低位元組,高位元組為00,如DATA6;
對於雙字類型(DD)變數,每個變數的大小為4個位元組,每個變數的值不能超過2個字元,若為2個字元,同樣遵循高位存入高位元組,低位存入低位元組的規則;但是2個字元的值被存入到雙字變數的最低2個位元組中,1個字元的值被存入到雙字變數的最低1個位元組中;
對於長字類型(DQ)變數,每個變數的大小為8個位元組,每個變數的值不能超過2個字元,若為2個字元,同樣遵循高位存入高位元組,低位存入低位元組的規則;但是2個字元的值被存入到長字變數的最低2個位元組中,1個字元的值被存入到長字變數的最低1個位元組中;
(3).一個問號"?",表示該變數的值不確定,即:該變數所表示的內存單元中的內容是不確定的,或者說是,當表達式為問號時,變數所對應的內存區中並沒有存入新的值,而只是預留出了相應的存儲空間;如DATA7、DATA8
(4).重復方式;此時的格式為: 重復次數 DUP(表達式);重復方式指出表達式的值可以重復地存儲到變數對應的內存區中,重復的次數由偽指令給出,相當於定義數組;如DATA9、DATA10
定義變數的例子:
DATA1 DB 20H ;1位元組變數
DATA2 DW 0204H,1000H ;2位元組變數
DATA3 DB (-1*3),(15/3) ;1位元組變數
DATA4 DD 123456H ;4位元組變數
DATA5 DB '0123' ;字元串變數,相當於一個字元數組
DATA6 DW 'AB','C','D' ;字元串變數,相當於一個字元串數組;
DATA7 DB ? ;1位元組變數,未初始化
DATA8 DD ? ;4位元組變數,未初始化
DATA9 DB 5 DUP(0) ;1位元組變數,用5個0初始化,相當於是一個具有5個DB型元素的數組
DATA10 DW 3 DUP(?) ;2位元組變數,未初始化,相當於是一個具有3個DW型元素的數組
變數定義語句中偽指令的功能是在變數名所對應的地址開始的內存區依次存入表達式中的各項值,表達式中的每項值所佔用內存位元組數與變數的類型對應;
總結:一個變數的變數名實際上就代表了該變數所對應的內存區在內存段中的有效地址(偏移地址);高地址是指地址值相對較大,低地址是指地址值相對較小,高地址與低地址是相對而言的;
5、變數的屬性:
(1).屬性介紹
一個變數具有一下屬性:
A.段地址(SEG):變數所在段的段地址;
B.偏移地址(OFFSET):變數所在段內的偏移地址;
C.類型(TYPE):變數的類型定義了每個變數所佔用的內存位元組數,對於DB、DW、DD、DQ、DT類型定義的變數所佔用的內存位元組數分別是1、2、4、8、10;通常又將DB、DW、DD類型所定義的變數分別成為BYTE類型、WORD類型、DWORD類型變數;
常用標識符的類型值列表:
標識符種類 位元組變數 字變數 雙字變數 近標號NEAR 遠標號FAR
TYPE的值 1 2 4 -1 -2
D.長度(LENGTH):變數定義時,一個變數名所定義的變數個數;在含有DUP操作符的變數定義中,變數名所定義的變數個數為定義格式中的重復次數;在其它各種變數定義中,每個變數名所定義的變數個數均為1個;
E.大小(SIZE):變數定義語句中,分配給同一個變數名的所有變數的總的位元組數,其值為該變數的類型與長度的成績;
其中,段地址、偏移地址和類型屬性是變數的主屬性,而長度和大小屬性是變數的輔助屬性;
(2).屬性操作符:
操作符 表達式 含義
SEG SEG 變數名或標號 取出變數名或標號所在段的段地址
OFFSET OFFSET 變數名或標號 取出變數名或標號所在段內的偏移地址
TYPE TYPE 變數名或標號 取出變數名或標號的類型(變數所佔用的位元組數)
LENGTH LENGTH 變數名 取出變數的長度
SIZE SIZE 變數名 取出變數的大小
這些操作符不能單獨構成語句,只能作為表達式的組成部分,並且表達式的求值也是在匯編過程中完成的;
6.強制類型轉換操作符PTR
格式:數據類型 PTR 地址表達式
格式中的"數據類型"可以是BYTE、WORD、DWORD、NEAR、FAR;前三種類型是變數的類型,後兩種類型是標號的類型;格式中的表達式可以是變數、標號、其它地址表達式;
PTR操作符的功能是用來重新定義已定義的變數或標號的類型,其作用域只在當前語句中; 例如:
DATA1 DW 02H
MOV BYTE PTR DATA1,AL
這條指令中,是把DATA1的類型轉換為BYTE類型,然後把AL中的內容存放到DATA1的最低一個位元組中;作用域只在這條MOV語句中,過了這條語句,DATA1仍然是DW類型,即:DATA1原來的類型並沒有被修改;
❻ 誰能教我一些常用的匯編語言
MOV Z,AX
POP AX
ENDM
形成加法宏定義ADDITION.同樣,宏調用
DEFMAC SUBTRACT,SUB
形成減法的宏定義.當然在形成這些宏定義後,就可以使用宏調用
ADDITION VAR1,VAR2,VAR3
而展開成:
+ PUSH AX
+ MOV AX,VAR1
+ ADD AX,VAR2
+ MOV VAR3,AX
+ POP AX
10.這里再介紹一個宏定義的變元中使用的偽操作%,它的格式是:
%expression
匯編程序把跟在%之後的表達式的值轉換成當前基數下的數,在展開期間,用這個數來取代啞元.
宏定義:
MSG MACRO COUNT,STRING
MSG&COUNT DB STRING
ENDM
ERRMSG MACRO TEXT
CNTR=CNTR+1
MSG % CNTR,TEXT
ENDM
宏調用:
...
CNTR=0
ERRMSG 'SYNTAX ERROR'
...
ERRMSG 'INVALID OPERAND'
...
宏展開:
...
+ MSG1 DB 'SYNTAX ERROR'
...
+ MSG2 DB 'INVALID OPERAND'
...
❼ 匯編語言的編程方法
題目:a=1+2
mov a,#01h
add a,#02h
hehe!
能看懂嗎?
❽ 如何學好匯編語言
AX BX DX CX 分別是 四個寄存器
基址寄存器 bx,bp
變址寄存器 si,di
所有的定址方式如下:
立即定址 mov ax,常數
直接定址 mov ax,[地址(常數)]
寄存器定址 mov ax,通用寄存器
寄存器間接定址 mov ax,[(bx,bp,si,di)中的一個]
寄存器相對接定址 mov ax,[(bx,bp,si,di)+偏移量]
基址變址定址 mov ax,[基址寄存器+變址寄存器]
相對基址變址定址 mov ax,[基址寄存器+變址寄存器+偏移量]
要想學好匯編還是要靠自己努力的,得花大量的課余時間在電腦上練習,不然老師講的在清楚,資料再全,也沒用的。而學習的動力在於興趣,興趣的產生在於培養。
❾ 匯編語言怎麼學啊
你用做題目,然後在做題目過程中不懂的就看書,書是大概看一遍就去做題目,不要老想著把書完全弄懂,通過做題目也可以幫助你理解的,我前一年學了匯編,100分制,我考了個70多分,反正我就是用這個方法,不知道對你有沒有用,其實匯編該記的還是要背哦
❿ 常用匯編語言的通俗解釋!!
掌握匯編語言是有點難度的,首先很敬佩你的勇氣,我N年前初中時代也是跟你的情況一樣,學習了很長時間,現在終於可以指點一下好學的同學。
就你出的問題是一個MCS-51系列的單片機數據存儲指令:
MOV是英文MOVE(移動)的簡寫。30H是一個RAM存儲單元的地址,
MOV 30H,#16H 的意思是把一個數值(16H的十進制數等於 22)
放在內存單元30H中。立即數是指純數值量,指令編譯成可運行程序時與MOV指令放在一起,CPU不用到別的地方取數。
飛娥軟體技術交流平台-匯編教程專集:
地址:
8086/8088匯編語言教程(8-16位編程)經典16位匯編語言教程:www.Feiesoft.com/asm
8086/8088匯編語言指令教程:www.Feiesoft.com/cmd/asm
win32匯編語言指令教程:www.feiesoft.com/cmd/win32asm
Masm32匯編語言參考:www.feiesoft.com/masm32
Windows32位匯編語言教程:www.feiesoft.com/win32asm
MCS-51單片機教程: www.Feiesoft.com/mcs51