Как подписать расширение числа дополнения до двух, указанного в аргументах программы в mips (сборка)
Я пытаюсь подписать расширение числа дополнения до двух, которое я получаю из аргументов программы в мипс. Как бы я это сделал?
1 ответ
Одним из способов является использование MIPS sra
инструкция, эта инструкция выполняет арифметическое смещение вправо - она сдвигает вправо регистр, смещаясь в знаковый бит.
Поместив 8-битное значение в крайнее левое положение (прочитайте в наиболее значимой позиции) с помощью sll
мы делаем его знаковый бит совпадающим со знаком регистра, затем используем sra
:
#Assume $a0 is a) 0x40 b) 0x80
sll $a0, $a0, 24 #a) $a0 = 0x40000000 b) $a0 = 0x80000000
sra $a0, $a0, 24 #a) $a0 = 0x00000040 b) $a0 = 0xffffff80
Для значений в памяти lb
загрузит знак байта, расширяющий его (в отличие от lbu
).
Начиная с выпуска 2 ISA MIPS32, seb rt, rs
инструкция, которая расширяет младший байт регистра GP.