использование malloc и memset в ассемблере

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
webmat
Сообщения: 1
Зарегистрирован: 08 ноя 2008, 13:04

Здравствуйте,

пытаюсь написать такую программу-считалочку:

Есть числа от 0 до m, которые располагаются по кругу. Счёт начинается с элемента 0. Каждый n-й элемент удаляют. Счёт продолжается с элемента, следующего за удалённым. Напишите программу, выводящую список вычеркнутых элементов. Подсказка: используйте malloc(3) для получения m + 1 байт памяти и занесите в каждый байт число 1 при помощи memset(3). Значение 1 означает, что элемент существует, значением 0 отмечайте удалённые элементы. При счете пропускайте удалённые элементы.

Для начала хочу просто разобраться с тем как использовать malloc и memset.

написала маленькую программку - хочу просто зарезервировать m байт, забить их единицами и научиться обращаться к любому из этих байт, чтоб их нулями отмечать, если это число выбыло, а gcc мне говорит: ошибка сегментации... что я делаю не так?

Код: Выделить всё

.data

input_m:
.string "vvedi kolichestvo alementov m (0-255) \n"


schitat_stroku_format:
.string "%d"

m:
.int 0

byte_poz:
.long 0

.text


.globl main
main:

pushl $input_m
call printf
pushl $m
pushl $schitat_stroku_format
call scanf

addl $12, %esp
movl $m, %edx /* */

pushl %edx
call malloc
popl byte_poz
addl $4, %esp

pushl %edx
pushl $1
pushl byte_poz
call memset
addl $12, %esp
movl $0, %eax
ret
Ответить