Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Очень нужна помощь! 
:(
    Опции темы
Evilpc
Дата 15.6.2005, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 15.6.2005

Репутация: нет
Всего: нет



ктонить может построчно прокоментировать сию прогу??очень нужно, а самя в Ассемблере 0!

TEXT SEGMEHT 'CODE' assume cs:text,ds:data; begin:
mov ax,data;
mov ds,ax;
mov ah,08h;
int 21h;
mov stro,al;
mov ah,08h;
int 21h;
mov stro+1,al;
mov ah,08h;
int 21h;
mov stb,al;
mov ah,08h;
int 21h;
mov stb+1,al;
mov ah,08h;
int 21h;
mov color,al;
mov ah,08h;
int 21h;
mov color+1,al;
mov ah,09h;
mov dx,offset message;
int 21h;
mov ah,4oh;
mov al,00h;
int 21h; text ends; data segment 'data';
message db 27,'[2J',27,'['
stro db ' 00 ' , ';'
stb db '00','H',27,'['
color db '00','m','churik kaban$ data ends
end begin


заранее спасибо!
если что о пишите на [email protected]



PM MAIL   Вверх
Payne
Дата 17.6.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Детектив
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 6.4.2005
Где: Петербург

Репутация: нет
Всего: 10



Блин, ты бы только видел, сколько ошибок компилятор понавыдавал, когда я просто через буфер обмена прогу копирнул в "Блокнот" и откомпилил!!!

Код

;определение сегмента стека
stak    segment    stack
    db    256 dup (?)
stak    ends

;определение сегмента данных
data segment; 
    message db 27,'[2J',27,'['        ;выделяем области памяти для message...
    stro db ' 00 ' , ';'            ;...stro...
    stb db '00','H',27,'['            ;...stb...
    color db '00','m','churik kaban$'    ;...color.
    file_name db 'file.txt',0        ;имя файла
    handle    dw 0            ;номер файла
data ends

;определение сегмента кода
cseg    segment
assume    cs:cseg, ds:data, ss: stak    ;ставим в соответствие регистрам определенные сегменты
begin:                    
    mov ax,data        ;помещаем в регистр ax смещение на сегмент данных
    mov ds,ax        ;помещаем в ds значение регистра ax
    
    mov ah,08h;
    int 21h            ;функция 08h прерывания 21h ждет нажатия клавиши и помещает ее символ в al
    mov stro,al        ;помещаем значение al по адресу stro
    
    mov ah,08h        
    int 21h            ;ожидаем нажатия клавиши
    mov stro+1,al;        ;помещаем значение al по адресу stro+1
    
    mov ah,08h
    int 21h            ;ожидаем нажатия клавиши
    mov stb,al        ;помещаем значение al по адресу stb
    
    mov ah,08h
    int 21h            ;ожидаем нажатия клавиши
    mov stb+1,al        ;помещаем значение al по адресу stb+1
    
    mov ah,08h
    int 21h            ;ожидаем нажатия клавиши
    mov color,al;        ;помещаем значение al по адресу color
    
    mov ah,08h
    int 21h            ;ожидаем нажатия клавиши
    mov color+1,al;        ;помещаем значение al по адресу color+1
    
    mov ah,09h        ;функция 09h прерывания 21h выводит сообщение на экран
    mov dx,offset message    ;начало сообщения заносится в dx - это смещение на message, конец - символ '$'
    int 21h            ;генерируем прерывание
    
    mov ah,3Dh        ;открываем файл...
    mov al,01h        ;...только для записи
    mov dx,offset file_name          ;смещение на имя файла
    int 21h
    mov handle,ax                         ;записываем номер файла в переменную handle

    mov ah,40h        ;готовимся записывать в файл
    mov al,00h
                mov cx,31                                ;запишутся первые 31 байт - этого достаточно
    mov bx,handle                         ;регистр bx должен содержать номер файла
    mov dx,offset message            ;а здесь смещение на то место, откуда начнем запись
    int 21h            ;запись в файл

    mov    ah,10h        
    int    16h        ;ожидаем нажатия клавиши

    mov    ah,3Eh
    mov    bx,handle
    int    21h        ;закрываем файл с номером, содержащимся в bx
    int    20h        ;выходим из программы
cseg ends;

end begin

В общем, как видишь, прогу я несколько видоизменил. Не знаю, как тебе это - понравится или нет, но ничего тут не поделаешь, потому что та, которую ты запостил, была довольно корява...
Как я понял, должен получиться .exe-файл. Следовательно, в проге должен быть сегмент стэка (строки 2 - 4). Далее, сегмент данных определяется до сегмента кода (7 - 14). Я добавил туда, как видишь, новые элементы. Во-первых, выделил место для имени файла; во-вторых, сделал переменную, которая будет содержать номер файла (хэндл). Далее объясню, зачем это...
Ну, теперь, собсно, сегмент кода.
Думаю, здесь несложно разобраться по приведенным комментариям. Но пожалуй поясню пару моментов. В сегменте данных определены места для следующих элементов: stro, stb, color и message. При запуске проги она будет ждать нажатия шести клавиш. Их символы, помещаемые в регистр al, будут перемещаться из al в выделенные под вышеуказанные переменные области памяти. После этого функцией 09h прерывания 21h будут выведены на экран символы, которые пользователь ввел. Выводиться они будут со смещения Message и до первого встретившегося символа $, а встретится он после строки 'churik kaban'.
Когда разбирал текст твоей проги, наткнулся на функцию 40h прерывания 21h. Она предназначена для записи в файл. Я подумал: "Это неспроста" и решил дополнить записью того, что выводится на экран, в файл. На этот счет там я все прокомментировал: используются функции 3Dh (открытие файла), 40h (запись в файл) и 3Eh (закрытие файла) прерывания 21h. Теперь создай в папке, где у тебя будет прога, файл file.txt, и после выполнения проги ты увидишь в файле примерно то, что ты видел на экране.
И напоследок, я добавил ожидание нажатия клавиши перед выходом из программы, чтобы результат ее выполнения был хотя бы заметен:

Код

mov ah,10h
int 16h

Если тебе не понравится то, что я добавил, можешь смело это удалить. Главное, оставь сегмент стэка и не изменяй заголовки и расположение других сегментов.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.