2016-07-08 20 views
2

Ich starte NASM Assembler nach FASM beenden. Ich kodiere dies in einem Windows-Betriebssystem. Mein Code lautet:NASM tutorial verwendet Int 80h, aber dies funktioniert nicht auf Windows

section.data ;Constant 
      msg: db "Hello World!" 
      msg_L: equ $-msg ; Current - msg1 

section.bss ;Varialble 

section.text ; Code 
     global [email protected] 

[email protected]: 
     mov eax,4 
     mov ebx,1; Where to wrte it out. Terminal 
     mov ecx, msg 
     mov edx, msg_L 
     int 80h 

     mov eax, 1 ; EXIT COMMAND 
     mov ebx,0 ; No Eror 
     int 80h 

es kompilieren und ausführen ich benutze:

nasm -f win32 test.asm -o test.o 
ld test.o -o test.exe 

ich zur Zeit dieses Video auf Tutorials auf NASM folgenden bin. Ich habe den Start in WIN32 geändert, aber wenn ich es ausführe, bleibt es hängen und läuft nicht ... Irgendwelche Probleme damit?

Antwort

9

Sie versuchen, einen Linux-Systemanruf (int 80h) unter dem Windows-Betriebssystem auszuführen.

Dies wird nicht funktionieren. Sie müssen Windows-API-Funktionen aufrufen. Beispiel: MessageBox zeigt ein Meldungsfeld auf dem Bildschirm an.

section.data ;Constant 
      msg: db "Hello World!" 
      msg_L: equ $-msg ; Current - msg1 

section.bss ;Varialble 

section.text ; Code 
     global [email protected] 
     extern [email protected] 

[email protected]: 
     ; Display a message box 
     push 40h ; information icon 
     push 0 
     push msg 
     push 0 
     call [email protected] 

     ; End the program 
     xor eax, eax 
     ret 

Stellen Sie sicher, dass das Buch/tutorial Sie ist über Windows- Programmierung mit NASM lesen, nicht Linux-Programmierung!

+0

Eine Frage. Kann ich es auf meiner Linux-VM kompilieren und dann die .o-Datei an Windows senden und gut funktionieren? – amanuel2

+1

Nein. Sie können es auf Ihrer Linux-VM kompilieren und * auf der Linux-VM ausführen *. Sie können es jedoch nicht unter Windows ausführen, da unter Windows keine Linux-Systemaufrufe ausgeführt werden. @dsafds –

+0

Warum kann ich es nicht in meiner Linux VM kompilieren? Es funktioniert für ihn: https: //www.youtube.com/watch? V = uca_zY8ZNpA (Ubuntu BTW) – amanuel2