|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 384
|
[Assembler] controindicazioni istruzione DIV su 16 bit?
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: Codice:
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
.....
Ciao! Ultima modifica di xblitz : 24-12-2007 alle 15:31. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
DX:AX diviso BX e in AX ottieni il quoziente e in DX ottieni il resto.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Giusto, quindi devi azzerare DX prima di fare la divisione
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 384
|
GRAZIE a tutti e 2... (se solo avessi letto gli appunti del prof con più attenzione
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Sì, esatto. Vale anche nel caso di segmento/offset, es. DS:98AFH o CS:EIP.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:23.



















