我写了一个简单的汇编代码,总结了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具有相同的值。为什么呢?
答案 0 :(得分:5)
emu8086不喜欢数据段内的ORG 100H
。删除它。
要强制.exe
程序,请在源代码顶部添加“#MAKE_EXE#”。