在ARM汇编中,ADD可以替换为ADDS吗,SUB可以替换为SUBS吗?为什么? 如何使用arm汇编指令实现结构化编程

add\u66ff\u6362\u6210adds,sub\u66ff\u6362\u6210subs\u6709\u4ec0\u4e48\u5f71\u54cd

\u8fd0\u7b97\u7ed3\u679c\u4e0d\u5f71\u54cdCPRS\u4e2d\u76f8\u5e94\u6807\u5fd7\u4f4d\u7684\u503c\uff0c\u8df3\u8f6c\u6307\u4ee4\u56e0\u4e3a\u4e0a\u4e00\u6b65\u7684CPRS\u7684\u503c\u6ca1\u6709\u6539\u53d8\u800c\u65e0\u6cd5\u6b63\u786e\u8fd0\u884c

ARM\u6c47\u7f16\u7a0b\u5e8f\u7279\u70b9:
l \u6240\u6709\u8fd0\u7b97\u5904\u7406\u90fd\u662f\u53d1\u751f\u901a\u7528\u5bc4\u5b58\u5668(\u4e00\u822c\u662fR0~R14)\u7684\u4e4b\u4e2d.\u6240\u6709\u5b58\u50a8\u5668\u7a7a\u95f4(\u5982C\u8bed\u8a00\u53d8\u91cf\u7684\u672c\u8d28\u5c31\u662f\u4e00\u4e2a\u5b58\u50a8\u5668\u7a7a\u95f4\u4e0a\u7684\u51e0\u4e2aBYTE).\u7684\u503c\u7684\u5904\u7406,\u90fd\u662f\u8981\u4f20\u9001\u5230\u901a\u7528\u5bc4\u5b58\u5668\u6765\u5b8c\u6210.\u56e0\u6b64\u4ee3\u7801\u4e2d\u5927\u91cf\u770b\u5230LDR,STR\u6307\u4ee4\u6765\u4f20\u9001\u503c.
l ARM\u6c47\u7f16\u8bed\u53e5\u4e2d.\u5f53\u524d\u8bed\u53e5\u5f88\u591a\u65f6\u5019\u8981\u9690\u542b\u7684\u4f7f\u7528\u4e0a\u4e00\u53e5\u7684\u6267\u884c\u7ed3\u679c.\u800c\u4e14\u4e0a\u4e00\u53e5\u7684\u6267\u884c\u7ed3\u679c,\u662f\u653e\u5728CPSR\u5bc4\u5b58\u5668\u91cc,(\u6bd4\u5982\u8bf4\u8fdb\u4f4d,\u4e3a0,\u4e3a\u8d1f\u2026)
CMP R0,R1
BNE NoMatch
\u6bd4\u5982\u4e0a\u4e00\u53e5,BNE\u9690\u542b\u7684\u4f7f\u7528\u7684\u4e0a\u4e00\u53e5CMP\u6267\u884c\u7ed3\u679c.NE\u540e\u7f00\u8868\u793a\u4f7f\u7528Z\u6807\u5fd7\u4f4d.\u4e24\u53e5\u5408\u8d77\u6765\u7684\u610f\u601d\u5c31\u662f,\u5982\u679cR0,R1\u7684\u503c\u4e0d\u76f8\u7b49,\u5c31\u8df3\u8f6c\u5230NoMatch\u5904\u6267\u884c.
\u6ce8\u610f,PC=R15,CPSR=R16,
ARM\u4f2a\u6307\u4ee4\u4e0d\u662f\u5fc5\u987b\u7684,\u4f46\u662f\u4e00\u4e2a\u5b8c\u6574\u6ca1\u6709\u4f2a\u6307\u4ee4\u51e0\u4e4e\u5f88\u96be\u5199\u51fa\u6765.
n \u6bd4\u5982\u4e00\u4e2a\u7a0b\u5e8f\u81f3\u5c11\u5305\u542bREADONLY AREA\u548cENTRY,\u5426\u5219CPU\u90fd\u65e0\u6cd5\u77e5\u9053\u4ece\u54ea\u91cc\u5f00\u59cb\u8fd0\u884c
l ARM\u7684\u5c5e\u4e8eRISC,\u6307\u4ee4\u5e76\u4e0d\u591a,\u4f46\u662f\u53ef\u4ee5\u5e26\u540e\u7f00\u8868\u793a\u6269\u5c55\u51fa\u4e0d\u540c\u7528\u6cd5,\u8fd9\u91cc\u4e0eX86\u6c47\u7f16\u5b8c\u5168\u4e0d\u540c\u98ce\u683c
n \u5982BNE\u5b9e\u9645\u4e0a\u662fB\u6307\u4ee4\u7684\u53d8\u79cd,\u672c\u8d28\u8fd8\u540c\u4e00\u7c7b\u6307\u4ee4.\u53ea\u662f\u591a\u4e00\u4e2a\u5bf9CPSR\u7684Z\u6807\u5fd7\u4f4d\u7684\u5224\u65ad\u3002
ARM\u5e38\u7528\u6307\u4ee4,\u4f2a\u6307\u4ee4
ARM\u5e38\u7528\u6307\u4ee4\u5e76\u4e0d\u592a\u591a,\u56e0\u6b64\u4f7f\u7528\u9605\u8bfbARM\u6c47\u7f16\u4ee3\u7801,\u5e76\u4e0d\u592a\u56f0\u96be.\u4ee5\u4e0b\u662f\u4f7f\u7528\u9891\u7387\u6700\u9ad8\u7684\u6307\u4ee4\u548c\u4f2a\u6307\u4ee4,\u5e76\u4e0d\u662f\u5b8c\u6574\u7684\u6307\u4ee4\u96c6\u7684\u6559\u6750\u3002\u8be6\u7ec6\u6307\u4ee4\u53c2\u89c1\u53c2\u8003\u8d44\u6599\u3002
l B,BL
l MOV,MVN
l LDR,STR
l ADD,SUB,ADC,SBC,MUL
l AND,ORR,XOR,TST,BIC
l CMP
l LDM/STM
l nop
1. \u8df3\u8f6c\u8bed\u53e5 B,BL
\u7a0b\u5e8f\u6d41\u7a0b\u7684\u8df3\u8f6c\uff0c\u5728 ARM \u7a0b\u5e8f\u4e2d\u6709\u4e24\u79cd\u65b9\u6cd5\u53ef\u4ee5\u5b9e\u73b0\u7a0b\u5e8f\u6d41\u7a0b\u7684\u8df3\u8f6c\u6307\u4ee4\u7528\u4e8e\u5b9e\u73b0
l \u4f7f\u7528\u4e13\u95e8\u7684\u8df3\u8f6c\u6307\u4ee4 B
l \u76f4\u63a5\u5411\u7a0b\u5e8f\u8ba1\u6570\u5668PC \u5199\u5165\u8df3\u8f6c\u5730\u5740\u503c
n \u8fd9\u662f\u51e0\u4e4e\u662f\u4efb\u4f55\u4e00\u79cdCPU\u5fc5\u5907\u7684\u673a\u5668,PC\u8868\u793aCPU\u5f53\u524d\u6267\u884c\u8bed\u53e5\u4f4d\u7f6e,\u6539\u53d8PC\u7684\u503c,\u76f8\u5f53\u4e8e\u5b9e\u73b0\u7a0b\u5e8f\u8df3\u8f6c
n \u5982\u5b9e\u73b0\u7c7b\u4f3cC\u8bed\u8a00\u7684Return \u8bed\u53e5,\u5c31\u662f\u7528MOV PC,LR
n \u8fd9\u91cc\u53ef\u4ee5\u5728\u4efb\u610f4G\u7684\u7a7a\u95f4\u8fdb\u884c\u8df3\u8f6c

