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?
'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
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
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' –