2016-08-03 16 views
0

저는 16 비트 어셈블리를 사용하여 VGA 프로그래밍 방법에 대한 교육용 DOS 프로그램을 만들고, 일부 픽셀에 색상을 쓰는 코드를 작성하여 코드를 인쇄합니다. 픽셀의 색상을 변경하여 좋은 사라,하지만 난 문자열을 인쇄하려고하면, 그것은 그들의 내가 MASM 5.00 및 링크 3.60 사용하고 도스 박스내 코드가 원하는 텍스트 대신 가비지를 출력합니다.

에서 실행이 내 코드

이다있어 할당한다, 이상한 문자를 인쇄
org 100h 
.model small 
.stack 100h 
.data 
msg   db  'Hello VGA','$' 
.code 
main proc 
mov ax, 0         
mov al, 013h        
int 10h 

mov ah, 02h         ;function code for setting cursor pos. 
mov bh, 0         ;setting page number 
mov dx, 0         ;setting dh, dl to row and column 
int 10h 

mov ah, 0ch         
mov al, 00001110b      
mov cx, -1 

ploop: 
inc cx           ;x point pos. 
mov dx, 0         ;y point pos. 
int 10h 
cmp cx, 9919 
jne ploop 
;keyboard services 

mov ah, 00h         ;read key function code 
int 16h    

;set cursor position 
mov ah, 02h 
mov bh, 0          ;Display page 
mov dh, 04h         ;Row 
mov dl, 00h         ;Column 
int 10h 

;print msg 
mov ah, 09h 
lea dx, msg 
int 21h 
mov ax, 4c00h 
int 21h 
main endp 
     end main 
+5

방금 ​​코드를 실행했는데 잘되었습니다. 데이터 세그먼트를 수동으로 초기화 해보고'.code' 다음에 두 줄을 삽입하십시오 :'mov ax, @ data mov ds, ax'. –

+0

@ JoseManuelAbarcaRodríguez 전 완전히 데이터 세그먼트를 초기화하는 것을 잊었습니다. 예고편 덕분에 오류가 발생했습니다. – Kordy

+1

"잘 모르겠다"추측 : 그래픽 모드에서 DOS 21h를 사용하고 있습니다. gfx 모드에서 문자를 출력하는 데 문제가있을 수 있습니다. ? int 10h 아, 9로 char을 출력 할 수 있습니까? 아마도 똑같은 결과를 낳을 것입니다. (나는 21h가 어쨌든 10h라고 부르는 것 같아 기적을 기대하지 않는다.) BTW'mov ax, 0'' mov al, 013h' = 이것이'mov ax, 13h'로 할 수 있다는 것을 알고 있습니까? 그렇지 않다면 '도끼'와 '알'을 다시 읽으십시오. (편집 : 오, 그'ds는 매우 문제가 가능성이 높습니다). – Ped7g

답변

1

방금 ​​코드를 실행했는데 잘되었습니다. 데이터 세그먼트를 수동으로 초기화하고 .code의 바로 뒤에 다음 두 줄을 삽입하십시오.

.code 
    mov ax, @data 
    mov ds, ax 
    . 
    . 
    . 
+0

누군가 내 의견을 답으로 더 좋게 제안했습니다. –