【方輝專欄】Armv7 M 架構簡介(四) --寄存器常見操作
2022-10-14
摘要: 本文主要對Armv7-M架構中指令集對寄存器中的值的操作行介紹。關鍵字:Armv7-M架構、按位邏輯運算、移位、加法、減法、乘法、偽代碼描述指令集對寄存器中的值提供如下操作。包括按位邏輯運算、移位操作、加法、減法和乘法、這些操作的描述,在Arm7-M架構手冊中都是用偽代碼形式來描述的。在指令中會用到如下類型的位移和循環操作:邏輯左移(LSL):將寄存器中每一位向左移動指定位數,右端用零補齊。除非最后移除的一位被當做輸出,否則移除的位被丟棄。相應偽代碼如下://需要輸出最后一位//LSL_C()(bits(N), bit) LSL_C(bits(N) x, integer shift)assert shift > 0;extended_x = x : Zeros(shift);result = extended_x<N-1:0>;carry_out = extended_x<N>;return (result, carry_out);//不需要輸出最后一位//LSL()(bits(N) LSL(bits(N) x, integer shift)assert shift >= 0;if shift == 0 thenresult = x;else(result, -) = LSL_C(x, shift);return result;邏輯右移(LSR):將寄存器中每一位向右移動指定位數,左端用零補齊。除非最后一位被當做輸出,否則移除的位被丟棄。相應偽代碼如下://需要最后一位輸出//LSR_C()(bits(N), bit) LSR_C(bits(N) x, integer shift)assert shift > 0;extended_x = ZeroExtend(x, shift+N);result = extended_x<shift+N-1:shift>;carry_out = extended_x<shift-1>;return (result, carry_out);//不需要輸出最后一位//LSR()(bits(N) LSR(bits(N) x, integer shift)assert shift >= 0;if shift == 0 thenresult = x;else(result, -) = LSR_C(x, shift);return result;算術右移(ASR):將將寄存器中每一位向右移動指定位數,左端用零補齊。除非最后一位被當做輸出,否則移除的位被丟棄。相應偽代碼如下://需要最后一位輸出//ASR_C()(bits(N), bit) ASR_C(bits(N) x, integer shift)assert shift > 0;extended_x = SignExtend(x, shift+N);result = extended_x<shift+N-1:shift>;carry_out = extended_x<shift-1>;return (result, carry_out);//不需要最后一位輸出//ASR()(bits(N) ASR(bits(N) x, integer shift)assert shift >= 0;if shift == 0 thenresult = x;else(result, -) = ASR_C(x, shift);return result;循環右移(ROR):將將寄存器中每一位向右移動指定位數,從右端移除的每個位在左端重新引入,最后輸出的一位可以作為輸出。相應偽代碼如下://需要最后一位輸出//ROR_C()(bits(N), bit) ROR_C(bits(N) x, integer shift)assert shift != 0;m = shift MOD N;result = LSR(x,m) OR LSL(x,N-m);carry_out = result<N-1>;return (result, carry_out);//不需要最后一位輸出//ROR()(bits(N) ROR(bits(N) x, integer shift)if shift == 0 thenresult = x;else(result, -) = ROR_C(x, shift);return result;帶擴展位循環右移(RRX):將將寄存器中每一位向右移動一位,進位輸入到左端。移除的右端可以作為輸出。相應偽代碼如下://需要最后一位輸出//RRX_C()(bits(N), bit) RRX_C(bits(N) x, bit carry_in)result = carry_in : x<N-1:1>;carry_out = x<0>;return (result, carry_out);//不需要最后一位輸出//RRX()(bits(N) RRX(bits(N) x, bit carry_in)(result, -) = RRX_C(x, carry_in);return result;來源:《Armv7-M Architecture Reference Manual 》+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++關于億道電子億道電子技術有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內資深的研發工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業客戶提供研發、設計、管理過程中使用的各種軟件開發工具,致力于幫助客戶提高研發管理效率、縮短產品設計周期,提升產品可靠性。20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰略合作伙伴關系,并作為他們在中國區的主要分銷合作伙伴服務了數千家中國本土客戶,為客戶提供從芯片級開發工具、EDA 設計工具、軟件編譯以及測試工具、結構設計工具、仿真工具、電氣設計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經驗積累,真正的幫助客戶實現了讓研發更簡單、更可靠、更高效的目標。歡迎關注“億道電子”公眾號了解更多研發工具軟件知識
查看更多→