2015-10-09 1 views
4

j'ai écrit un simple code d'assemblage qui résume 4 motsEMU8086 utiliser à tort fichier com

STSEG   SEGMENT 
       DB  32 DUP (?) 
STSEG   ENDS 

DTSEG   SEGMENT 
DATA_IN  DW  234DH,1DE6H,3BC7H,566AH 
       ORG  100H 
SUM   DW  ? 
DTSEG   ENDS 


CDSEG   SEGMENT 
MAIN   PROC FAR 
       ASSUME CS:CDSEG,SS:STSEG,DS:DTSEG 
       MOV  AX,DTSEG 
       MOV  DS,AX ; load data segment to DS 

       MOV  CX,04 ; set counter to 4 
       MOV  DI,OFFSET DATA_IN 
       MOV  BX,00 ; this is the sum initialized to 0 
ADD_LP:  ADD  BX,[DI] 
       INC  DI 
       INC  DI  ; two INC because we are using words 
       DEC  CX 
       JNZ  ADD_LP 
       MOV  SI,OFFSET SUM ; since org is 100h, SI will be 100H 
       MOV  [SI],BX ; write the value of sum in that location 
       MOV  AH,4CH ; return to DOS 
       INT  21H 
MAIN   ENDP 
CDSEG   ENDS 
       END  MAIN 

Utilisation du emu8086, j'émulé code. Cependant, comme vous pouvez le voir dans la capture d'écran ci-dessous, les registres n'obtiennent pas les valeurs correctes.

La question importante est, pourquoi le nom du programme a .com. Je n'ai pas précisé ça. La valeur de CX est incorrecte. CS et DS ont les mêmes valeurs. Pourquoi?

enter image description here

+0

'pourquoi le nom du programme a .com. Je n'ai pas précisé ça. '- vous avez certainement, quand vous avez créé le projet. [Selon google] (http://3.bp.blogspot.com/-0QJ_Iqt-BZ0/T1DDXthv46I/AAAAAAAABNY/XoXk2uXtdZE/s1600/2.png), vous devez alors choisir un template. – Jester

+0

Pour être sûr, j'ai écrit ce code dans un simple fichier texte en utilisant notepad ++. Ensuite, j'ai ouvert cela dans emu8086 – mahmood

+2

Il a fait cela parce que vous avez 'ORG 100H' dans votre fichier. Il a été décidé que vous aviez l'intention d'écrire un programme 'COM'. Essayez de supprimer cela et il devrait générer 'EXE' –

Répondre

5

EMU8086 fait pas comme cela ORG 100H à l'intérieur du segment de données. Supprime-le.

Pour forcer un programme .exe, ajoutez un "# # MAKE_EXE" en haut de la source.

+0

OK. Tu as raison. J'ai reçu une réputation négative alors? – mahmood

+1

@mahmood: Pas de moi. Il y a des gars ici qui sont rapides avec des votes serrés. – rkhb

+0

J'ai mis la question en suspens, c'était MCVE, problème clair défini, et j'ai eu une réponse spécifique. Je n'ai pas vu cela précédemment demandé sur SO non plus. –