как работает в ассемблере функция memset?
Здравствуйте,
читаю в вики-учебнике «Ассемблер в Linux для программистов C»
не могу написать на ассемблере пограмму-считалочку (задание из середины учебника). На СИ написала без проблем...
сейчас загвоздка в том, что я не могу заставить работать функцию memset. хочу забить символами 'z' всю строку
вот код
.data
format_item_massiv: /* формат для ф-и printf, для элемента миссива */
.string "p[n] = %c \n"
m:
.byte 6
a:
.int 'z'
p: /* указатель на блок памяти из m элементов */
.string "abcdea"
.text
.globl main main:
/* вызываем memset(p, a, m) */
pushl m
pushl a
pushl p
call memset
addl $12, %esp
/* PROVERKA SODERGIMOGO alementa massiva nomer 3 */
movl $3, %edx /* что в 3-м элементе массива? */
pushl p(,%edx,1)
pushl $format_item_massiv
call printf
addl $8, %esp
если закомментаровать 5 строчек посвященных работе функции memset - все работает, элемент массива правильно печатается. если их раскомментировать «Ошибка сегментирования».
вообще-то автор предлагает работать с нулями и единицами, а не с символами-буквами, но мне проще с символами, потому, что количество байт в стеке должно быть кратно 4 байтам, и у меня только с символьной строкой получается с помощью printf посмотреть что в строке делается. или можно как-нибудь без стека функции вызывать?
и еще вопрос: почему printf работает без подключения библиотеки <stdio.h>? и для memeset я ничего не подключаю
в общем темный лес, ясности нет в голове совсем :(
Перемещено boombick из Web-development