Die Variable 'Prima' hat 33h gespeichert und es sollte "3" drucken, aber es nicht, es druckt "0", wenn ich das Programm normal ausführe. Was mich nervt ist, dass ich DOSBox zum Debuggen verwende und wenn ich drücke, um die Ausgabe zu sehen, zeigt es "3" an (und das Registerfeld zeigt, dass AL
33h ist), wie es sollte.
Hat jemand dieses Problem schon einmal erlebt? Der Code berechnet Pi.TASM 8086 Ausgabe Ausgabe
data segment
s0 db 25 dup(0ah), 'pi= $'
s1 db 2 dup(0ah), ' $'
n dw 0
z dw 0
r dw 0
o dw 0
j dw 0
x dw 0
y dw 0
xp dw 0
yp dw 0
rp dw 0
cp dw 0
l db 0
css dw 0
patru dw 0
pi dw 0
prima dw 0
adoua dw 0
atreia dw 0
data ends
assume cs:code, ds:data
code segment
start:
mov ax,data
mov ds,ax
mov n,93
mov z,10
mov r,50
mov o,1000
mov j,1
mov ax,n
mov x,ax
mov l,0
mov css,56
mov patru,4
.for:
cmp j,1
jne .if1
mov ax,x
mul x
mov x,ax
cmp x,1000
ja .nrbununu
mov ax,x
mul z
mov x,ax
.nrbununu:
mov ax,x ; x=x%1000/10
xor dx,dx
div o
mov ax,dx
xor dx,dx
div z
mov x,ax ;
mov y,ax ; y=x;
inc j
.if1:
cmp j,2
jne .if2
mov ax,y
mul y
mov y,ax
cmp y,1000
ja .nrbundoi
mov ax,y
mul z
mov y,ax
.nrbundoi:
mov ax,y ; y=y%1000/10
xor dx,dx
div o
mov ax,dx
xor dx,dx
div z
mov y,ax ;
mov ax,x
mul x
mov xp,ax
mov ax,y
mul y
mov yp,ax
mov ax,r
mul r
mov rp,ax ;
mov ax,xp
add ax,yp
cmp ax, rp
ja .contor
inc bl
.contor:
mov j,1
.if2:
inc cx
cmp cx,56
jnle .forx
jmp .for
.forx:
mov ax,bx
mul patru
xor dx,dx
div css
mov prima,ax
add prima,48
mov ax,dx
mul z
div css
mov adoua,ax
add adoua,48
mov ax,dx
mul z
div css
mov atreia,ax
add atreia,48
mov dx, offset s0
mov ah,9
int 21h
xor ax,ax
xor dx,dx
mov ax,prima
mov dl,al
mov ah,2
int 21h
mov dl,2ch
mov ah,2
int 21h
xor ax,ax
xor dx,dx
mov ax,adoua
mov dl,al
mov ah,2
int 21h
xor ax,ax
xor dx,dx
mov ax,atreia
mov dl,al
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends
end start
ich, dass wir den Code sehen, müssen denken, wo prim zugewiesen bekommt. Mein TASM ist rostig, aber ich bin mir nicht sicher, ob "prim" den Wert oder die "Adresse" auch direkt lädt, Sie sollten das auch überprüfen (falls es '[prim]' oder 'word ptr prim' usw. ist) –
überprüfte es auf meinem TASM (Version v5.0), sowohl 'mov ax, prim 'als auch' mov ax, [prim] 'lade prims Wert – Tommylee2k
btw: was sind all diese' xor ax, ax' und sind 'xor dx, dx 'für ?? Sie sind nicht notwendig, wenn Sie diese Register mit Werten 2 Anweisungen später anyways – Tommylee2k