ARM
ARM體系結(jié)構(gòu)的數(shù)據(jù)存儲方式
- 處理器用于存儲數(shù)據(jù)的方式有:大端小端法
- ARM9處理器微處理器支持字節(jié)(8字節(jié))耐版,半字(16字節(jié)),字(32位)
- CPU與內(nèi)存通過數(shù)據(jù)連接
指令長度與數(shù)據(jù)類型
異常
- 只要程序的正常的程序流被暫時中止渠牲,處理器將進入異常模式乳丰。
- 如果發(fā)生兩個或更多異常散址,那么將按照固定的異常優(yōu)先級來處理喉镰。
Paste_Image.png
復(fù)位異常
- 強制CPSR中M[4:0]變?yōu)閎0011(管理模式)
- 置位CPSR的I和F位
- 清零CPSR中的T位
- 強制PC從0x00開始對下一條指令進行取指
- 返回到ARM狀態(tài)并恢復(fù)執(zhí)行
未定義指令異常
MOVS pc,R14_und
軟件中斷異常
MOVS pc,R14_svc
預(yù)取指中止異常
SUBS PC,R14_abt,#4
數(shù)據(jù)中止異常
SUBS PC,R14_abt,#8
IRQ
SUBS PC,R14_irq,#4
FIQ
SUBS PC,R14_fiq,#4
進入異常的過程
- 程序在系統(tǒng)模式下運行用戶程序旅择,允許IRQ終端
- 將CPSR寄存器內(nèi)容進行備份存入SPSR中
- 置位I位(禁止IRQ中斷)
- 清零T位(進入ARM狀態(tài))
- 設(shè)置MOD位,換處理器模式至IRQ模式
- 將下一條指令的地址存取IRQ的LR
- 將跳轉(zhuǎn)地址存入PC
從異常返回
- 將SPSR寄存器的值復(fù)制回CPSR
- 將LR寄存的值減去一個常量后復(fù)制到PC寄存器侣姆,跳轉(zhuǎn)到被中斷用戶程序生真。
ARM微處理器的指令的格式
Paste_Image.png
C語言執(zhí)行過程
- 預(yù)處理->編譯(把C語言程序轉(zhuǎn)換為匯編.s)->匯編(將匯編轉(zhuǎn)換為二進制指令.o)->鏈接(鏈接庫文件與.o文件生成可執(zhí)行文件)
ARM指令的分類與格式
Paste_Image.png
-
<>位必須有沉噩,{}為可選的
Paste_Image.png
ARM指令的尋址方式
Paste_Image.png
尋址方式
- 立即數(shù)尋址:操作數(shù)作為指令的一部分而直接寫在指令中,這種操作數(shù)稱為立即數(shù)柱蟀,這種尋址方式也就稱為立即數(shù)尋址方式川蒙。
- 查看是否符合規(guī)范
- 將其轉(zhuǎn)為二進制格式,高低位去掉偶數(shù)個的0产弹,看最終的數(shù)是否在0~255之間派歌,即可查看是否合法弯囊。
- 查看是否符合規(guī)范
- 寄存器間接尋址
- 指令中的地址碼給出的是一個通用寄存器的編號痰哨,所需的操作數(shù)保存在寄存器指定
- 寄存器偏移尋址
- LSL:邏輯左移
- LSR:邏輯右移
- ASL:數(shù)學(xué)左移
- ASR:數(shù)學(xué)右移
- ROR:循環(huán)右移
- RRX:帶擴展的循環(huán)移
- 桶形移位器
- 邏輯左移和數(shù)學(xué)左移是一樣的
- 數(shù)學(xué)右移:低位扔掉,高位補符號位匾嘱。
- 邏輯右移:低位扔掉斤斧,高位補0。
- 循環(huán)右移:將扔掉的低位補到高位霎烙。
- 基址變址尋址:將基址寄存器的內(nèi)容與指令中給出的偏移量(<4k)相加/減撬讽,形成操作數(shù)的有效地址⌒基址尋址用于訪問基址附近的存儲單元游昼,常用于查表,數(shù)組操作尝蠕,功能部件寄存器訪問烘豌。寄存器間接尋址是偏移量為0的基址加偏移地址。
LDR R2,[R3,#0X0C]讀取R3+0X0C地址上的存儲單元的內(nèi)容看彼,放入R2
STR R!,[R0,#4]!;R0=R0-
LDR
- 多寄存器尋址:多寄存器尋址一次可以傳送幾個寄存器廊佩,允許一條傳送16個的任何子集或者所有寄存器。
LDMIA R1!,{R2-R4,R12}//將R1指向的單元中的數(shù)據(jù)讀到R2~R4中靖榕,R12中(R1自動加4)
STMIA R0!,{R2-R4,R12}//將寄存器R2~R4标锄,R12中的值保存到R0指向的存儲,單元中(R0自動加4)
- 基址寄存器的增長方式
- IA:每次傳送后地址增加4
- IB:每次傳送前地址增加4
- DA:每次傳送后地址減少4
- DB:每次傳送前地址減少4
- W录啤:為可選后綴料皇,若使用,在數(shù)據(jù)傳送完畢后星压,將最后的地址寫入基址寄存器践剂,否則基址寄存器的內(nèi)容不變。(用于基址寄存器之后)
- 堆棧尋址
- 堆棧尋址是一個按特定順序進行存儲的存儲區(qū)租幕,順序為后進先出舷手。堆棧的尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧)劲绪,指針?biāo)赶虻拇鎯卧词嵌褩5臈m敗?
- 向上生長:向高地址方向生長男窟,稱為遞增堆棧
- 向下生長:向低地址方向生長盆赤,稱為遞減堆棧
- 堆棧指向最后壓入的堆棧有效數(shù)據(jù)項稱為滿堆棧;堆棧指針指向下一個待壓入數(shù)據(jù)的空位置歉眷,稱為空堆棧牺六。
- 四種類型的堆棧方式
- 滿遞增(FA):堆棧向上增長,堆棧指針指向內(nèi)含有有效數(shù)據(jù)的最高地址
- 空遞增(EA):堆棧向上增長汗捡,堆棧指針指向堆棧上的第一個空位置址
- 滿遞減(FD):堆棧向下增長淑际,堆棧指針指向內(nèi)含有有效數(shù)據(jù)的最低地址
- 空遞減(ED):堆棧向下增長,堆棧指針指向堆棧上的第一個空位置址
- 堆棧尋址是一個按特定順序進行存儲的存儲區(qū)租幕,順序為后進先出舷手。堆棧的尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧)劲绪,指針?biāo)赶虻拇鎯卧词嵌褩5臈m敗?
- 相對尋址:相對尋址是基址尋址的一種變通扇住,由程序計數(shù)器PC提供標(biāo)準(zhǔn)春缕,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址艘蹋。標(biāo)號是由一個由匯編器計算的偏移量(即相對地址)
BL SUBR1 ;//調(diào)用到SUBR1子程序
BEQ LOOP ;//條件跳轉(zhuǎn)到LOOP標(biāo)號處
- register int i:將i存放在空閑的寄存器中锄贼,不在內(nèi)存中。
安裝7500$
復(fù)制文件:RVDS4.0
進入解壓rvds4.crack.7z與RVDS_4.0_PRO.tgz
進入rvds4.crack找到rvds.dat女阀,用txt打開
Paste_Image.png
- 打開電腦cmd宅荤,ifconfig/all
Paste_Image.png
復(fù)制相應(yīng)的本地物理地址到rvds.dat,ctrl+h替換所有HOSTID浸策。
進入RVDS_4.0_PRO運行setup.exe冯键。
到%99會出現(xiàn)該框框,先不管他
Paste_Image.png
Paste_Image.png
Paste_Image.png
- 之后將rvds4.crack里面的內(nèi)容庸汗,全部復(fù)制到安裝目錄RVDS里惫确。
- 運行crack.bat等其自動結(jié)束。
- 到該目錄下夫晌。復(fù)制該文件
Paste_Image.png
- 復(fù)制目錄
Paste_Image.png
警告
- 無論是安裝目錄亦或是主機的用戶名雕薪,皆不可以有中文名。該軟件有中文就炸晓淀。