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


Автор: GQU 14.1.2015, 14:47
Программа выводит рожицы то на нулевую страницу, то на первую
Я хочу чтобы положение курсора на первой и второй страницах были разные
Для этого есть 2 процедуры: cursor_page1    proc и cursor_page0    proc
Но почему то cursor_page0 работает неправильно, точнее курсор в конец экрана не уходит, хотя cursor_page1 нормально работает! 
Почему?

[ASM]
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Start:

call    set_video

mov    cx,999999999
next:
call    set_page_0
call    cursor_page0
call    rogica_0

call    set_page_1
call    cursor_page1
call    rogica_1

loop    next


int    20h

;установка текстового видеорежима 80 на 25 и чистим экран
set_video    proc
push    cx
mov    ah,0
mov    al,3
int    10h
pop    cx
ret
set_video    endp


;Установка видеостраницы
set_page_0    proc
push    cx
mov    ah,5
mov    al,0
int    10h
pop    cx
ret
set_page_0    endp

set_page_1    proc
push    cx
mov    ah,5
mov    al,1
int    10h
pop    cx
ret
set_page_1    endp

;вывод рожицы
rogica_0    proc
push    cx
mov    ax,0b800h
mov    es,ax
mov    di,0
mov    ah,31
mov    al,1

mov    cx,10
Next_face:
mov    es:[di],ax
add    di,2
loop    Next_face
pop    cx
ret
rogica_0    endp

;вывод рожицы
rogica_1    proc
push    cx
mov    ax,0b800h
mov    es,ax
mov    di,4096
mov    ah,31
mov    al,1

mov    cx,50
Next_face:
mov    es:[di],ax
add    di,2
loop    Next_face
pop    cx
ret
rogica_1    endp

;Установка положения курсора
cursor_page0    proc
mov    ah,02h
mov    bh,0
mov    dh,24d
mov    dl,79d
int    10h    
ret
cursor_page0    endp

;Установка положения курсора
cursor_page1    proc
mov    ah,02h
mov    bh,1
mov    dh,1d
mov    dl,0d
int    10h
ret
cursor_page1    endp


CSEG ends
end Start[/ASM]

Автор: ФедосеевПавел 14.1.2015, 17:46
Формально всё правильно. Может быть ошибки эмулятора DOS.
Если так уж надо - попробуй загрузиться в чистом DOS и там посмотреть.

Автор: GQU 14.1.2015, 20:01
Цитата

Если так уж надо - попробуй загрузиться в чистом DOS и там посмотреть. 

у меня есть в virtualPC DOS, а как туда файлы то закинуть не подскажите?

Автор: ФедосеевПавел 14.1.2015, 20:30
Когда-то у меня был VirtualBox с FreeDOS. Там я делал обмен через виртуальную дискету - драйвер виртуальной дискеты в Windows (он работал с образом - файлом на диске), а виртуальная машина, думая, что это диск A:, могла подключиться. В VirtualBox для меня были проблемы - странно работали курсорные клавиши.
Сейчас не могу найти название и ссылку на официально бесплатный драйвер виртуальной дискеты, который я запускал на Win7x64 (тот, который работает с WinXP находится легко и мне он нравился больше, но под Win7x64 - увы).
На хабрахабре мне попадалась статья о передаче PC->VM через клавиатурные драйвера, но это изврат.

Автор: Dremuk 15.1.2015, 11:02
Там можно подключить общую папку. В окне запущенной ОС внизу есть желтый значок папки. Правой кнонкой на нем и добавьт общую папку, расположенную на основной ОС.
Ей присвоится буква дополнительного диска, который появится в списвке дисков (C, D, ...)

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/ne-ukhodit-kursor-v-konets-ekrana-id54b65773ae2015b5578b4567#findElement_E7045_54b773faae20158266404ff1_0

Автор: ФедосеевПавел 15.1.2015, 17:19
В VirtualBox общие папки доступны для любой ОС, но только не для DOS.
В DOS можно настроить сеть и по сети работать с внешним миром, но тут я некомпетентен.
Для разового выполнения лабораторных работ, полагаю, подойдёт и виртуальный флопик. Если у топикстартера есть время и желание - яндекс в помощь.

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