Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   управление видеосистемой в текстовом режиме (https://forum.antichat.xyz/showthread.php?t=144981)

NorB 01.10.2009 19:19

управление видеосистемой в текстовом режиме
 
Есть задание :
Вывод символа с клавиатуры на позицию экрана, указанную курсором, с модификацией положения курсора.

Есть код:
Код:

.model small 
.stack 100h     
.data
 x db 30
 y db 10 ;начальные координаты курсора
.code
.startup 
;очистка экрана
    mov ax, 0B800h;номер сегмента видеобуфера в АХ
    mov es, ax ;ассоциируем видеобуфер с EХ
    mov al, " ";символ
    mov ah, 00000111B;атрибут - белое на черном
    mov cx, 2000
    xor bx, bx ;ВХ=0 (указатель на символ)
;m:
 mov es:[bx], ax ;запись в видеобуфер символа и атрибута 
 add bx,2 ;увеличиваем указатель на следующий символ
 loop m      ;цикл очистки видеобуфера     


;вычисление абсолютного номера позиции курсора
  mov al, 80
  mov bl, y
  mul bl     
  xor bx, bx
  mov bl, x
  add ax, bx ;AX=80*y+x
  mov bx, ax      ;адрес курсора в BX                   
  push bx
  add bx, bx ;bx=bx*2 
  mov cx, bx    ;адрес символа в СХ   
  pop bx
 
again:      ;начало ввода символов
 
 ;запись позиции курсора в КЭЛТ
  mov al, 0eh 
  mov dx, 3d4h
  out dx,al ;выбрали 14 регистр КЭЛТ
  mov dx, 3d5h
  mov al, bh
  out dx, al ;записали в него старший байт адреса курсора
  mov al, 0fh
  mov dx, 3d4h
  out dx,al    ;выбрали 15 регистр КЭЛТ
  mov dx, 3d5h   
  mov al, bl 
  out dx, al  ;записали в него младший байт адреса курсора   
 
  ;запись позиции курсора в буфер BIOS
  mov ax, 40h
  mov es, ax ;es указывает на область данных BIOS
  mov ah, y
  mov al, x
  mov es:50h, ax ;запись положения курсора в буфер курсора BIOS           
 
 
 
  mov ax, 0B800h;номер сегмента видеобуфера в АХ
  mov es, ax ;ассоциируем видеобуфер с EХ           
  mov ah, 08h
  int 21h;ввод символа без эха        (в AL - код символа)             
  cmp al, 1Bh    ;не нажат ли ESC
  je go   
  cmp al, 20h
  jl again ;фильтруем небуквенные символы
  mov ah, 00000111B;атрибут - белое на черном                       
  push bx 
  mov bx, cx 
  mov es:[bx], ax  ;вывод символа                 
  pop bx
  add  cx, 2    ;смещаем на следующий символ указатель на символ в видеопамяти
  inc bx        ;увеличиваем номер позиции курсора
 
  jmp again;бесконечный цикл с выходом по ESC
           
 go:   
.exit 0
end

Че с ним нетак?=( я его транслирую линкую и программа просто висит а не работает:(

NorB 01.10.2009 19:40

Пасиба. Былбы благодарен есип дали ссылку де все прерывания описаны ато гугл кумарит =\\\

CroCop 01.10.2009 19:44

у меня есть справочник,могу кинуть на мыло.

CroCop 01.10.2009 19:46

http://rapidshare.com/files/287394041/______________________.rar.html

или так.

NorB 01.10.2009 19:47

благодарю

CroCop удалил пост но он помог установкой видеорежима:

mov ax,0003
int 10h

ето наслучай если кому нада будет:)


Время: 05:41