Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранить и загрузить видео буфер 
V
    Опции темы
champion
Дата 15.5.2008, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

save:
        mov     ah,3Ch         
        xor     cx,cx           
        mov     dx, fil         
        int     21h

        mov     ax,3d02h  
        mov     dx, fil        
        int     21h


        mov bx, ax
        push bx
        mov     ah,40h     
        mov     cx,0FA00h
        xor edx, edx
        mov     dx, 0A000h

        int     21h

        mov     ah,3Eh     
        pop bx
        int 21h      
int 20h
fil    db      'graph.bas',0   
handle dw 0    

С помощью кода выше сохраняю содержимое видео буфера в graph.bas, код ниже - программа восстанавливающая буфер, но в ней ошибка  ничего не выводит. В вчем проблема?
Код

Load: 
open: 
        mov ax,3d00h                                    
        mov dx, fil
        int 21h
read:
        mov bx, ax
        mov ah,40h
        mov cx,0FA00h              
        mov dx, 0A00h
        int 21h
close:
        mov ah,3eh
        int 21h
delay:
       mov ax, 0800h
       int 21h
int 20h
fil db 'graph.bas',0




--------------------
user posted image
PM MAIL   Вверх
anwe
Дата 15.5.2008, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А сам файл создается? Я не знаю что за ассемблер, может какой fasm и в нем все работает, но для tasm'а надо указывать адрес строки с именем файла:
Код

mov     dx, offset fil 
Но главное не это. Главное, что при восстановлении опять используется функция 40h - запись в файл - вместо 3Fh - чтение из файла.
PM MAIL   Вверх
dumb
Дата 16.5.2008, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



вызов функции 3d после 3c не нужен(я, кстати, про это уже говорил smile).
сохраняешь в файл ты не видео-буфер, а неизвестно что:
Цитата(champion @  15.5.2008,  21:49 Найти цитируемый пост)
        mov     dx, 0A000h

да и загружаешь(как уже отметил anwe - используя неверную функцию) из файла тоже неизвестно куда, возможно портя при этом память своего приложения:
Цитата(champion @  15.5.2008,  21:49 Найти цитируемый пост)
        mov dx, 0A00h


адрес видео-буфера - A000:0000(=A0000).
Код

        mov     ah,3Ch         
        xor     cx,cx           
        mov     dx, offset fil
        int     21h
        mov bx, ax
        mov     ah,40h     
        mov     cx,0FA00h
push ds
mov dx,0a000h
mov ds,dx
xor dx,dx
        int     21h
pop ds
        mov     ah,3Eh     
        int 21h 

PM MAIL   Вверх
champion
Дата 16.5.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Объясните пожалуйста, для чего мы используем ds? насколько понимаю, это data segment, почему нужно использовать именно этот регистр?
Правильно ли я понял, что ds используется для указания того, что, куда и откуда писать?

Добавлено через 2 минуты и 27 секунд
переписал код сохранения и загрузки, теперь выглядят так:
Код

save:
        mov     ah,3Ch          ; create file
        xor     cx,cx           ; sets the file attribute
        mov     dx, fil         ; gets the file name
        int     21h

        mov     ax,3d02h        ; open file read/write
        mov     dx, fil         ; gets the file name
        int     21h


        mov bx, ax
        push bx
        mov     ah,40h          ; write to file
        mov     cx,0FA00h               ; text len
        xor edx, edx
        mov     dx, 0A000h
        push ds
        mov ds, dx
        xor dx , dx
        int     21h
        pop ds
        mov     ah,3Eh          ; close file
        pop bx
        int 21h 

И загрузка:
Код


org 100h
mov ax, 013h
int 10h


open: 
        mov ah,3Ch
        xor cx, cx
        mov dx, fil
        int 21h
read:
        mov bx, ax
        mov ah,40h
        mov cx,0FA00h              
        push ds
        mov dx, 0A000h
        mov ds, dx
        xor dx, dx
        int 21h
        pop ds
        mov ah, 3Eh
            int 21h
close:
        mov ah,3eh
        int 21h
 delay:
mov ax, 0800h
int 21h

int 20h
fil db 'graph.bas',0


Но не работает..


--------------------
user posted image
PM MAIL   Вверх
anwe
Дата 17.5.2008, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(champion @  16.5.2008,  20:13 Найти цитируемый пост)
Правильно ли я понял, что ds используется для указания того, что, куда и откуда писать?
Он указывает на сегмент видеопамяти.

Цитата(champion @  16.5.2008,  20:13 Найти цитируемый пост)
почему нужно использовать именно этот регистр?
Да можешь и другой сегментный, возьми es, к примеру.

Цитата(champion @  16.5.2008,  20:13 Найти цитируемый пост)
Но не работает.. 

1)
Цитата(dumb @  16.5.2008,  01:57 Найти цитируемый пост)
вызов функции 3d после 3c не нужен

champion, не обижайся, но читать умеешь?  smile А умеешь читать внимательно? smileЕсли по внимательности, то просто видно, что 3D у тебя идет после 3C при загрузке в файл, в первом куске кода. Значит эти строки лишние:
Код

        mov     ax,3d02h        ; open file read/write
        mov     dx, fil         ; gets the file name
        int     21h

А вот во втором куске кода первоначально у тебя использовалась лишь 3D функция. А если она не следует после 3C, значит здесь ее убирать не надо!
Если же по логике, то что можно считывать со вновь созданного файла, который не открыт 3D функцией, а заново создан функцией 3C?! smile Опять, менять не надо было!

2) Уже я писал, может
Цитата(anwe @  15.5.2008,  20:30 Найти цитируемый пост)
надо указывать адрес строки с именем файла
то есть использовать offset

3) Уже же было:
Цитата(anwe @  15.5.2008,  20:30 Найти цитируемый пост)
при восстановлении опять используется функция 40h - запись в файл - вместо 3Fh - чтение из файла.


PM MAIL   Вверх
champion
Дата 17.5.2008, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Anwe, благодарю за терпение! Вопрос решен!
Dumb, благодарю за помощь!

Это сообщение отредактировал(а) champion - 17.5.2008, 12:00


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

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

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


 




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


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

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