#assembly #memory-management #mips
#сборка #управление памятью #mips
Вопрос:
Таким образом, в основном входные данные программы представляют собой 2 отдельные строки в разделе аргументы программы. Они могут быть либо 0x … (шестнадцатеричными), либо 0b … (двоичными). Код, который у меня есть на данный момент, является :
li $v0, 36
lw $t1, ($a1)
lb $t2, 2($t1)
syscall
li $v0, 36
lw $t3, 4($a1)
lb $t4, 2($t3)
syscall
li $v0, 36
Это просто отпечатки, чтобы проверить, получил ли я значение.
Основная проблема заключается в том, что $t1
и $t3
имеют правильный адрес памяти. Я вижу, что в $a1
адресе памяти хранятся два отдельных адреса памяти для расположения строки. $t1
и $t3
содержат их, в то время как $t2
и $t4
должны сдвигаться и считывать второй символ.
По какой-то причине, независимо от того, какие входные данные вводятся в аргументы программы, это всегда выводит 2. Если я изменю системный вызов на 34, он будет печатать 0x00000002
, а если я изменю его на 11 для печати символа, как обычно, он будет печатать поле. Мне просто нужно определить, является ли это x для шестнадцатеричного или b для двоичного кода, чтобы я мог соответствующим образом редактировать входные данные. Любая помощь была бы замечательной.
РЕДАКТИРОВАТЬ: даже если я выполняю системный вызов 11 либо в 2, либо в 1 смену, он выводит поле. Например, [] вместо фактического символа.
Комментарии:
1. системный вызов 36 выводит целое число в $ a0, верно? Но вы не показываете, что находится в $ a0. (Может быть, это argc?)
2. lb $ t2, 2($t1) загружает третий символ строки. 1 ($ t1) — это второй символ, а 0 ($ t1) — первый.