6
votes

Quel est le problème avec ce programme de montage?

Je suis très nouveau pour assembler la programmation linguistique, il s'agit probablement d'une erreur très évidente, mais ...

J'utilise MSVC ++, et lorsque je compilise un projet avec une extension .asm, il utilise la règle xxx

et juste pour vous assurer que le compilateur fonctionne, j'ai essayé le code xxx

mais quand je l'ai compilé , Je reçois trois erreurs xxx

donc je me demande simplement, y a-t-il une erreur évidente dans une partie du code, ou est-ce le compilateur qui est en train de gâcher?


0 commentaires

6 Réponses :


0
votes

Vous devez utiliser l'instruction segment . Essayez code segment en haut.


1 commentaires

Ne fonctionne pas si j'ajoute "code de segment" sur la ligne juste avant le premier.



4
votes

Essayez ceci:

.model small
.stack
.data
message   db "Hello world!", "$"

.code

main   proc
   mov   ax,seg message
   mov   ds,ax

   mov   ah,09
   lea   dx,message
   int   21h

   mov   ax,4c00h
   int   21h
main   endp
end main


1 commentaires

Je reçois différentes erreurs, une ligne 7 à propos de "conflit de type symbole" et d'une ligne 15 sur un commutateur "\ Coff" et un soulignement de premier plan.



2
votes

J'augs que le code a besoin de directives, essayez ceci: xxx

ici, .Model dit que nous allons utiliser un "petit" modèle de programme mémoire et .Code dit que le Les lignes suivantes sont du code exécutable.

EDIT: OK, il y a un autre exemple que tha devrait courir ok. xxx

(je l'ai pris de ici )


2 commentaires

Je reçois un avertissement sur un \ Coff Interrupteur et un soulignement principal, alors il a une erreur d'exécution.


Pourriez-vous élaborer sur la construction avec making.bay? Où exactement le menu du projet est-ce?



2
votes

Vous n'avez pas de directive ".code" avant que le code puisse faire savoir que cela est censé être dans le segment de code. En plus de cela, vous ne revenez de quelque manière que ce soit du code, la CPU tente donc de s'exécuter tous les octets suivant comme s'il s'agissait de code exécutable. Pas étonnant que cela se bloque après avoir couru.


0 commentaires

0
votes

Cela semble fonctionner pour moi en utilisant les lignes ML et Link suivantes
ML / COFF / C TEST.ASM
Lien / Subsystème: Console Test.Obj

TITLE Test app
.386
.MODEL flat, stdcall
.STACK 4096
; --------------------
.code
main PROC
ret
main ENDP
; --------------------
END main


0 commentaires

2
votes

à partir d'une navigation rapide, il semble que l'assemblage sous vs.net soit suffisamment rare que vous devez configurer des règles de construction personnalisées. Vous pouvez trouver un exemple ici: http://www.cs.virginia.edu/~evans/cs216/guides/vsasme.html < / a>

Par curiosité, qu'essayez-vous d'accomplir? Si vous faites cela pour le plaisir ou pour apprendre la langue de montage, vous serez probablement mieux en train d'utiliser un éditeur de montage dédié. Le MASM32 SDK est une telle option. Vous pouvez ensuite créer un lien vers les bibliothèques que vous créez à partir du projet Visual Studio.

Si vous envisagez d'utiliser de petits segments d'assemblage dans des morceaux critiques d'un projet C / C ++, je vous conseillerais de jeter un bon coup d'œil au compilateur intrinsèque ( http://msdn.microsoft.com/en-us/library/26td21ds.aspx ) avant de décider d'utiliser des fichiers d'assemblage entièrement codés à la main.


0 commentaires