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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by NorB, 1 Oct 2009.

  1. NorB

    NorB Elder - Старейшина

    Joined:
    20 Jul 2007
    Messages:
    109
    Likes Received:
    12
    Reputations:
    -2
    Есть задание :
    Вывод символа с клавиатуры на позицию экрана, указанную курсором, с модификацией положения курсора.

    Есть код:
    Code:
    .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
    
    
    Че с ним нетак?=( я его транслирую линкую и программа просто висит а не работает:(
     
  2. NorB

    NorB Elder - Старейшина

    Joined:
    20 Jul 2007
    Messages:
    109
    Likes Received:
    12
    Reputations:
    -2
    Пасиба. Былбы благодарен есип дали ссылку де все прерывания описаны ато гугл кумарит =\\\
     
  3. CroCop

    CroCop New Member

    Joined:
    27 Sep 2009
    Messages:
    25
    Likes Received:
    4
    Reputations:
    0
    у меня есть справочник,могу кинуть на мыло.
     
    1 person likes this.
  4. CroCop

    CroCop New Member

    Joined:
    27 Sep 2009
    Messages:
    25
    Likes Received:
    4
    Reputations:
    0
    http://rapidshare.com/files/287394041/______________________.rar.html

    или так.
     
  5. NorB

    NorB Elder - Старейшина

    Joined:
    20 Jul 2007
    Messages:
    109
    Likes Received:
    12
    Reputations:
    -2
    благодарю

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

    mov ax,0003
    int 10h

    ето наслучай если кому нада будет:)
     
    #5 NorB, 1 Oct 2009
    Last edited: 1 Oct 2009