首页 > 解决方案 > 为什么我会得到另一个结果?

问题描述

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

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

.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

标签: assemblydosx86-16

解决方案


.start指令将生成代码,这些代码将为您选择的模型(在本例中small)初始化段。您用AX中的任何内容覆盖DS。这会将数据段指向内存中不包含您的数据的位置(如, , ...等),从而产生不正确的结果。要修复只需删除此行:mov ds, axnstridvaz

mov ds, ax

推荐阅读