Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do I get another result?

I tried to solve this project for school and when i use a compiler the final result is some emoticons instead of the sum of digits

I rewrote the entire code, but I get the same result

.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
like image 320
Robert Malenkov Avatar asked Apr 12 '26 01:04

Robert Malenkov


1 Answers

The .start directive will produce code that will initialize the segments for the model you have chosen (in this case small). You overwrite DS with whatever happens to be in AX with mov ds, ax. That will point the data segment to a place in memory that doesn't contain your data (like nstr, idv, a ... z etc) producing incorrect results. To fix simply remove this line:

mov ds, ax
like image 153
Michael Petch Avatar answered Apr 23 '26 10:04

Michael Petch