Сегмент MIPS .data в машинный код

Мне нужно преобразовать следующий код из сегмента .data в машинный код, но я не знаю, как это сделать.

value: .word  -39

Я понимаю процесс для переменных .asciiz, но я не могу найти никакой информации о переменных .word для машинного кода.

Кроме того, процессор сначала собирает сегмент .data или сегмент .text? Я бы подумал, что .data впервые появился в написанном коде, но я просто хочу быть уверенным. (Я должен связать шестнадцатеричные адреса с их соответствующим машинным кодом по порядку, и я предполагаю, что это будет первый машинный код.)


person rollerz    schedule 03.05.2015    source источник
comment
Сегмент .data не преобразуется в машинный код.   -  person EOF    schedule 03.05.2015
comment
Вы можете спросить, как представить целые числа со знаком в двоичном формате. В этом случае посмотрите на дополнение 2.   -  person Jester    schedule 03.05.2015
comment
Что ж, для задания, которое я выполняю, в нем конкретно говорится, что нужно выполнять как разделы .data, так и .text. Если это правда, что сегмент .data не переведен, должен ли я просто игнорировать инструкции для этой части? (Он дает конкретный адрес, которым, по-видимому, должен быть и машинный код.)   -  person rollerz    schedule 03.05.2015


Ответы (1)


.word сообщает ассемблеру

  • размер следующего списка выражений (обычно .word составляет два байта, т.е. 16 бит)
  • порядок байтов (самый старший байт в старшем или младшем адресе)

которые оба зависят от целевой машины, для которой вы собираете

Для отрицательных чисел, как было предложено, обычно используется дополнение до 2, так как байт -39 будет преобразован в 0xD9 или 0b11011001.

Поскольку вы объявили эту константу .word, -39 хранится как 16-битное значение, то есть 0xFFD9.

value: .word -39

следовательно, его также можно было бы объявить «более машинным кодом» как

value: .byte 0xD9, 0xFF ; little endian architecture - LSB(yte) at lower address

or

value: .byte 0xFF, 0xD9 ; big endian architecture - LSB(yte) at higher address

при этом .byte всегда заполняет память от младшего к старшему адресу.

person MikeD    schedule 03.05.2015
comment
Я думал, что .word 4 бита, а полуслово 2 байта? РЕДАКТИРОВАТЬ: Подождите, я ошибаюсь. Вы сказали байты, а не биты. - person rollerz; 03.05.2015
comment
как я уже писал ... в зависимости от вашей машины ... для архитектуры MIPS вы правы, .word - это 4 байта, поэтому поток байтов от младшего к старшему адресу - D9 FF FF FF (little endian) - person MikeD; 03.05.2015