我试图为学校解决这个项目,当我使用编译器时,最终结果是一些图释而不是数字总和
我重写了整个代码,但是得到了相同的结果
.model small
.stack 100h
.data
nstr db 6 dup(' ')
idv dw 10
a dw 2
b dw 9
c dw 6
x dw ? ;x=a+b+c
d dw 7
e dw 5
y dw ? ;y=d+e
z dw ? ;z=x+y
.code
.start
mov ds, ax
; x = a+b+c
mov ax, a
add ax, b
add ax, c
mov x, ax
; y = d+e
mov ax, d
add ax, e
mov y, ax
; z = x+y
mov ax, x
add ax, y
mov z , ax
mov si,5
mov nstr[si], '$'
dec si
mov ax, z
mov dx,0
loop1: ;
div idv
;
add dl, '0'
mov nstr[si],dl
dec si
mov dx,0
cmp ax,0
jne loop1
listn:
mov ah, 09h
mov dx, offset nstr ;
int 21h
stopprg:
mov ah, 4ch
int 21h
end
答案 0 :(得分:5)
.start
指令将生成代码,该代码将初始化所选模型的段(在本例中为small
)。您用mov ds, ax
用 AX 中的任何内容覆盖 DS 。这会将数据段指向内存中不包含数据的位置(例如nstr
,idv
,a
... z
等),从而产生错误的结果。要解决此问题,只需删除以下行:
mov ds, ax