- 104
- 3
- CPU
- i5-10500 3.2Ghz
- Dissipatore
- Non specificato
- Scheda Madre
- Non specificata
- HDD
- M.2 251GB e M.2 500GB
- RAM
- 16GB DDR4 2666mhz
- GPU
- Grafica Intel® UHD 630
- Audio
- Non specificata
- Monitor
- 1920x1080 27"
- PSU
- Non specificato
- Case
- Non specificato
- Periferiche
- Nono specificato
- Net
- Eolo
- OS
- Ubuntu
Scusate ho un problema(strano eh -_-), ho cercato un po su internet, ho provato a fare un paio di prove ma niente non ne esco.
Quando viene eseguita l'istruzione "MUL word" il programma si blocca, sono sicuro al 100% sia quell'istruzione,poiché escludendo le altre istruzioni che potrebbero causare overflow o generare eccezioni fila tutto liscio come l'olio.
Avevo finito questo programma un mesetto fa, ho deciso di riprenderlo e aggiungervi due cose, giusto per visualizzare l'output, vi metto solo la macro che fa ciò, i registri non vengono modificati al di fuori della macro quindi escludo cambiamenti esterni involuti, o meglio vengono modificati ma azzerati prima dell'estensione della macro(tutti attranne il registro bx, la quale viene preso come parametro dalla macro):
Non voglio sapere con preciso se la mia supposizione è corretta o su quale riga avviene ciò, vorrei sapere cosa può generare eccezioni in questo frammento di codice, ho controllato i manuali e le guide online ma non trovo nessuno problema in quell'istruzione MUL, può darsi abbia letto male qualcosa o mi sia fatto sfuggire altrettanto.
comunque l'algoritmo consiste nel scovare la lunghezza del numero, moltiplicare la lunghezza per 10 per "lunghezza-1" volte e quindi poi dividere il numero per il risultato della moltiplicazione, stampare il contenuto del registro ax+48, memorizzare in ax il registro ax, e ripetere ciò finche il numero(che ogni volta viene divisio per "lunghezza-1*10" 10 volte, il divisore viene diviso a sua volta per 10) sia pari a 0, o meglio il quoziente dell'ultima divisione sia 0.
EDIT: è incredibile come delle cavolate possano diventare relativamente complesse per chi non abbia mai programmato in tale linguaggio, mentre le cose più complesse come sovrascrivere la RAM video siano facili(si parla in relazione di righe di codice : risultato)
Quando viene eseguita l'istruzione "MUL word" il programma si blocca, sono sicuro al 100% sia quell'istruzione,poiché escludendo le altre istruzioni che potrebbero causare overflow o generare eccezioni fila tutto liscio come l'olio.
Avevo finito questo programma un mesetto fa, ho deciso di riprenderlo e aggiungervi due cose, giusto per visualizzare l'output, vi metto solo la macro che fa ciò, i registri non vengono modificati al di fuori della macro quindi escludo cambiamenti esterni involuti, o meglio vengono modificati ma azzerati prima dell'estensione della macro(tutti attranne il registro bx, la quale viene preso come parametro dalla macro):
Codice:
output_add MACRO register
LOCAL search_lenght, continue, mult, output
push ax
push cx
push dx
mov store_in, 10
mov ax, register
search_lenght: cmp ax, 0
jne continue
dec cx
mov store_in, 1
mov ax, 10
xor dx, dx
jmp output
continue: xor dx, dx
mov ax, ax
div store_in
inc cx
jmp search_lenght
mult: mul store_in ;in questa riga avviene il fatto secondo me
mov store_in, ax
xor dx, dx
loop mult
mov ax, register
output: mov ax, ax
xor dx, dx
div store_in
push ax
push dx
mov ah, 02h
add al, 48
xor dx, dx
mov dl ,al
int 21h
pop dx
pop ax
mov ax, dx
push ax
mov ax, store_in
xor dx, dx
mov cx, 10
div cx
mov store_in, ax
pop ax
cmp store_in, 0
je stop
jmp output
pop dx
pop cx
pop ax
ENDM
comunque l'algoritmo consiste nel scovare la lunghezza del numero, moltiplicare la lunghezza per 10 per "lunghezza-1" volte e quindi poi dividere il numero per il risultato della moltiplicazione, stampare il contenuto del registro ax+48, memorizzare in ax il registro ax, e ripetere ciò finche il numero(che ogni volta viene divisio per "lunghezza-1*10" 10 volte, il divisore viene diviso a sua volta per 10) sia pari a 0, o meglio il quoziente dell'ultima divisione sia 0.
EDIT: è incredibile come delle cavolate possano diventare relativamente complesse per chi non abbia mai programmato in tale linguaggio, mentre le cose più complesse come sovrascrivere la RAM video siano facili(si parla in relazione di righe di codice : risultato)
Ultima modifica: