2014-01-30 57 views
1

我對組裝非常陌生,而且我很難理解光標位置是如何在模式13h中進行的。例如,(0,0)在屏幕中間結束。我無法理解如何讓它成爲我想要的地方。程序集x86圖形模式13h光標位置

我使用的代碼:

mov al, 13h 
mov ah, 0h 
int 10h 
mov ax, dseg 
mov ds, ax 

mov dl, 0 ;row 
mov dh, 0 ;col 
mov bx, 0 
mov ah, 2h 
int 10h 
mov dx, offset string 
mov ah, 9h  
int 21h 

mov al, 3h 
mov ah, 0h 
int 10h 
int 3h 

我希望得到任何幫助。

+1

1988年正在調用,他們希望他們的代碼回來。 :-) –

+0

是啊..這是學校,我找不到任何關於它的解釋 –

+0

模式13h位置0,0是左上角。我沒有我的參考資料,但是我不知道爲什麼最終會在屏幕中間出現一個光標。 –

回答

2

哦,我知道那痛苦。

首先根據Wikipediathis site中斷int 10h代碼爲AH=2h,DL代表列,DH代表行。 又爲什麼int 3在最後?

無論如何,這段代碼適用於我 - 在pos 2,3處打印字符串。用tasm編譯,在dosbox下運行。

; AH=0h: Set video mode 
mov al, 13h ; Video mode number 
mov ah, 0h 
int 10h 

; AH=2h: Set cursor position 
mov dl, 2 ; Column 
mov dh, 3 ; Row 
mov bx, 0 ; Page number, 0 for graphics modes 
mov ah, 2h 
int 10h 

; AH=9h: Print string 
mov dx, offset string 
mov ah, 9h 
int 21h 

; Wait for keypress 
mov ah, 08h 
int 21h 

; AH=0h: Set video mode 
mov al, 3h ; Video mode number 
mov ah, 0h 
int 10h 

; Exit 
mov ah, 4ch 
mov al, 0 
int 21h 

還有一個建議:寫儘可能多的評論,你可以;他們從來沒有太多的彙編;)

+0

謝謝!它工作完美。非常感謝你 –

+0

寫得很好。此代碼中的字體大小也發生了變化。如果我們想保持相同的字體,在第二行< mov al, 3 >。 –

+0

相同的代碼用'masm'編寫(當然,還有頭文件)。我已經在dosbox下測試過了。 –