2012-05-14 3 views
1

그냥 내 게시물에 관해서, 대안 궁금 내장 매크로, 그것은 INT의 21H 윈도우 API를 사용하여 STDOUT 매크로를 사용하여 방지 할 수있다? 예를 들면 :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를 사용하여 같이) 존재 하는가, 또는 같은 무언가가 존재하지만, 정확히 21 H를 int로하지. 또는 나는 완전히 틀리다.

누군가 나를 위해 이것을 명확히 할 수 있습니까?

감사합니다,

Progrmr

+0

21H ... 어이 사람들은, 그것은 [1] 이미 [1] 사용할 수있는 [비슷한 질문]처럼 보이는 눈을 –

+0

... 건조 말하지 않는다 /stackoverflow.com/questions/1245809/what-is-int-21h – mox

답변

1

Windows에서는 보호 모드에서 인터럽트를 사용할 수 없습니다. WriteFile api를 사용하여 콘솔에 쓸 수도 있고 대신 MASM 매크로를 사용할 수도 있습니다. HTTP :/

+0

리얼 모드를 원하셨습니까? –

+0

예, 리얼 모드입니다. – blez

+1

당신은 보호 모드 (전체 OS가 실행되는)의 하위 모드 인 가상 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

관련 문제