Консультация № 174454
23.11.2009, 00:14
35.00 руб.
0 4 0
Здравствуйте уважаемы эксперты!Помогите пожалуйста написать простую программу на языке Assembler используя memset
Объясните пожалуйста, каждую строчку в этой программе(какие функциию выполняет каждая строчка), какие функции выполнят memset вообщем
Заранее спасибо!!!

Обсуждение

Неизвестный
23.11.2009, 08:00
общий
не очень понятно что нужно уточните, вызвать внешную функцию memset из библиотеки Си?
давно
Посетитель
7438
7205
23.11.2009, 18:16
общий
Или написать свою?
И опять же, ДОС-программа или Windows?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
23.11.2009, 19:06
общий
#include <string.h>
#include <stdio.h>
#include <mem.h>
#include <conio.h>

int main(void)
{
char buffer[] = "Hello world\n";
printf("Buffer before memset: %s\n", buffer);
memset(buffer, '*', 5);
printf("Buffer after memset: %s\n", buffer);
getch();
return 0;
}
мне нужно написать эту же программу на ассемблере
и объяснить, что обозначает каждая строчка в программе
Неизвестный
23.11.2009, 21:04
общий
вот вам пример программы как Я понял Вас
Код:
.model small
.stack 200h
.data
str_test db '123456789',10,13,'$' ; строка пример
.code

memset proc far ; процедура
push bp ; создать стековый фрейм
mov bp,sp
push ax ; используемые регистры в стек
push di
push es
push cx
mov cx,[bp+6] ; извлечение параметров из стека, количество байт
mov ax,[bp+12] ; сегментный адрес
mov es,ax
mov di,[bp+10] ; смещение
mov ax,[bp+8] ; символ заполнения в al

cld ; флаг направления
rep stosb ; заполнение строки

pop cx ; восстановление регистров
pop es
pop di
pop ax
pop bp
retf 8 ; выход очистка стека
endp

.startup
mov ax,0900h ; вывести строку на экран
mov dx, offset str_test
int 21h

push SEG str_test ; параметры в стек
push OFFSET str_test
push '*'
push 5
call memset ; вызвать процедуры
mov ax,0900h ; вывести строку на экран
mov dx, offset str_test
int 21h
mov ax,4c00h ; выход из программы
int 21h
end
Форма ответа