Je voulais écrire quelque chose de base en assemblée sous Windows, je me sers de MSNA, mais je ne peux pas obtenir quoi que ce soit en travaillant.
Comment écrire et compiler Bonjour tout le monde sans l’aide de C fonctionne sur Windows ?
Je voulais écrire quelque chose de base en assemblée sous Windows, je me sers de MSNA, mais je ne peux pas obtenir quoi que ce soit en travaillant.
Comment écrire et compiler Bonjour tout le monde sans l’aide de C fonctionne sur Windows ?
; ----------------------------------------------------------------------------
; helloworld.asm
;
; This is a Win32 console program that writes "Hello, World" on one line and
; then exits. It needs to be linked with a C library.
; ----------------------------------------------------------------------------
global _main
extern _printf
section .text
_main:
push message
call _printf
add esp, 4
ret
message:
db 'Hello, World', 10, 0
Ensuite, exécutez
nasm -fwin32 helloworld.asm
gcc helloworld.obj
a
Il y a aussi Le Désemparés Débutants Guide de Bonjour tout le Monde dans Msna sans l'utilisation d'une bibliothèque C de. Ensuite, le code devrait ressembler à ceci.
org 100h
mov dx,msg
mov ah,9
int 21h
mov ah,4Ch
int 21h
msg db 'Hello, World!',0Dh,0Ah,'$'
Bonne chance.
Voici les exemples Win32 et Win64 utilisant des appels API Windows. Ils sont pour MASM plutôt que NASM, mais jetez un oeil sur eux. Vous trouverez plus de détails dans cet article.
Pour assembler et relier à l’aide de MASM, utilisez ceci pour exécutable 32 bits :
ou ceci pour 64-bit exécutable :
Plat Assembleur n'a pas besoin d'un supplément de l'éditeur de liens. Cela rend la programmation assembleur assez facile. Il est aussi disponible pour Linux.
C'est - hello.asm
de la Fasm exemples:
include 'win32ax.inc'
.code
start:
invoke MessageBox,HWND_DESKTOP,"Hi! I'm the example program!",invoke GetCommandLine,MB_OK
invoke ExitProcess,0
.end start
Fasm crée un exécutable:
>fasm bonjour.asm plat assembleur version 1.70.03 (1048575 kilo-octets de mémoire) 4 passes, de 1536 octets.
Et c'est le programme de l'IDA:
Vous pouvez voir les trois appels: GetCommandLine
, MessageBox
et ExitProcess
.
Sauf si vous appelez quelque fonction que ce n'est pas du tout triviale. (Et, sérieusement, il n'y a pas de véritable différence de complexité entre l'appel de printf et l'appel d'une fonction api win32.)
Même de DOS int 21h est vraiment juste un appel de fonction, même si ses une API différente.
Si vous voulez le faire sans aide, vous devez parler à votre matériel vidéo directement, probablement écrit bitmaps des lettres de "Hello world" dans un framebuffer. Même alors, la carte vidéo est en train de faire le travail de traduire ces valeurs en mémoire en VGA/DVI signaux.
Notez que, vraiment, aucun de ces trucs tout le chemin vers le matériel est plus intéressant en ASM que dans C. Un programme "hello world" se résume à un appel de fonction. Une bonne chose à propos de l'ASM, c'est que vous pouvez utiliser n'importe quel ABI vous voulez assez facile, vous avez juste besoin de savoir ce que l'ABI est.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.