Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Заполнение всех 256 байтов строки


Автор: iglaweb 12.11.2009, 15:40
Вот код решения задачки: Заполнить все 256 байтов строки символом с кодом 0
mov byte ptr s, 255 
mov ecx, 255h
lea edi, s
xor eax, eax
mov al, '0'
cld {двигаемся в прямом направлении}
repnz stosb

но в строке только 48 нулей, почему?

Автор: airyashov 12.11.2009, 16:58
почему такой код? вроде так
Код

mov ecx, 256
lea edi, s
mov al, '0'
cld
rep stosb

Автор: iglaweb 12.11.2009, 19:27
airyashov,
все равно 48 нулей!
В паскале s задаю так: "var s : string;"

Автор: 111u3 12.11.2009, 20:15
Значит в паскале код кде-то косячит или асемблерный код не так вызываете или еще какие нибудь причины. то что здесь приведено правильно и проверено. Что бы вам точно ответили необходим полный вид кода, желательно с коментами.

Автор: airyashov 12.11.2009, 22:08
Паскаль - это хорошо, только там параметром много при компиляции, линковке. Куда смотрит es например?

Автор: Mikl_ 13.11.2009, 05:04
Цитата
Вот код решения задачки: Заполнить все 256 байтов строки символом с кодом 0
...но в строке только 48 нулей, почему? 
Дело  том что в паскале строка не может быть длинее 255 символов, а в самом первом байте строки находится ее длина, так как символ нуля '0' соответствует числу 48 поэтому ты и видишь 48 "нолей" поэтому программа должна быть такой
Код
        mov ebx,offset s
        mov byte ptr [ebx],255; устанавливаем длину строки
        inc ebx; смещаемся на один байт -- отсюда начнутся данные строки
        mov ecx,63;  256/4=64
        mov eax,30303030h
a:    mov [ebx],eax; заполняем по 4 байта сразу
        add ebx,4
        loop a
        dec ebx
        mov [ebx],eax; заполняем оставшиеся 253-255 байты строки
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)