B\u6307\u4ee4(Branch)\u8868\u793a\u65e0\u6761\u4ef6\u8df3\u8f6c.
B main ;\u8df3\u8f6c\u5230\u6807\u53f7\u4e3amain\u5730\u4ee3\u7801\u5904

BL\u6307\u4ee4(Branch with Link)\u8868\u793a\u5e26\u8fd4\u56de\u503c\u7684\u8df3\u8f6c.
BL\u6bd4B\u591a\u505a\u4e00\u6b65,\u5728\u8df3\u8f6c\u524d,BL\u4f1a\u628a\u5f53\u524d\u4f4d\u7f6e\u4fdd\u5b58\u5728R14(\u5373LR\u5bc4\u5b58\u5668),\u5f53\u8df3\u8f6c\u4ee3\u7801\u7ed3\u675f\u540e,\u7528MOV PC,LR\u6307\u4ee4\u8df3\u56de\u6765,\u8fd9\u5b9e\u9645\u4e0a\u5c31\u662fC\u8bed\u8a00\u6267\u884c\u51fd\u6570\u7684\u7528\u6cd5,
\u6c47\u7f16\u91cc\u8c03\u5b50\u7a0b\u5e8f\u90fd\u7528BL,\u6267\u884c\u5b8c\u5b50\u51fd\u6570\u540e,\u53ef\u4ee5\u7528MOV PC,LR\u8df3\u56de\u6765.
BL delay ;\u6267\u884c\u5b50\u51fd\u6570\u6216\u4ee3\u7801\u6bb5delay ,delay\u53ef\u4ee5\u4e3aC\u51fd\u6570.

