Операции над 64-битными словами в 32-битной системе - PullRequest
1 голос
/ 29 марта 2012

Я новичок здесь так же, как я новичок в сборке.Я надеюсь, что вы можете помочь мне начать.Я использую 32-битную (i686) Ubuntu для создания программ на ассемблере, используя компилятор gcc.

Я знаю, что регистры общего назначения имеют максимальный размер 32-битных (4 байта), но что, когда мне нужно работать на 64битовые числа?В инструкции Intel сказано, что старшие биты хранятся в% edx, а младшие в% eax. Отлично ... Так как я могу что-то сделать с этим числом из 2-х регистров?Я должен преобразовать 64-битное десятичное в шестнадцатеричное, затем сохранить его в памяти и показать на экране.

Как сделать 64-битное четырехзначное слово при запуске программы в разделе .data?

РЕДАКТИРОВАТЬ:Когда я определил глобальную переменную llu (long long unsigned) в C и скомпилировал для сборки, он сделал:

.data
a:
.long <low bits>
.long <high bits>

Это потому, что параметры сохраняются в стеке в обратном направлении или что-то еще?

Ответы [ 2 ]

3 голосов
/ 29 марта 2012
  1. Напишите тривиальную программу на C, которая использует long long числа (64-битные в Linux / ix86).
  2. Компилируйте эту программу в сборку с помощью gcc -S t.c.
  3. Изучите полученную сборку.
  4. Измените вашу программу, чтобы сделать что-то более сложное, и повторите шаги 2 и 3.

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

0 голосов
/ 29 марта 2012

Когда я определил глобальную переменную llu (long long unsigned) в C и скомпилировал для сборки, он сделал:

.data
a:
.long <low bits>
.long <high bits>

Это потому, что параметры сохраняются в стеке в обратном направлении или что-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...