emu8086错误地使用com文件

时间:2015-10-09 18:34:19

标签: assembly emu8086

我写了一个简单的汇编代码,总结了4个单词

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

使用emu8086,我模拟了该代码。但是,正如您在下面的屏幕截图中看到的那样,寄存器无法获得正确的值。

重要的问题是,为什么程序名称为.com。我没有说明这一点。 CX的值不正确。 CS和DS具有相同的值。为什么呢?

enter image description here

1 个答案:

答案 0 :(得分:5)

emu8086不喜欢数据段内的ORG 100H。删除它。

要强制.exe程序,请在源代码顶部添加“#MAKE_EXE#”。