2012-05-14 43 views
1

只是想知道,在關於我的帖子替代內置宏,是有可能避免使用的StdOut宏觀使用INT 21H窗口API?如:x86程序集(masm32) - 我可以在Windows XP上使用int 21h來打印東西嗎?

.data 
     msg dd 'This will be displayed' 
;original macro usage: 
invoke StdOut, addr msg 
;what I want to know will work 
push msg 
int 21h ; If this does what I think it does, it should print msg 

難道這樣的事情存在(如在使用INT 21H打印的東西),或不類似的東西存在,但不完全詮釋21H。或者我完全錯了。

有人能爲我澄清這一點嗎?

感謝,

Progrmr

+0

21H ...哎人,別告訴我你的眼睛是幹... –

+0

它看起來像一個[類似的問題] [1]已經可以 [1]:HTTP:/ /stackoverflow.com/questions/1245809/what-is-int-21h – mox

回答

1

中斷無法在Windows上的受保護模式下使用。 您可以使用WriteFile api寫入控制檯,或使用MASM宏代替。

+0

您是不是指真實模式? –

+0

是的,實模式。 – blez

+1

您的意思是virtual-8086模式,它是保護模式的子模式(無論如何,整個操作系統都運行在該模式下)。此外,virtual-8086不再可用於64位模式。 –

8

中斷21H是爲MS-DOS功能的入口點。

例如打印在標準輸出上你有什麼要:

mov ah, 09h ; Required ms-dos function 
mov dx, msg ; Address of the text to print 
int 21h  ; Call the MS-DOS API entry-point 

的字符串必須用「$」字符被終止。

但是:

  • 不能使用在Windows桌面應用程序的中斷(他們只是設備驅動程序可用)。
  • 如果您需要調用MS-DOS函數,則必須編寫一個16位應用程序。

然後...是的,你不能用它來打印消息,沒有這樣的東西存在:你必須調用OS函數來打印你的消息,並且它們不能通過中斷獲得。

+0

好的謝謝澄清。 – Progrmr

相關問題