Сборка MIPS - строка для двоичного представления - PullRequest
0 голосов
/ 23 октября 2011

Я хочу преобразовать строку в ее двоичное представление в C, чтобы она подходила для сборки MIPS (я пишу ассемблер MIPS в C).

Для строки "The sum" MIPS делает это следующим образомпуть (я извлек раздел MIPS .data):

00100000011001010110100001010100
00100000011011010111010101110011
01101110001000000110011001101111
01100101011000100110110101110101
01101001001000000111001101110010
01110010011000010010000001101110
00100000011110010110000101110010

Буква T - это 1010100 в двоичном виде.Я вижу 1010100 в конце первой строки, но не должны ли остальные быть нулями (поэтому это знак, расширенный до 32-битного, поскольку MIPS работает с 32-битным)?

h - это 1101000, а во второй строке даже нет 1101000. Почему это?

Может кто-нибудь, пожалуйста, объясните мне это?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 23 октября 2011

Данные ASCII не являются "расширенными знаками".Используя симулятор MIPS Mars, я набрал:

.data 
.asciiz "The sum"

.text
main:

Это сгенерировало сегмент данных:

Address:   Value:
0x10010000 0x20656854
0x10010004 0x006d7573

НО ПОДОЖДИТЕ, разве это не шестнадцатеричное значение "суммы" просто 54:68:65:20:73:75:6d?Да, обратите внимание на порядок, в котором они на самом деле хранятся. Вернее, посмотрите на Endianness .Наименьшее значение имеет самый высокий адрес (или самый старший байт - первый адрес).Строки ASCII хранятся в формате Big Endian.

Итак, когда вы храните свои строки, вычислите шестнадцатеричное значение, разбейте строку на слова, а затем сохраните каждый символ в обратном порядке.Затем преобразовать в двоичный файл.

0 голосов
/ 23 октября 2011
$ echo "00100000011001010110100001010100
00100000011011010111010101110011
01101110001000000110011001101111
01100101011000100110110101110101
01101001001000000111001101110010
01110010011000010010000001101110
00100000011110010110000101110010
"| perl -pe '$_=pack"B*",$_'
 ehT musn foebmui srra n yar

Каким-то образом символы этой строки расположены в странном порядке. Вы группируете 4 символа в int?

...