xblitz
24-12-2007, 14:27
Salve a tutti
stò creando un programma assembler che dato in input un numero n stampi a video l'ennesimo numero della sequenza di Fibonacci, il mio problema è nella stampa a video del numero:
in pratica per far stampare la cifra opero una divisone per 10000, poi 1000, 100 e 10, infine stampo le unità... il mio problema arriva nella stampa delle migliaria: quando vado a fare la seconda divisione (quella delle migliaia) ottengo dei valori "corrotti".
Mi sono fatto un'idea: mi sono accorte che un flag (per esattezza il flag P) passa da 0 a 1, potrebbe essere lui il responsabile?
uso il turbo debugger assembler 8086
posto il pezzo di codice incriminato:
scambia macro
mov BX,DX
mov DX,AX
mov AX,BX
endm
stampa proc
;salvo i registri che verranno modificati
push AX
push BX
push CX
push DX
mov AX,BX ;sposto il dividento (che è SEMPRE AX)
;decine di migliaia
mov BX,10000d ;sposto il divisore in BX
div BX ;così sono sicuro di avere una divisione su
registri a 16bit quoziente in AX resto in
DX
scambia ;la cifra da stampare è in AX, quindi la
metto in DX
add DL,48d ;recupero lo sfalsamento cifra carattere
push AX ;AX viene modificato -> devo salvarlo
mov AH,2 ;carico il servizio di input
int 21h ;il contenuto che legge va in AL
pop AX ;ripristino AX
;migliaia
mov BX,1000d ;sposto il divisore in BX
div BX ;così sono sicuro di avere una divisione su
registri a 16bit quoziente in AX resto in
DX
scambia ;la cifra da stampare è in AX, quindi la
metto in DX
add DL,48d ;recupero lo sfalsamento cifra carattere
push AX ;AX viene modificato -> devo salvarlo
mov ah,2 ;carico il servizio di input
int 21h ;il contenuto che legge va in AL
pop AX ;ripristino AX
.....
Grazie in anticipo....
Ciao!
stò creando un programma assembler che dato in input un numero n stampi a video l'ennesimo numero della sequenza di Fibonacci, il mio problema è nella stampa a video del numero:
in pratica per far stampare la cifra opero una divisone per 10000, poi 1000, 100 e 10, infine stampo le unità... il mio problema arriva nella stampa delle migliaria: quando vado a fare la seconda divisione (quella delle migliaia) ottengo dei valori "corrotti".
Mi sono fatto un'idea: mi sono accorte che un flag (per esattezza il flag P) passa da 0 a 1, potrebbe essere lui il responsabile?
uso il turbo debugger assembler 8086
posto il pezzo di codice incriminato:
scambia macro
mov BX,DX
mov DX,AX
mov AX,BX
endm
stampa proc
;salvo i registri che verranno modificati
push AX
push BX
push CX
push DX
mov AX,BX ;sposto il dividento (che è SEMPRE AX)
;decine di migliaia
mov BX,10000d ;sposto il divisore in BX
div BX ;così sono sicuro di avere una divisione su
registri a 16bit quoziente in AX resto in
DX
scambia ;la cifra da stampare è in AX, quindi la
metto in DX
add DL,48d ;recupero lo sfalsamento cifra carattere
push AX ;AX viene modificato -> devo salvarlo
mov AH,2 ;carico il servizio di input
int 21h ;il contenuto che legge va in AL
pop AX ;ripristino AX
;migliaia
mov BX,1000d ;sposto il divisore in BX
div BX ;così sono sicuro di avere una divisione su
registri a 16bit quoziente in AX resto in
DX
scambia ;la cifra da stampare è in AX, quindi la
metto in DX
add DL,48d ;recupero lo sfalsamento cifra carattere
push AX ;AX viene modificato -> devo salvarlo
mov ah,2 ;carico il servizio di input
int 21h ;il contenuto che legge va in AL
pop AX ;ripristino AX
.....
Grazie in anticipo....
Ciao!