arm组合语言程式设计(编辑修改稿)内容摘要:

,#% 1 ;用於測試在暫存器 R1中是否設定了最低位(%表示二進位數字) TST R1,# 0xffe ;將暫存器 R1的值與立即數 0xffe按位元與,並根據結果設定 CPSR的旗標位元 43 ARM指令集 資料處理指令 TEQ指令  TEQ指令的語法為:  TEQ {條件 } 運算元 1,運算元 2  TEQ指令用於把一個暫存器的內容和另一個暫存器的內容或立即數進行按位的互斥運算,並根據運算結果更新 CPSR中條件旗標位元的值。  該指令通常用於比較運算元 1和運算元 2是否相等。  指令範例: •TEQ R1, R2 ;將暫存器 R1的值與暫存器 R2的值按位元互斥,並根據結果設定 CPSR的旗標位元 44 ARM指令集 資料處理指令 ADD指令  ADD指令的語法為:  ADD {條件 }{S} 目的暫存器,運算元 1,運算元 2  ADD指令用於把兩個運算元相加,並將結果存放到目的暫存器中。 運算元 1應是一個暫存器,運算元 2可以是一個暫存器,被移位的暫存器,或一個立即數。  指令範例: ADD R0, R1, R2 ; R0 = R1 + R2 ADD R0, R1, 256 ; R0 = R1 + 256 ADD R0, R2, R3, LSL1 ; R0 = R2 + (R3 1) 45 ARM指令集 資料處理指令 ADC指令  ADC指令的語法為:  ADC {條件 }{S} 目的暫存器,運算元 1,運算元 2  ADC指令用於把兩個運算元相加,再加上 CPSR中的 C條件旗標位元的值,並將結果存放到目的暫存器中。 它使用一個進位元旗標位元,這樣就可以做比 32位大的數的加法,注意不要忘記設定 S尾碼來更改進位元旗標。 運算元 1應是一個暫存器,運算元 2可以是一個暫存器,被移位的暫存器,或一個立即數。  以下指令序列完成兩個 128位數的加法,第一個數由高到低存放在暫存器 R7~ R4,第二個數由高到低存放在暫存器 R11~ R8,運算結果由高到低存放在暫存器 R3~ R0: ADDS R0, R4, R8 ; 加低端的字 ADCS R1, R5, R9 ; 加第二個字,帶進位 ADCS R2, R6, R10 ; 加第三個字,帶進位 ADC R3, R7, R11 ; 加第四個字,帶進位 46 ARM指令集 資料處理指令 SUB指令  SUB指令的語法為:  SUB {條件 }{S} 目的暫存器,運算元 1,運算元 2  SUB指令用於把運算元 1減去運算元 2,並將結果存放到目的暫存器中。 運算元 1應是一個暫存器,運算元 2可以是一個暫存器,被移位的暫存器,或一個立即數。 該指令可用於有符號數或無符號數的減法運算。  指令範例: SUB R0, R1, R2 ; R0 = R1 R2 SUB R0, R1, 256 ; R0 = R1 256 SUB R0, R2, R3, LSL1 ; R0 = R2 (R3 1) 47 ARM指令集 資料處理指令 SBC指令  SBC指令的語法為:  SBC {條件 }{S} 目的暫存器,運算元 1,運算元 2  SBC指令用於把運算元 1減去運算元 2,再減去CPSR中的 C條件旗標位元的反碼,並將結果存放到目的暫存器中。 運算元 1應是一個暫存器,運算元 2可以是一個暫存器,被移位的暫存器,或一個立即數。 該指令使用進位元旗標來表示借位,這樣就可以做大於 32位的減法,注意不要忘記設定 S尾碼來更改進位元旗標。 該指令可用於有符號數或無符號數的減法運算。  指令範例: •SUBS R0, R1, R2 ; R0 = R1 R2。 C,並根據結果設定 CPSR的進位元旗標位元 48 ARM指令集 資料處理指令 RSB指令  RSB指令的語法為:  RSB{條件 }{S} 目的暫存器,運算元 1,運算元 2  RSB指令稱為逆向減法指令,用於把運算元 2減去運算元 1,並將結果存放到目的暫存器中。 運算元 1應是一個暫存器,運算元 2可以是一個暫存器,被移位的暫存器,或一個立即數。  該指令可用於有符號數或無符號數的減法運算。  指令範例: RSB R0, R1, R2 ; R0 = R2 – R1 RSB R0, R1, 256 ; R0 = 256 – R1 RSB R0, R2, R3, LSL1 ; R0 = (R3 1) R2 49 ARM指令集 資料處理指令 RSC指令  RSC指令的語法為:  RSC {條件 }{S} 目的暫存器,運算元 1,運算元 2  RSC指令用於把運算元 2減去運算元 1,再減去CPSR中的 C條件旗標位元的反碼,並將結果存放到目的暫存器中。  運算元 1應是一個暫存器,運算元 2可以是一個暫存器,被移位的暫存器,或一個立即數。 該指令使用進位元旗標來表示借位,這樣就可以做大於 32位的減法,注意不要忘記設定 S尾碼來更改進位元旗標。  該指令可用於有符號數或無符號數的減法運算。  指令範例: RSC R0, R1, R2 ; R0 = R2 – R1。 C 50 ARM指令集 資料處理指令 AND指令  AND指令的語法為:  AND {條件 }{S} 目的暫存器,運算元 1,運算元 2  AND指令用於在兩個運算元上進行邏輯與運算,並把結果放置到目的暫存器中。 運算元 1應是一個暫存器,運算元 2可以是一個暫存器,被移位的暫存器,或一個立即數。 該指令常用於遮罩運算元 1的某些位。  指令範例: •AND R0, R0,# 3 ; 該指令保持 R0的 0、 1位,其餘位清零。 51 ARM指令集 資料處理指令 ORR指令  ORR指令的語法為:  ORR {條件 }{S} 目的暫存器,運算元 1,運算元 2  ORR指令用於在兩個運算元上進行邏輯或運算,並把結果放置到目的暫存器中。 運算元 1應是一個暫存器,運算元 2可以是一個暫存器,被移位的暫存器,或一個立即數。 該指令常用於設定運算元 1的某些位。  指令範例: ORR R0, R0,# 3 ; 該指令設定 R0的 0、 1位,其餘位保持不變。 52 ARM指令集 資料處理指令 EOR指令  EOR指令的語法為:  EOR{條件 }{S} 目的暫存器,運算元 1,運算元 2  EOR指令用於在兩個運算元上進行邏輯互斥運算,並把結果放置到目的暫存器中。 運算元 1應是一個暫存器,運算元 2可以是一個暫存器,被移位的暫存器,或一個立即數。 該指令常用於反轉運算元 1的某些位。  指令範例: •EOR R0, R0,# 3 ; 該指令反轉 R0的 0、 1位,其餘位保持不變。 53 ARM指令集 資料處理指令 BIC指令  BIC指令的語法為:  BIC {條件 }{S} 目的暫存器,運算元 1,運算元 2  BIC指令用於清除運算元 1的某些位,並把結果放置到目的暫存器中。 運算元 1應是一個暫存器,運算元 2可以是一個暫存器,被移位的暫存器,或一個立即數。 運算元 2為 32位的遮罩,如果在遮罩中設定了某一位,則清除這一位。 未設定的遮罩位保持不變。  指令範例: BIC R0, R0,#% 1011 ; 該指令清除 R0 中的位 0、 和 3,其餘的位保持不變。 54 ARM指令集 乘法指令與乘加指令  ARM微處理器支援的乘法指令與乘加指令共有 6條,可分為運算結果為 32位和運算結果為 64位兩類,與前面的資料處理指令不同,指令中的所有運算元、  目的暫存器必須為通用暫存器,不能對運算元使用立即數或被移位的暫存器,同時,目的暫存器和運算元 1必須是不同的暫存器。  乘法指令與乘加指令共有以下 6條:  MUL 32位元乘法指令  MLA 32位元乘加指令  SMULL 64位元有符號數乘法指令  SMLAL 64位元有符號數乘加指令  UMULL 64位元無符號數乘法指令  UMLAL 64位元無符號數乘加指令 55 ARM指令集 乘法指令與乘加指令 MUL指令  MUL指令的語法為:  MUL{條件 }{S} 目的暫存器,運算元 1,運算元 2  MUL指令完成將運算元 1與運算元 2的乘法運算,並把結果放置到目的暫存器中,同時可以根據運算結果設定 CPSR中相應的條件旗標位元。 其中,運算元 1和運算元 2均為 32位元的有符號數或無符號數。  指令範例: MUL R0, R1, R2 ; R0 = R1 R2 MULS R0, R1, R2 ; R0 = R1 R2,同時設定 CPSR中的相關條件旗標位元 56 ARM指令集 乘法指令與乘加指令 MLA指令  MLA指令的語法為:  MLA{條件 }{S} 目的暫存器,運算元 1,運算元 2,運算元 3  MLA指令完成將運算元 1與運算元 2的乘法運算,再將乘積加上運算元 3,並把結果放置到目的暫存器中,同時可以根據運算結果設定 CPSR中相應的條件旗標位元。 其中,運算元 1和運算元 2均為 32位元的有符號數或無符號數。  指令範例: MLA R0, R1, R2, R3 ; R0 = R1 R2 + R3 MLAS R0, R1, R2, R3 ; R0 = R1 R2 + R3,同時設定 CPSR中的相關條件旗標位元 57 ARM指令集 乘法指令與乘加指令 SMULL指令  SMULL指令的語法為:  SMULL{條件 }{S} 目的暫存器 Low,目的暫存器低High,運算元 1,運算元 2  SMULL指令完成將運算元 1與運算元 2的乘法運算,並把結果的低 32位元放置到目的暫存器 Low中,結果的高 32位元放置到目的暫存器 High中,同時可以根據運算結果設定 CPSR中相應的條件旗標位元。 其中,運算元 1和運算元 2均為 32位元的有符號數。  指令範例: SMULL R0, R1, R2, R3 ; R0 = ( R2 R3)的低 32位 ; R1 = ( R2 R3)的高 32位 58 ARM指令集 乘法指令與乘加指令 SMLAL指令  SMLAL指令的語法為:  SMLAL{條件 }{S} 目的暫存器 Low,目的暫存器低 High,運算元 1,運算元 2  SMLAL指令完成將運算元 1與運算元 2的乘法運算,並把結果的低 32位元同目的暫存器 Low中的值相加後又放置到目的暫存器Low中,結果的高 32位元同目的暫存器 High中的值相加後又放置到目的暫存器 High中,同時可以根據運算結果設定 CPSR中相應的條件旗標位元。 其中,運算元 1和運算元 2均為 32位元的有符號數。  對於目的暫存器 Low,在指令執行前存放 64位元加數的低 32位元,指令執行後存放結果的低 32位。  對於目的暫存器 High,在指令執行前存放 64位元加數的高 32位元,指令執行後存放結果的高 32位。  指令範例: SMLAL R0, R1, R2, R3 ; R0 = ( R2 R3)的低 32位 + R0 ; R1 = ( R2 R3)的高 32位 + R1 59 ARM指令集 乘法指令與乘加指令 UMULL指令  UMULL指令的語法為:。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。