Assembly programming : NASM VS MASM-code
Ich bin gerade angefangen zu lernen, Assembly programming. So weit ich weiß, NASM ist der beste assembler für linux. Und die 32-bit-assembler.
Auf der anderen Seite, MASM ist eine DOS-assembler und 16-bit.
Nun möchte ich wissen, wie Hafen, von 16-bit-x86-DOS-Assembler-code auf 32-bit-x86-Linux-Assembler-code oder 32-bit-x86-Windows assembly-code
Vielen Dank im Voraus.
- NASM ist nicht "32-bit": "Kapitel 8: Schreiben von 16-bit-Code (DOS, Windows 3/3.1). Auch MASM ist nicht "16-bit": "Beginnend mit MASM 8.0 gibt es zwei Versionen von der assembler - eine für 16-bit und 32-bit-assembly Quellen" wikipedia
- Ihre Frage ist unklar. Ob der code ist 16-bit/32-bit/64-bit-Version ist nur eine Sache, die Auswirkungen auf die Portierung, die andere ist die OS. Meinst du, wie Hafen, von 16-bit-x86 - DOS Assembler-code auf 32-bit-x86 - Linux Assembler-code oder 32-bit-x86 - Windows Assembler-code oder etwas anderes? Bitte geben Sie.
- Ja, ich möchte wissen, ow zu Hafen, von 16-bit-x86-DOS-Assembler-code auf 32-bit-x86-Linux-Assembler-code oder 32-bit-x86-Windows assembly-code.
- Verwandte: Unterschiede zwischen NASM, MASM, emu8086, und anderen Aromen der Intel-syntax.
Du musst angemeldet sein, um einen Kommentar abzugeben.
MASM ist nicht nur 16 bit. Sie können auch 32-bit-assember MASM:
http://masm32.com/
DOS-Montage-und Linux-Montage sind ganz anders. Es gibt keinen automatischen Weg zum Hafen. Sie schreiben, separaten code für jede da die Montage ist sehr nahe an das Metall.
NASM verarbeiten kann x86-von 8-bit zu 64-bit, machen Sie sich keine sorgen. NASM ist eine gute all-around assembler.
Beide verwenden Intel-style Assembler-code, was ist schöner in meiner Meinung nach, als AT&T Stil Assembler-code, sollten Sie das gut machen.
Sind Sie in Assembler, so lange wie Sie verstehen, die interrupts, die Sie rufen, werden Sie akzeptieren, Ihr code, schalten Sie es in binäre, und sendet es fröhlich weiter ausgeführt werden.
Oh ja, erzeugen Sie eine dos-executable-Platz ORG 100h oben den Eintrag Punkt, den Sie möchten, und das ist der Grund, warum dos war gut für Assembler-Programmierer.
Edit: Das war nur einer der Gründe, die anderen waren, die dos war stark interrupt-basiert, so dass Sie wissen, wo die Argumente gehen und was Sie sind erlaubt für relativ einfache system fordert.
PE-format ist das, was Sie wollen, zu suchen, ich denke, es ist ein bisschen mehr manuelle Beinarbeit zu tun, NASM, damit es richtig funktioniert auf windows...
int 0x80
. (Aber den Aufruf in der userspace-Seite dersysenter
code in dervdso
ist schneller). Alle Register bleiben erhalten, außer eax (return-Wert). Das ABI ist nur als "interrupt-basiert" wie DOS, wenn es das ist was du meinst. 64bit ist auch ähnlich: verwenden Siesyscall
, die bewahrt alle Register bisrcx
undr11
, und der Rückgabewert. Windows-code OTOH, sollten Sie nicht verwenden die kernel-system-Aufrufe direkt auf, sondern verwenden Sie die win32-API durch die Funktion Aufrufe in DLLs. Also ja, sind Sie stecken mit dem Aufruf der Funktion ABI.