为什么我得到另一个结果?

时间:2019-07-01 17:59:04

标签: assembly dos x86-16

我试图为学校解决这个项目,当我使用编译器时,最终结果是一些图释而不是数字总和

我重写了整个代码,但是得到了相同的结果

.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

1 个答案:

答案 0 :(得分:5)

.start指令将生成代码,该代码将初始化所选模型的段(在本例中为small)。您用mov ds, ax AX 中的任何内容覆盖 DS 。这会将数据段指向内存中不包含数据的位置(例如nstridva ... z等),从而产生错误的结果。要解决此问题,只需删除以下行:

mov ds, ax