-1
我正在使用ARM在Raspian OS上編寫計算器程序;它是一個簡單的計算器,使用反向拋光表示法,只使用整數,並且只有4個操作(add +,sub - ,multiply *,MAX M)。代碼也應該作爲連續循環運行。爲什麼在我的ARM組件計算器程序中出現Seg故障?
這是我的代碼到目前爲止,我可以輸入值,但之後我得到一個seg錯誤。
.global main
.func main
main:
BL _scanf
MOV R1, R0
BL _getchar
MOV R3, R0
BL _scanf
MOV R2, R0
BL _compare
B main
_getchar:
MOV R7, #3
MOV R0, #0
MOV R2, #1
LDR R1, =read_char
SWI 0
LDR R0, [R1]
AND R0, #0xFF
MOV PC, LR
_scanf:
PUSH {LR}
SUB SP, SP, #4
LDR R0, =format_str
MOV R1, SP
BL scanf
LDR R0, [SP]
ADD SP, SP, #4
POP {PC}
_compare:
CMP R3, #'+'
BEQ _add
CMP R3, #'-'
BEQ _sub
CMP R3, #'*'
BEQ _mul
CMP R3, #'M'
BEQ _max
_add:
MOV R4, LR
ADD R0, R1, R2
MOV R0, R0
BL printf
MOV PC, R4
_sub:
MOV R4, LR
SUB R0, R1, R2
MOV R0, R0
BL printf
MOV PC, R4
_mul:
MOV R4, LR
MUL R0, R1, R2
MOV R0, R0
BL printf
MOV PC, R4
_max:
MOV R4, LR
CMP R1, R2
BL printf
MOV PC, R4
_exit:
MOV R7, #1
SWI 0
.data
read_char: .ascii " "
format_str: .asciz "%d"
我爲可怕的格式提前道歉,但這是我第一次。 謝謝。
1)在_getchar你clobber R1中,應該是第一個操作符。 2).data中的字符串不應該是'.align 4'-ed? – Tommylee2k
你能夠使用調試器嗎? – InfinitelyManic