我尝试运行这个,但我不知道错误在哪里。
include "emu8086.inc"
ORG 100
.data
ARRAY DB 12H, 24H, 26H, 63H, 25H, 86H, 2FH, 33H, 10H, 35H
SUM DW 0
.code
START: MOV AX, @DATA
MOV DS, AX
MOV CL, 10
XOR DI, DI
MOV BX, OFFSET ARRAY
BACK: MOV AL, [BX+DI]
MOV AH, 00H
MOV SUM, AX
INC DI
DEC CL
JNZ BACK
; print out the number in ax
CALL print_num ; using procedure
RET
END
ORG 100
如果您要创建 .COM 程序,则此
ORG
指令的正确值是 256,或者以十六进制表示时为 100h。您忘记了 h 后缀!
此外,.COM 程序格式非常简单,您不需要以下任何内容:
.data
、.code
、MOV AX, @DATA
和 MOV DS, AX
。但是,您应该将代码放在数据之前(就像我在下面的程序中所做的那样),这样数据就不会被错误地视为可执行代码。
MOV SUM, AX
任务是得到“和”。您需要在这一行使用
add
指令。
CALL print_num
在使用 emu8086.inc 中的 print_num 过程之前,您需要使用
DEFINE_PRINT_NUM
和 DEFINE_PRINT_NUM_UNS
来声明它。
include 'emu8086.inc'
ORG 100h
; code
MOV CL, 10
XOR DI, DI
MOV BX, OFFSET ARRAY
BACK:
MOV AL, [BX+DI]
MOV AH, 0
ADD SUM, AX
INC DI
DEC CL
JNZ BACK
CALL print_num
RET ; End of the .COM program (*)
; data
ARRAY DB 12h, 24h, 26h, 63h, 25h, 86h, 2Fh, 33h, 10h, 35h
SUM DW 0
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
END
(*) 在适当的条件下,仅用
ret
指令就可以结束 DOS 程序。情况就是如此,但一般来说,最好使用以下指令结束 DOS 程序:
mov ax, 4C00h ; DOS.TerminateWithReturncode
int 21h