2014-04-09 4 views
4

간단한 16 비트 리얼 모드 운영 체제에서 화면을 지우려고합니다. 아래 코드는 다음과 같습니다16 비트 리얼 모드에서 전체 화면을 지울 수 없습니다. 어셈블리

clearScreen: 
    pusha 

    mov ah, 0x7 
    mov al, 0 
    int 0x10 

    popa 
    ret 

나는 0-al를 설정하고 화면을 청소 것이다 스크롤 화면 인터럽트를 호출하지만 단지 회색으로 첫 번째 줄의 색상을 변경하는 것 같다 읽어 보시기 바랍니다.

왜 이것이 작동하지 않는지 설명 할 수있는 사람 덕분입니다.

답변

7

int 0x10 함수 0x07은 주어진 것보다 많은 매개 변수를 사용합니다. 구체적

  • AH = 07 = 스크롤 창 아래
  • 는 AL은 = 라인 수는 (모두 0)
  • BH = 속성은 공백 라인에 대한 쓰기
  • CH, CL = 로우 스크롤 창 왼쪽 상단
  • DH, DL = 행에서이 될 일이 무엇이든 오른쪽 창에 당신이 그들을 설정하지 않는 한

, 그들은 단지 포함 할 것이다 코너의 열의 열 이전 지침, 이는 당신이 원하는 것일 확률이 매우 낮습니다!

그래서 당신은 표준의 80x25 문자 화면을 사용하고 있다고 가정

은, 코드 대신에 다음과 같이 기록한다 :

clearScreen: 
    pusha 

    mov ax, 0x0700 ; function 07, AL=0 means scroll whole window 
    mov bh, 0x07 ; character attribute = white on black 
    mov cx, 0x0000 ; row = 0, col = 0 
    mov dx, 0x184f ; row = 24 (0x18), col = 79 (0x4f) 
    int 0x10  ; call BIOS video interrupt 

    popa 
    ret 

은 자세한 내용은 유명한 랄프 브라운 interrupt list이 버전을 참조하십시오.

관련 문제