我使用的是ARMSim,我猜它是一个ARM模拟器,我有这个演示程序,它基本上读取一个文本文件,并打印文本文件中的整数(只有第一行)。
Start:
@Open file for input.
LDR R0, =InputFileName
MOV R1, #0
SWI SWI_Open
BCS FileError
@Save file handle to memory.
LDR R1, =InputFileHandle
STR R0, [R1]
@Read integers.
LDR R0, =InputFileHandle
LDR R0, [R0]
SWI SWI_RdInt
@Print to ARMSIM console.
MOV R1, R0
MOV R0, #Stdout
SWI SWI_PrInt
BAL End
FileError:
MOV R0, #Stdout
LDR R1, =FileErrorMess
SWI SWI_PrStr
BAL Quit
End:
SWI SWI_Exit
.data
.align
InputFileHandle: .skip 4
InputFileName: .asciz "integers.txt"
FileErrorMess: .asciz "Can't open file."
字符串
它运行良好,但我真的不明白LDR或STR指令是如何工作的。特别是那些看起来像LDR R0,[R0]或STR R0,[R1]的指令。有人能澄清一下这些指令是如何工作的吗?
1条答案
按热度按时间wxclj1h51#
LDR
和STR
指令使用后索引寻址来更新其地址寄存器。STR
指令在内存中存储一个字。LDR
指令从内存中加载一个字。Read more