我正在学习 MIPS64 并使用 EduMIPS64 模拟器。
我理解以下示例的说明,我尝试在一个循环后循环执行它,但我不知道编译器如何知道哪个数字或字符串与相应的占位符匹配,以及format_str
在本.code
节末尾如何与 so 相关,这就足够了把地址放进format_str
去r14
我知道系统调用期望其参数的地址存储在寄存器 R14 中,但所有其他调用如何与该地址(format_str
)相关?
对于每个或占位符,
%s
都需要一个参数,从前一个的地址开始。当 SYSCALL 找到一个整数参数的占位符时,它期望对应的参数是一个整数值,当它找到一个字符串参数的占位符时,它期望字符串的地址作为参数。%d
%i
SYSCALL 5
我尝试通过内存表示来理解它,但没有成功。
.data
format_str: .asciiz "%dth of %s:\n%s version %i.%i is being tested!"
s1: .asciiz "June"
s2: .asciiz "EduMIPS64"
fs_addr: .space 4
.word 5
s1_addr: .space 4
s2_addr: .space 4
.word 0
.word 5
test:
.code
daddi r5, r0, format_str
sw r5, fs_addr(r0)
daddi r2, r0, s1
daddi r3, r0, s2
sd r2, s1_addr(r0)
sd r3, s2_addr(r0)
daddi r14, r0, fs_addr
syscall 5
syscall 0
谢谢。