Как определить в GAS 32-битное целое? - Assembler
Формулировка задачи:
Здраствуйте,
в NASM и MASM имеются директивы DWORD которые выделяют точно 32-битные типы под переменные:
. В GAS DWORD нет, а есть .int и .long но их длина машинно-зависима, как написано в руководстве. Имеется ли способ в GAS определять переменные точно 32-битной длины?
Спасибо.
section .data var1 DWORD 123
Решение задачи: «Как определить в GAS 32-битное целое?»
textual
Листинг программы
.section .data var1: .fill 1,4,10000 .section .text .global start start: push var1 push $LC0 call _printf add $8,%esp ret LC0: .asciz "Value is %d\n"
Объяснение кода листинга программы
- Объявление переменных:
- var1: 32-битное целое, заполненное значениями 1, 4 и 10000 (соответственно, его значение будет 10001).
- Объявление раздела .data и .text:
- .section .data: здесь мы объявляем данные, которые будут доступны только для чтения или только для записи.
- .section .text: здесь мы объявляем исполняемый код.
- Объявление метки (имени) для функции:
- start: это имя будет использоваться для обозначения начала функции.
- Создание стека:
- push var1: это инструкция говорит о том, что значение переменной var1 будет помещено в стек.
- push $LC0: это инструкция говорит о том, что в стек будет помещена метка (строка) LC0.
- Вызов функции:
- call _printf: это инструкция говорит о том, что будет вызвана функция _printf.
- Восстановление стека:
- add $8,%esp: это инструкция говорит о том, что стек будет восстановлен путем добавления 8 к значению регистра esp.
- Возврат из функции:
- ret: это инструкция говорит о том, что выполнение функции завершено и возвращается управление в вызывающую функцию.
- Объявление строки:
- LC0: это метка, которая указывает на строку
Value is %d\n
. Таким образом, в данном коде происходит следующее:
- LC0: это метка, которая указывает на строку
- Объявление переменной var1.
- Объявление разделов .data и .text.
- Объявление метки start.
- Создание стека и помещение в него значения var1 и метки LC0.
- Вызов функции _printf.
- Восстановление стека путем добавления 8 к значению регистра esp.
- Возврат из функции.
- Объявление строки
Value is %d\n
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д