1樓:匿名使用者
ldr 和str——用於字和無符號位元組
指令格式:
ldr/str rd,62616964757a686964616fe78988e69d8331333264623161
《位址>
ldr/strb rd,《位址》
ldr rd,《位址》 載入指定位址的字資料到rd中;
str rd,《位址》 儲存rd中的字資料到指定的位址單元中;
ldrb rd,《位址》 指令載入指定位址的位元組資料到rd的的最低位元組中(rd的高24位清零);
strb 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 其中:
- :可選負號。若帶符號「一」,則從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 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 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 rd,rn,operand2
bic指令將rn 的值與運算元operand2 的反碼按位邏輯」與」,結果存放到目的暫存器rd 中。指令示例:bic r0,r0,#0x0f ;將r0最低4位清零,其餘位不變。
cmp―――――比較指令
指令格式:
cmp rn,operand2
cmp指令用rn的值減去運算元operand2 ,並將結果的狀態(rn 與operand2比較是大、小、相等)反映在cpsr中,以便後面的指令根據條件標誌決定程式的走向。cmp指令與subs指令完成的操作一樣,只是cmp指令只減,不存結果。
指令示例:
cmp r0,r1 ;比較r0,r1
beq stop ;r0=r1跳到stop
blt less ;r0 . .. less: . .. stop: .. .sub―――――減法運算指令 指令格式: sub 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 lable 分支指令 pc← lable bl lable 帶鏈結的分支指令 lr← pc-4 ,pc←lable bx 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 ledtesta**,code,readonly ;該偽指令定義了乙個**段,段名為ledtesta**,屬性唯讀 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 ;程式結束符 彙編中的常見指令有哪些 2樓: 關於這個問題,你可以在《intel® 64 and ia-32 architectures software developer』s manual》中找到答案!手冊可以從intel官方站點**! 手冊第一卷第五章第一節,描述了一些通用指令。 請問組合語言是什麼?又有那些分類? 3樓:匿名使用者 組合語言的分類是按cpu分的。 ■什麼是組合語言 組合語言(assembly language)是面向機器的程式語言。 在彙編語合中,用助記符(memoni)代替操作碼,用位址符號(symbol)或標號(label)代替位址媽。這樣用符號代替機器語盲的二進位制碼,就把機器語音變成了組合語言。於是組合語言亦稱為符號語言。 使用組合語言編寫的程式,機器個能直接識別,要由一種程式將組合語言翻譯成機器語言,這種起翻譯作用的程式叫匯程式設計序,匯程式設計序是系統軟體中語言處理系統軟體。組合語言把匯程式設計序翻譯成機器語言的過程稱為f彙編。 組合語言比機器語言易於讀寫、易於除錯和修改,同時也具有機器語言執行速度快,佔記憶體空間少等優點,但在編寫複雜程式時具有明顯的侷限性,組合語言依賴於具體的機型,不能通用,也不能在不同機型之間移植。 ■對於不同型號的計算機,有著不同的結構的組合語言 組合語言由於採用了助記符號來編寫程式,比用機器語言的二進位制**程式設計要方便些,在一定程度上簡化了程式設計過程。組合語言的特點是用符號代替了機器指令**,而且助記符與指令**一一對應,基本保留了機器語言的靈活性。使用組合語言能面向機器並較好地發揮機器的特性,得到質量較高的程式。 組合語言是面向具體機型的,它離不開具體計算機的指令系統,因此,對於不同型號的計算機,有著不同的結構的組合語言,而且,對於同一問題所編制的組合語言程式在不同種類的計算機間是互不相通的。 組合語言中由於使用了助記符號,用組合語言編制的程式輸入計算機,計算機不能象用機器語言編寫的程式一樣直接識別和執行,必須通過預先放入計算機的"匯程式設計序"的加工和翻譯,才能變成能夠被計算機識別和處理的二進位制**程式。用組合語言等非機器語言書寫好的符號程式稱為源程式,執行時匯程式設計序要將源程式翻譯成目標程式。目標程式是機器語言程式,它一經被安置在記憶體的預定位置上,就能被計算機的cpu處理和執行。 指令的執行過程包copy括取指bai令,執行指令。取指令指的du是從cs ip處取得指令zhi放入指令佇列 執行指令指譯dao碼 具體操作。add eax,12 立即數 最快 因為運算元在指令中。直接在加法器中運算add eax,ecx 次之。因為運算元在暫存器。從暫存器取數比從指令中慢add ea... 裡面。intel 64 and ia 32 architectures software developer s manual volume 2a 和。intel 64 and ia 32 architectures software developer s manual volume 2b 是in... db作為組合語言中的偽操作命令,它用來定義運算元佔用的位元組數。在這裡b是byte的縮寫,即位元組,所以,該偽操作所定義的每個運算元佔有1個位元組 8位 如 message db hello 此時,字串 hello 中每個字元會佔用1個位元組,51微控制器中,用於定義位元組的內容。db 指令以表示式...彙編add指令,彙編的ADD指令
求彙編的基本命令,組合語言指令的基本格式是什麼
組合語言中db指令的意義,組合語言中DB指令的意義