\u4e0eMOV PC,XXX\u80fd\u57284G\u7a7a\u95f4\u8df3\u8f6c\u4e0d\u540c,B\u8bed\u53e5\u53ea\u80fd32M\u7a7a\u95f4\u8df3\u8f6c,(\u56e0\u4e3a\u504f\u79fb\u91cf\u662f\u4e00\u4e2a\u6709\u7b26\u53f726bit\u7684\u6570\u503c=32M)
2. \u4f20\u8f93\u6570\u636e\u6307\u4ee4MOV,MVN
n MOV(MOVE)\u6307\u4ee4\u53ef\u5b8c\u6210\u4ece\u53e6\u4e00\u4e2a\u5bc4\u5b58\u5668\u3001\u88ab\u79fb\u4f4d\u7684\u5bc4\u5b58\u5668\u6216\u5c06\u4e00\u4e2a\u7acb\u5373\u6570\u52a0\u8f7d\u5230\u76ee\u7684\u5bc4\u5b58\u5668
MOV R0,R1 ; \u628aR1\u7684\u503c\u4f20\u5230R0
MOV R3,#3 ;\u628a\u5e38\u65703\u4f20\u7ed9R3,MOV\u4e2d\u7528#\u8868\u793a\u5e38\u6570,\u8fd9\u4e2a\u503c\u4e0d\u80fd\u8d85\u8fc7
n MVN( MOVE Negative)\u53d6\u53cd\u540e\u518d\u4f20\u503c,\u6bd4MOV\u591a\u4e86\u4e00\u6b65\u53d6\u53cd
MVN R0, #0 ;\u628a0\u53d6\u53cd(\u5373-1)\u4f20\u7ed9R0
MVN R1,R2 ;\u628aR2\u7684\u503c\u53d6\u53cd\u4f20\u7ed9R1
3. \u52a0\u8f7d/\u5b58\u50a8\u6307\u4ee4,LDR,STR
n LDR,STR\u662f\u7528\u4e8e\u5bc4\u5b58\u5668\u548c\u5916\u90e8\u5b58\u50a8\u5668\u4ea4\u6362\u6570\u636e\u6307\u4ee4,\u6ce8\u610f\u4e0eMOV\u7684\u533a\u522b,\u540e\u9762\u53ea\u5728\u5bc4\u5b58\u5668\u6216\u5e38\u6570\u4ea4\u6362.
u LDR/STR\u53ef\u4ee5\u91c7\u7528\u591a\u79cd\u5bfb\u5740\u65b9\u5f0f,\u4ee5\u4e0b\u53ea\u4e3e\u51fa\u4f7f\u7528\u9891\u7387\u6700\u9ad8\u51e0\u79cd\u7528\u6cd5
n LDR(load)\u7528\u4e8e\u628a\u4e00\u4e2a32Bit\u7684WORD\u6570\u636e\u4ece\u5916\u90e8\u5b58\u50a8\u7a7a\u95f4\u88c5\u5165\u5230\u5bc4\u5b58\u5668\u4e2d
LDR R0,[R1]; R1\u7684\u503c\u5f53\u6210\u5730\u5740,\u518d\u4ece\u8fd9\u4e2a\u5730\u5740\u88c5\u5165\u6570\u636e\u5230R0 (R0=*R1)
LDR R1,=0x30008000 ; \u628a\u5730\u57400x30008000\u7684\u503c\u88c5\u5165\u5230R1\u4e2d,LDR\u4e2d\u7528\u5e38\u6570\u8981\u7528=\u6253\u5934.(\u6ce8\u610f\u8ddfMOV\u7684\u533a\u522b,MOV\u662f#)
ldr r0, =(0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0)
\u7528\u4f4d\u4e0e\u7684\u65b9\u6cd5\u8d4b\u503c
n STR(Store) \u7528\u4e8e\u628a\u4e00\u4e2a\u5bc4\u5b58\u5668\u7684\u503c\u5b58\u5165\u5916\u90e8\u5b58\u50a8\u7a7a\u95f4,\u662fLDR\u7684\u9006\u64cd\u4f5c.
STR R0,[R1] ; \u628aR0\u7684\u503c,\u5b58\u5165\u5230R1\u5bf9\u5e94\u5730\u5740\u7a7a\u95f4\u4e0a(*R1 = R0)
STR R0,=0x30008000 ;\u628aR0\u4e2d\u503c\u5b58\u5165\u5230\u5730\u57400x30008000
S2C2440\u7684\u4e2dCPU\u5185\u6838\u4ee5\u5916\u7684\u6a21\u5757\u7684\u63a7\u5236\u5bc4\u5b58\u5668\u7a7a\u95f4\u4e5f\u662f\u5c5e\u4e8e\u5916\u90e8\u7a7a\u95f4,\u6240\u4ee5\u4e5f\u5f97\u7528\u5982\u4e0b\u6307\u4ee4LDR R0,=GPFDAT
4. \u7b97\u672f\u8fd0\u7b97\u6307\u4ee4,ADD/ADC,SUB/SBC ,MUL
n ADD\u52a0\u6cd5\u6307\u4ee4
ADD R0,R1,R2; R0=R1+R2
ADD R0,R1,#3 ;R0=R1+3
n ADC\u5e26\u8fdb\u4f4d\u52a0\u6cd5\u6307\u4ee4,\u5373\u9664\u4e86\u52a0\u4e24\u4e2a\u6570\u4ee5\u5916,\u8fd8\u8981\u628aCPSR\u7684C\u503c\u4e5f\u8981\u5e26\u8fdb\u6765
u \u901a\u5e38\u7528\u4e8e\u5927\u6570(\u8d85\u8fc732Bit\u6574\u6570)\u76f8\u52a0,\u8fd9\u65f6\u5355\u7528ADD\u4e0d\u80fd\u5904\u7406,\u5fc5\u987b\u6298\u6210\u4e24\u6b65,\u5176\u4e2d\u4e00\u6b65\u7528ADC.
u \u4ee5\u4e0b\u662f\u505a64Bit\u7684\u52a0\u6cd5
ADDS R0,R1,R2; R0=R1+R2,ADDS\u4e2dS\u8868\u793a\u628a\u8fdb\u4f4d\u7ed3\u679c\u5199\u5165CPSR
ADC R5,R3,R4 ;R5=R3+R4+C
n SUB\u51cf\u6cd5\u6307\u4ee4
SUB R0,R1,R2; R0=R1-R2
SUB R0,R1,#3 ;R0=R1-3
n SBC\u5e26\u8fdb\u4f4d\u51cf\u6cd5\u6307\u4ee4,\u5373\u9664\u4e86\u52a0\u4e24\u4e2a\u6570\u4ee5\u5916,\u8fd8\u8981\u628aCPSR\u7684C\u503c\u4e5f\u8981\u5e26\u8fdb\u6765,\u7c7b\u4f3cADC
u \u4ee5\u4e0b\u662f\u505a64Bit\u7684\u51cf\u6cd5
SUBS R0,R1,R2; R0=R1-R2,SUBS\u4e2dS\u8868\u793a\u628a\u8fdb\u4f4d\u7ed3\u679c\u5199\u5165CPSR
SBC R5,R3,R4 ;R5=R3-R4-C
n MUL \u4e58\u6cd5\u6307\u4ee4
MUL R0,R1,R2; R0=R1*R2
MUL R0,R1,#3 ;R0=R1*3
5. \u4f4d\u64cd\u4f5c\u6307\u4ee4 AND,ORR, TST,BIC
n AND\u4f4d\u4e0e\u6307\u4ee4
AND R0,R1,R2; R0=R1 & R2
AND R0,R1,#0xFF ;R0=R1 & 0xFF
n ORR\u4f4d\u6216\u6307\u4ee4
ORR R0,R1,R2; R0=R1 | R2
ORR R0,R1,#0xFF ;R0=R1 | 0xFF
n TST\u6d4b\u8bd5\u67d0\u4e00\u4f4d\u662f\u5426\u4e3a1,\u5e76\u628a\u7ed3\u679c\u5199\u5165CPSR,\u4f9b\u4e0b\u4e00\u53e5\u4f7f\u7528
TST R1,#0xffe; \u7b49\u540c\u4e8eif(R1 & 0xffe)
TST R1,#%1;\u6d4b\u8bd5\u6700\u4f4e\u4f4d\u662f\u5426\u4e3a1,%\u8868\u793a\u4e8c\u8fdb\u5236
n BIC\u6e05\u4f4d\u64cd\u4f5c
BIC R0\uff0cR0\uff0c\uff030xF \uff1b \u7b49\u540c\u4e8e R0 &=~(0xF)
BIC R0\uff0cR0\uff0c\uff03\uff051011 \uff1b \u8be5\u6307\u4ee4\u6e05\u9664 R0 \u4e2d\u7684\u4f4d 0 1 3\uff0c\u5176\u4f59\u7684\u4f4d\u4fdd\u6301; %\u8868\u793a\u662f\u4e8c\u8fdb\u5236,0x\u8868\u793a\u5341\u516d\u8fdb\u5236
6. \u6bd4\u8f83\u6307\u4ee4 CMP
n CMP\u6bd4\u8f83\u4e24\u4e2a\u64cd\u4f5c\u6570,\u5e76\u628a\u7ed3\u679c\u5b58\u5165CPSR\u4f9b\u4e0b\u4e00\u53e5\u8bed\u53e5\u4f7f\u7528
CMP R0,R1; \u6bd4\u8f83R0,R1
7. \u591a\u5bc4\u5b58\u5668\u8bed\u53e5\u4f20\u8f93\u6307\u4ee4,LDM,STM
\u7c7b\u4f3c\u4e8e\u4e00\u6b21\u4f20\u4e00\u4e2aBUFFER\u5230\u5bc4\u5b58\u5668\u5f53\u4e2d\uff0c\u6216\u53cd\u8fc7\u6765.\u540e\u9762\u4e00\u822c\u8981\u63a5\u4e00\u4e2a\u5730\u5740\u6539\u53d8\u65b9\u6cd5
n LDM \u4eceBUFFER\u4f20\u6570\u636e\u591a\u4e2a\u5bc4\u5b58\u5668\u4f20\u8f93\u6570\u636e\u5230
LDMIA R0! ,{R3-R9} ;\u52a0R0\u6307\u5411\u7684\u5730\u5740\u4e0a\u8fde\u7eed\u7a7a\u95f4\u7684\u6570\u636e\uff0c\u4fdd\u5b58\u5230R3-R9\u5f53\u4e2d\uff0c!\u8868\u793aR0\u503c\u66f4\u65b0,IA\u540e\u7f00\u8868\u793a\u6309WORD\u9012\u589e
LDMFD SP!,{R0-R7,PC}^;\u6062\u590d\u73b0\u573a\uff0c\u5f02\u5e38\u5904\u7406\u8fd4\u56de,^\u8868\u793a\u4e0d\u5141\u8bb8\u5728\u7528\u6237\u6a21\u5f0f\u4e0b\u4f7f\u7528\u3002
n STM \u4ece\u5bc4\u5b58\u5668\u5217\u8868\u5411\u5b58\u50a8\u7a7a\u95f4\u4f20\u503c\u3002
STMIA R1!,{R3-R9} ;\u5c06R3-R9\u7684\u6570\u636e\u5b58\u50a8\u5230R1\u6307\u5411\u7684\u5730\u5740\u4e0a\uff0cR1\u503c\u66f4\u65b0\u3002
STMFD SP!,{R0-R7,LR}; \u73b0\u573a\u4fdd\u5b58\uff0c\u5c06R0~R7\uff0cLR\u5165\u6808
stmfd sp!,{r8-r9} \uff0c\u628aSP\u5bc4\u5b58\u5668\u5bf9\u5e86\u7684\u5730\u5740\u7684\u503c\u5b58\u5230R8,R9\u5f53\u4e2d.!\u8868\u793a\u6700\u540e\u7684\u503c\u5199\u5165SP\u4e2d\u3002Fd\u8868\u793a
8. ARM\u6307\u4ee4\u7684\u53d8\u5f62
\u5927\u90e8\u5206\u6307\u4ee4\u540e\u4f4d\u53ef\u4ee5\u63a5 \u4e0eS\u4e24\u4e2a\u7279\u6b8a\u4f4d\u6765\u8868\u793a,\u5bf9CPSR\u7279\u6b8a\u7684\u4e00\u4e9b\u5224\u65ad
S,\u8868\u793a\u5f53\u524d\u6307\u4ee4\u6267\u884c\u540e\u628a\u7ed3\u679c\u6539\u5199CPSR
subs,Adds
\u53d6\u51b3\u4e8e\u5177\u4f53\u6761\u4ef6,\u53ea\u6709CPSR\u6ee1\u8db3\u6307\u5b9a\u6761\u4ef6\u65f6\u624d\u6307\u8fd9\u4e00\u6307\u4ee4
BEQ \u5b9e\u9645\u4e0aB+ EQ\u7684\u6761\u4ef6\u6267\u884c.
addne \u8868\u793aADD +NE \u624d\u5f00\u59cb\u52a0.
9. ARM\u6307\u4ee4\u7684\u5bfb\u5740\u65b9\u5f0f
\u5bfb\u5740\u65b9\u5f0f\u662f\u6839\u636e\u6307\u4ee4\u4e2d\u7ed9\u51fa\u7684\u5730\u5740\u7801\u6765\u5b9a\u4f4d\u771f\u5b9e\u7684\u5730\u5740,ARM\u4e2d\u67099\u79cd\u5bfb\u5740\u65b9\u6cd5
l \u5bc4\u5b58\u5668\u5bfb\u5740
\u76f4\u63a5\u7528\u5bc4\u5b58\u5668\u7f16\u53f7\u6765\u5bfb\u5740,\u6700\u4e3a\u5e38\u7528
MOV R1,R2 ;R2->R1
l \u7acb\u5373\u6570\u5bfb\u5740
\u5373\u6307\u4ee4\u4e2d\u7684\u5730\u5740\u7801\u662f\u64cd\u4f5c\u6570\u672c\u8eab,\u53ef\u4ee5\u7acb\u5373\u53d6\u51fa\u4f7f\u7528,\u7acb\u5373\u6570\u524d\u5e26\u4e00\u4e2a#\u8868\u793a,\u5426\u5219\u8868\u793a\u4e00\u4e2a\u5730\u5740
SUBS R0,R0,#1 ;R0 -1 ->R0
\u6ce8\u610f\u4e0eSUBS R0,R0,1\u533a\u522b
l \u5bc4\u5b58\u5668\u504f\u79fb\u5bfb\u5740
\u8fd9\u662fARM\u7279\u6709\u7684\u5bfb\u5740\u6a21\u5f0f,\u5f53\u7b2c2\u64cd\u4f5c\u6570\u662f\u5bc4\u5b58\u5668,\u5728\u6267\u884c\u64cd\u4f5c\u4e4b\u524d,\u53ef\u4ee5\u505a\u4e00\u6b21\u79fb\u4f4d\u64cd\u4f5c
MOV R0,R2,LSL #3 ;R2\u7684\u903b\u8f91\u5de6\u79fb3\u4f4d,\u7ed3\u679c\u653e\u5165R0,\u5373R0=R2*8
ANDS R1,R1,R2,LSL R3;RS\u7684\u503c\u5de6\u79fbR3\u4f4d,\u7136\u540e\u548cR1\u76f8\u4e0e\u64cd\u4f5c,\u7ed3\u679c\u653e\u5165R1
\u79fb\u4f4d\u64cd\u4f5c\u6709LSL (\u903b\u8f91\u5de6\u79fb),LSR(\u903b\u8f91\u53f3\u79fb) ,ASR(\u7b97\u672f\u53f3\u79fb),ROR(\u5faa\u73af\u53f3\u79fb)RRX\u5e26\u6269\u5c55\u7684\u5faa\u73af\u53f3\u79fb

l \u5bc4\u5b58\u5668\u95f4\u63a5\u5bfb\u5740
\u5373\u5bc4\u5b58\u5668\u4e2d\u503c\u662f\u4e00\u4e2a\u5730\u5740,\u7528[]\u6765\u53d6\u51fa\u5b9a\u4f4d\u5230\u5730\u5740\u5f53\u4e2d
LDR R2,[R0] ;\u628aR0\u7684\u503c\u5f53\u6210\u5730\u5740,\u53d6\u51fa\u76f8\u5e94\u503c,\u8d4b\u7ed9R2
l \u57fa\u5740\u5bfb\u5740
\u628a\u5bc4\u5b58\u5668\u7684\u5730\u5740\u503c\u52a0\u4e0a\u4e00\u4e2a\u504f\u79fb\u91cf
LDR R2,[R3,#0x0F]; R3\u4e2d\u7684\u503c\u52a0\u4e0a0x0F,\u4ece\u8fd9\u4e2a\u5730\u5740\u53d6\u51fa\u503c\u8d4b\u7ed9R@
l \u76f8\u5bf9\u5bfb\u5740
\u57fa\u5740\u5bfb\u5740\u7684\u53d8\u5f62,\u7531PC\u5bc4\u5b58\u5668\u63d0\u4f9b\u57fa\u51c6\u5730\u5740,\u6307\u4ee4\u4e2d\u5730\u5740\u6bb5\u4f5c\u4e3a\u504f\u79fb\u91cf.\u4e24\u8005\u76f8\u52a0\u5373\u662f\u6709\u6548\u5730\u5740,\u4ee5\u4e0b\u662fBL\u91c7\u7528\u76f8\u5bf9\u5bfb\u5740
BL NEXT
\u2026
NEXT
\u2026
MOV PC,LR ;\u4ece\u5b50\u7a0b\u5e8f\u8fd4\u56de
10. ADS ARM\u7684\u4f2a\u6307\u4ee4
\u7c7b\u4f3c\u4e8eC\u8bed\u8a00\u7684\u5b8f,\u7531\u6c47\u7f16\u7a0b\u5e8f\u9884\u5904\u7406.
l \u7b26\u53f7\u5b9a\u4e49\u6307\u4ee4
\u5168\u5c40\u53d8\u91cf\u5b9a\u4e49 GBLA ,GBLL,GBLS
\u5c40\u57df\u53d8\u91cf\u5b9a\u4e49 LCLA,LCLL,LCLS
\u53d8\u91cf\u8d4b\u503cSETA,SETL,SETS
\u5176\u4e2d\u4e0a\u8ff0\u4f2a\u6307\u4ee4\u4e2d,\u6700\u540e\u9762\u7684A\u8868\u793a\u7ed9\u4e00\u4e2a\u7b97\u672f\u53d8\u91cf\u8d4b\u503c,L\u8868\u793a\u7528\u4e8e\u7ed9\u4e00\u4e2a\u903b\u8f91\u53d8\u91cf\u8d4b\u503c,s\u8868\u793a\u7ed9\u4e00\u4e2a\u5b57\u7b26\u4e32\u8d4b\u503c
GBLL codedbg; \u58f0\u660e\u4e00\u4e2a\u5168\u5c40\u7684\u903b\u8f91\u53d8\u91cf
Codebg SETL {TRUE} ; \u8bbe\u7f6e\u53d8\u91cf\u4e3a{TRUE}
LCLA bitno; \u58f0\u660e\u4e00\u4e2a\u7b97\u672f\u53d8\u91cf
Bitno SETA 8 ;\u8bbe\u53d8\u91cf\u503c\u4e3a8
l \u6570\u636e\u5b9a\u4e49\u4f2a\u6307\u4ee4
n SPACE \u5b9a\u4e49\u4e00\u4e2a\u5185\u5b58\u7a7a\u95f4,\u5e76\u75280\u521d\u59cb\u5316
{label } SPACE expr
DataBuf SPACE 100 ;\u5b9a\u4e49100\u5b57\u8282\u957f\u7a7a\u95f4, unsigned char DataBuf[100];
n DCB \u5b9a\u4e49\u4e00\u4e2a\u8fde\u7eed\u5b57\u8282\u5185\u5b58\u7a7a\u95f4,\u7528\u4f2a\u6307\u4ee4\u7684\u8868\u8fbe\u5f0fexpr\u6765\u521d\u59cb\u5316.\u4e00\u822c\u53ef\u4ee5\u7528\u5b9a\u4e49\u6570\u636e\u8868\u683c,\u6216\u6587\u5b57\u5b57\u7b26\u4e32.(\u8fd9\u65f6\u7b49\u540c\u4e8eSETS),\u7528\u4e8e\u521d\u59cb\u4e8c\u8fdb\u5236BUFFER
{label} DCB expr{,expr \u2026}
Dest DCB -120,20,36,55 ;\u7b49\u540c\u4e8e unsigned char Dest[]={-120,20,36,55};
n DCU\u5b9a\u4e49\u7684\u4e00\u6bb5\u5b57\u7684\u5185\u5b58\u7a7a\u95f4(DCB\u662f\u5b57\u8282),\u5e76\u7528\u540e\u9762\u8868\u8fbe\u5f0f\u521d\u59cb\u5316
_RESET DCU Reset ; \u7b49\u540c\u4e8e DWORD _RESET[]={Reset};

n MAP\u5b9a\u4e00\u4e2a\u7ed3\u6784\u5316\u5185\u5b58,\u76f8\u5f53\u4e8e\u5b9a\u4e49\u4e00\u4e2aC\u7ed3\u6784
n FILED \u5b9a\u4e49\u4e00\u4e2a\u7ed3\u6784\u5316\u5185\u5b58\u7684\u6210\u5458
MAP 0x00,R9 ; \u5b9a\u4e49\u5185\u5b58\u8868,\u5730\u5740\u4e3aR9
Timer FIELD 4 ; \u5b9a\u4e49\u6570\u636e\u57dfTimer,\u957f\u4e3a4\u5b57
Attrib FIELD 4 ; \u5b9a\u4e49\u6570\u636e\u57dfAttrib,\u957f\u4e3a4\u5b57
String FILED 100 ; \u5b9a\u4e49\u6570\u636e\u57dfString ,\u957f\u4e3a100\u5b57
\u76f8\u5f53\u4e8eC\u8bed\u8a00\u7684\u5b9a\u4e49\uff1a
struct {
DWORD Timer ;
DWORD Attrib ;
Char String[100];
} R9;

11. \u6742\u9879\u7684\u4f2a\u6307\u4ee4
n \u5b57\u8282\u5bf9\u9f50 ALIGN
ALIGN; \u58f0\u660e4\u5b57\u8282\u5bf9\u9f50
n \u5b9a\u4e49\u4e00\u4e2a\u6570\u5b57\u5e38\u91cf\u5b9a\u4e49 EQU
NAME EQU expr {type}
PLLCON EQU 0xE01FC080;\u5b9a\u4e49PLLCON,\u7c7b\u4f3c\u4e8eC\u7684\u5b8f\u6216C++\u7684\u5e38\u91cf
n \u5305\u542b\u6587\u4ef6 GET\u548cINCLUDE
INCLUDE lpc2106.inc
n NOP \u7a7a\u6307\u4ee4
\u5728\u6c47\u7f16\u65f6\u4f1a\u88abARM\u7684\u7a7a\u64cd\u4f5c\u4ee3\u66ff\uff0c\u6bd4\u5982MOV R0,R0\uff0c\u4e00\u822c\u7528\u4e8e\u5ef6\u65f6\u4e0e\u5360\u4f4d\u3002
n \u58f0\u660e\u4e00\u4e2a\u5916\u90e8\u7b26\u7b26\u53f7 IMPORT,EXTERN
IMPORT,EXTERN \u5411\u5916\u90e8\u5bfc\u5165\u4e00\u4e2a\u7b26\u53f7,\u4e00\u822c\u662f\u5916\u90e8\u7a0b\u5e8f\u5168\u5c40\u53d8\u91cf

n \u6761\u4ef6\u7f16\u8bd1\uff1a[]\u3002\u7c7b\u4f3c\u4e8eC\u7684#ifdef \u4e4b\u7c7b\u5b9a\u4e49\u3002
\u683c\u5f0f :[ \u6761\u4ef6\u8868\u8fbe\u5f0f
\u6ee1\u8db3\u6761\u4ef6\u5206\u652f
|
\u4e0d\u6ee1\u8db3\u6761\u4ef6\u5206\u652f
]
\u793a\u4f8b1\uff1a
[ ENTRY_BUS_WIDTH=32 \uff1b\u7c7b\u4f3c#if ENTRY_BUS_WIDTH=32
b ChangeBigEndian ;DCD 0xea000007
] ; \u7c7b\u4f3c#endif
\u793a\u4f8b2\uff1a [ CLKDIV_VAL>1 ; \u7c7b\u4f3c#if CLKDIV_VAL>1
bl MMU_SetAsyncBusMode
|;\u7c7b\u4f3c#else
bl MMU_SetFastBusMode ; default value.
]; \u7c7b\u4f3c#endif
\u793a\u4f8b3 [ THUMBCODE \u7c7b\u4f3c#ifdef THUMBCODE
bx lr
| ;\u7c7b\u4f3c#else
mov pc,lr
] ;\u7c7b\u4f3c#endif
n \u6bb5\u5b9a\u4e49 AREA
n \u6307\u4ee4\u96c6\u5b9a\u4e49 CODE16\u548cCODE32
\u6307\u793a\u662fThumb \u6307\u4ee4\u96c6(\u538b\u7f29\u6307\u4ee4\u96c6\uff0c\u6bcf\u4e2a\u6307\u4ee416\u4f4d)\u3002\u8fd8\u662f\u666e\u901a32\u4f4d\u6307\u4ee4\u96c6
n \u6c47\u7f16\u7ed3\u675f:END
n \u7a0b\u5e8f\u5165\u53e3ENTRY

在arm中,ADD加法不带进位的,adds是带进位的,运算完成要置符号位,所以不能替换,sub和subs是做减法的,类似用法。

如果指定了 S,则这些指令将会根据结果来更新 N、Z、C 和 V 标记。
16 位指令
这些指令的下列形式可用于 Thumb-2 之前的 Thumb 代码中,在 Thumb-2 代码中使用时为 16 位指令:
ADDS Rd, Rn, #imm
imm 范围为 0-7。Rd 和 Rn 必须都是 Lo 寄存器。
ADDS Rd, Rn, Rm
Rd、Rn 和 Rm 必须都是 Lo 寄存器。
ADD Rd, Rd, Rm
ARMv6 及更低版本: Rd 和/或 Rm 必须是 Hi 寄存器。 ARMv6T2 及更高版本: 无此限制。
ADDS Rd, Rd, #imm
imm 范围为 0-255。Rd 必须是 Lo 寄存器。

SUBS Rd, Rn, Rm
Rd、Rn 和 Rm 必须都是 Lo 寄存器。
SUBS Rd, Rn, #imm
imm 范围为 0-7。Rd 和 Rn 必须都是 Lo 寄存器。
SUBS Rd, Rd, #imm
imm 范围为 0-255。Rd 必须是 Lo 寄存器。

答案是:
Adds(带进位) add
产生进位的时候不可以
不产生进位的时候可以

sub, subs类似

  • 鍦ˋRM姹囩紪涓,ADD鍙互鏇挎崲涓篈DDS鍚,SUB鍙互鏇挎崲涓篠UBS鍚?涓轰粈涔?_鐧惧害鐭...
    绛旓細绛旀鏄細Adds锛堝甫杩涗綅锛 add 浜х敓杩涗綅鐨勬椂鍊欎笉鍙互 涓嶄骇鐢熻繘浣嶇殑鏃跺欏彲浠 sub锛 subs绫讳技
  • arm 姹囩紪鎸囦护
    绛旓細https://developer.arm.com/documentation/100076/0100/a64-instruction-set-reference/a64-general-instructions/smaddl?lang=en Signed Multiply-Add Long multiplies two 32-bit register values, adds a 64-bit register value, and writes the result to the 64-bit destination register.SMADDL Xd,...
  • armv7-A绯诲垪9-arm纭欢姹囩紪鎸囦护
    绛旓細鍐呭瓨鎿嶄綔鎸囦护濡俵dr锛堝姞杞斤級鍜宻tr锛堝瓨鍌級鏄暟鎹氦鎹㈢殑妗ユ锛屽畠浠敮鎸佸绉嶅鍧妯″紡锛屽寘鎷洿鎺ャ佸亸绉荤瓑锛岃兘鐏垫椿澶勭悊鏍堢殑鍔ㄦ佹墿灞曘傝繛缁唴瀛樻搷浣滄寚浠ゅstmda锛屼互鍙婇拡瀵规爤鐨刾ush鍜宲op鎿嶄綔锛岄兘鍦ㄥ鐞嗗櫒鐨勬ā寮忓垏鎹腑鎵紨鐫鏍稿績瑙掕壊銆傛繁鍏ョ爺绌armv7-A绯诲垪鎸囦护锛屽彲浠鍙傝僡rmv7-A-R瀹樻柟鏂囨。鐨凙5绔犺妭锛屼互鍙奊NU姹囩紪鐨...
  • ARM涓眹缂鎸囦护鐨勯棶棰
    绛旓細姹囩紪鎸囦护鐨勭畝鍗曢棶棰 鍙互鍦―EBUG涓紪璇,浣嗘槸鏈鍚庡湪MASM涓嬬紪璇,鐒跺悗鍦―EBUG涓慨鏀硅皟璇,閭f牱鏇村鏄撳湪MASM缂栬瘧鏃舵鏌ュ埌涓嶆纭殑鍦版柟!涓閬撳叧浜庢眹缂栨寚浠ょ殑闂 A.ADD [BX],[2000H] ;涓嶅厑璁镐袱涓搷浣滄暟鍚屼负瀛樺偍鍗曞厓 B.ADC [SI][DI],AX ;鍙兘浣跨敤涓涓彉鍧瀵勫瓨鍣 C.SUB [2000H],[20H] ;涓嶅厑璁...
  • 姹囩紪璇█(闈㈠悜鏈哄櫒鐨勭▼寮忚璁¤瑷)璇︾粏璧勬枡澶у叏
    绛旓細鍦ㄦ眹缂栬瑷涓,鐢ㄥ姪璁扮(Mnemonics)浠f浛鏈哄櫒鎸囦护鐨勬搷浣滅爜,鐢ㄥ湴鍧绗﹀彿(Symbol)鎴栨爣鍙(Label)浠f浛鎸囦护鎴栬繍绠楀厓鐨勫湴鍧銆傚湪涓嶅悓鐨勮澶涓,姹囩紪璇█瀵瑰簲鐫涓嶅悓鐨勬満鍣ㄨ瑷鎸囦护闆,閫氳繃姹囩紪杩囩▼杞崲鎴愭満鍣ㄦ寚浠ゃ傛櫘閬嶅湴璇,鐗瑰畾鐨勬眹缂栬瑷鍜岀壒瀹氱殑鏈哄櫒璇█鎸囦护闆嗘槸涓涓瀵瑰簲鐨,涓嶅悓骞冲彴涔嬮棿涓嶅彲鐩存帴绉绘銆 璁稿姹囩紪绋嬪紡涓虹▼寮忓紑鍙...
  • arm姹囩紪鎸囦护鏈夊摢浜?
    绛旓細鍖呮嫭閫氱敤鏁版嵁浼犻佹寚浠OV銆佹潯浠朵紶閫佹寚浠MOVcc銆佸爢鏍堟搷浣滄寚浠USH/PUSHA/PUSHAD/POP/POPA/POPAD銆佷氦鎹㈡寚浠CHG/XLAT/BSWAP銆佸湴鍧鎴栨鎻忚堪绗﹂夋嫨瀛愪紶閫佹寚浠EA/LDS/LES/LFS/LGS/LSS绛夈傞昏緫杩愮畻 杩欓儴鍒嗘寚浠ょ敤浜庢墽琛岀畻鏈拰閫昏緫杩愮畻锛屽寘鎷姞娉曟寚浠ADD/ADC銆佸噺娉曟寚浠UB/SBB銆佸姞涓鎸囦护INC銆佸噺涓鎸囦护DEC銆佹瘮杈冩搷浣...
  • 浣跨敤ARM姹囩紪浼寚浠ょ紪绋:鍒嗗埆灏嗕袱涓棤绗﹀彿鏁版斁鍦ㄥ瘎瀛樺櫒R0鍜孯1涓,姹...
    绛旓細鈥POOL DCD 0xFFF 灏嗗閮ㄥ湴鍧ADDR1璇诲彇鍒癛1涓 LDR R1锛=ADDR1 姹囩紪鍚庡皢寰楀埌锛歀DR R1锛孾PC,OFFSET_TO_LPOOL]鈥POOL DCD ADDR1 4銆丯OP绌烘搷浣滀吉鎸囦护 鍦ㄦ眹缂栨椂灏嗚鏇挎崲鎴怉RM涓鐨勭┖鎿嶄綔锛屽MOV R0锛孯0 NOP浼寚浠や笉褰卞搷CPSR涓殑鏉′欢鏍囧織浣 浠ヤ笂鏄ARM姹囩紪璇█鐨勫洖绛旀弿杩帮紝鏈涢噰绾炽傝阿璋 ...
  • arm姹囩紪 ldr r0 =0x00000000 杩欎釜=鍙蜂唬琛ㄤ粈涔堝晩
    绛旓細鍏跺疄ARM鐨凩DR鎸囦护鏈変袱绉,涓绉嶅氨鏄疞DR鎸囦护,鍙︿竴涓槸LDR浼寚浠,瀹冧滑鐨勫啓娉曚竴鏍,浣嗘槸鍚箟涓嶄竴鏍,浼寚浠ょ殑LDR鏈夆=鈥,鎵浠ヤ綘鎵缁欑殑涓変釜鎸囦护涓,绗竴涓狶DR鏄疉RM鐨凩DR鎸囦护,绗笁涓槸ARM鐨勪吉鎸囦护LDR,浼寚浠DR=鍚庨潰鐨勬暟鏄竴涓32浣嶇殑绔嬪嵆鏁(鍙互绔嬪嵆涓哄父閲),鍦ㄦ眹缂缂栬瘧婧愮▼搴忔椂,LDR 浼寚浠よ缂栬瘧鍣鏇挎崲鎴愪竴鏉″悎閫...
  • 鍦╝rm鐨姹囩紪绋嬪簭涓湁鍝嚑绉嶄吉鎸囦护
    绛旓細4.1.1 绗﹀彿瀹氫箟锛圫ymbol Definition锛変吉鎸囦护 绗﹀彿瀹氫箟浼寚浠ょ敤浜庡畾涔ARM姹囩紪绋嬪簭涓殑鍙橀噺銆佸鍙橀噺璧嬪间互鍙婂畾涔夊瘎瀛樺櫒鐨勫埆鍚嶇瓑鎿嶄綔銆傚父瑙佺殑绗﹀彿瀹氫箟浼寚浠ゆ湁濡備笅鍑犵锛氣 鐢ㄤ簬瀹氫箟鍏ㄥ眬鍙橀噺鐨凣BLA銆丟BLL鍜孏BLS銆傗 鐢ㄤ簬瀹氫箟灞閮ㄥ彉閲忕殑LCLA銆丩CLL鍜孡CLS銆傗 鐢ㄤ簬瀵瑰彉閲忚祴鍊肩殑SETA銆丼ETL銆丼ETS銆傗 涓洪氱敤...
  • arm姹囩紪璺熸眹缂栥丆璇█鐨勫尯鍒
    绛旓細C璇█涓巃rm鎸囦护鏃犲叧锛屽彧涓庨昏緫杩愮畻鏈夊叧锛屾寚瀹氱‖浠跺湴鍧鐨勬搷浣滄墠涓庣‖浠剁浉鍏筹紱濡傛灉鐢╝rm缂栬瘧鍣ㄦ潵缂栬瘧锛屾瘡琛屽彲鑳界紪璇戝嚭1鍒板鏉rm鎸囦护銆傚 i++; //鍙橀噺 i 閫掑1 绛夋晥浜 LDR R3,#1 ;鐢↙DR鎸囦护灏嗘暟鍊1鏀惧叆R3瀵勫瓨鍣ㄥ噯澶囧弬涓庤繍绠 ADD R2, R2, R3 ;鐢ˋDD鎸囦护灏哛2銆丷3瀵勫瓨鍣ㄩ噷鐨勬暟鍊肩浉鍔...
  • 扩展阅读:arm汇编 add w ... arm指令大全 ... houdini9 y sfs ... arm汇编指令集 ... ab=0 ... arm汇编基本指令 ... 则r(a)+r(b)≤n ... androidx86 houdini ... arm adds add的区别 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网