Я изучаю MIPS64 и использую симулятор EduMIPS64.
Я понимаю инструкции следующего примера, я пытался выполнить его цикл за циклом, но я не понимаю, как компилятор знает, какое число или строка соответствует соответствующему заполнителю и как все относится к format_str
, так что в конце раздела .code
достаточно указать адрес format_str
в r14
Я знаю, что системные вызовы ожидают, что адрес их параметров хранится в регистре R14, но как все остальные относятся к этому адресу (format_str
)?
Для каждого %s
, %d
или %i
заполнителя, SYSCALL 5
ожидает
параметр, начиная с адреса предыдущего. Когда
SYSCALL находит заполнитель для целочисленного параметра, он ожидает, что
соответствующий параметр является целочисленным значением, если, если он находит
заполнитель для строкового параметра, он ожидает в качестве параметра
адрес строки.
Я пытался понять это по представлению в памяти, но безуспешно.
.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
Спасибо.