1
我知道內存中的字符串字符串不如存儲數字或字符那麼簡單。我試圖用.word指令存儲字符串,我知道這可能是錯誤的。我不知道如何將字符串存儲在內存中然後輸出它。是唯一的選擇將字符串存儲爲一堆%c,然後逐個輸出每個字符?我試圖看看是否有一個更簡單的方法來做到這一點。我嘗試了.string指令而不是.word,但這被認爲是一個有效的指令。想要讀取字符串並在程序集中輸出相同的字符串
.data
.balign 4
input_name: .asciz "enter name: "
.balign 4
output_name: .asciz "name entered : %s\n"
.balign 4
scan_pattern: .asciz "%s"
.balign 4
name_read: .word 0
.balign 4
return: .word 0
.global main
main:
ldr r1, =return
str lr, [r1]
ldr r0, =input_name
bl printf
ldr r0, =scan_pattern
ldr r1, = name_read
bl scanf
ldr 0, =ouput_name
ldr r1, =name_read
ldr r1, [r1]
bl printf
ldr lr, =return
ldr lr, [lr]
bx lr
我不太確定你所指的字符串是什麼,也許是scanf的輸出? 還有一堆其他評論第一: 有一堆明顯的錯字(如ldr 0,= output_name),可能只是一個複製/粘貼的事情,因爲我不知道它是如何構建的。 C方法需要一個堆棧 - 也許已經安裝在某個地方。 代碼位於.data部分,通常會進入.text。 而不是像這樣操縱lr,要麼(a)在最後調用'b main'返回到開頭。 (b)將lr推入堆棧並將其彈入pc中。 – SilverCode 2014-10-29 21:52:14
接下來 - 分配空間。您可以使用.space指令。假設你想爲你的字符串分配64個字節。 'mystring:.space 64'將scan_pattern分配給r0,將myspace分配給r1以便調用scanf,並再次分配給下面的printf。 這裏是[gas arm directives]的備忘單(http://www.coranac.com/files/gba/re-ejected-gasref.pdf) – SilverCode 2014-10-29 22:01:49