PDA

View Full Version : Assembler


LukaF15
25-01-2015, 21:26
AIUTO!
Dovrei convertire un numero da decimale a binario. La mia idea era quella di dividere il numero per due dentro un for, poi prendere il resto e metterlo nello stack. Infine stampare tutto lo stack. Ma non funziona....Aiutatemi (il numero è in input). Grazie

; Conversione di un numero da decimale a binario
data segment
msg db "Inserire un numero da convertire: $"
data ends
sistema segment
dw 256 dup(0)
top label word
sistema ends
code segment
assume cs:code, ds:data, ss:sistema
main: mov ax, data
mov ds, ax

mov ah, 09h
lea dx, msg
int 21h
mov ah, 02h
mov dl, 13d
int 21h
mov ah, 02h
mov dl, 10d
int 21h

mov ah, 01h
int 21h
sub al, 48d
mov bh, 2d
mov cx, 8
mov ah, 0

for: div bh
mov bl, al
mov al, 0
push ax
mov al, bl
mov ah, 0
loop for

mov cx, 8

for1: mov ah, 02h
pop ax
mov dl, ah
int 21h
loop for1

exit: mov ax, 4ch
int 21h

code ends
end main

Daniels118
26-01-2015, 14:34
Non ho letto il codice, comunque quando leggi un numero da tastiera in realtà stai leggendo una sequenza di caratteri ascii. La prima cosa da fare è sottrarre a ciascun carattere il codice del carattere 0 (zero). Fatto questo ottieni un numero codificato in BCD (binary coded digits). A questo punto devi moltiplicare ciascuna cifra per il proprio peso e sommare i risultati.
Supponendo che il numero sia stato letto in una variabile stringa chiamata "cifre", puoi fare tutto in un singolo ciclo:
int valore = 0;
int peso = 1;
for (int i = num_cifre_dec - 1; i >= 0; i--) {
valore += (cifre[i] - '0') * peso;
peso *= 10;
}
A questo punto "valore" contiene il numero binario. Se vuoi stamparlo in formato binario (01) devi fare un ulteriore loop:
int peso = 1 << (num_cifre_bin - 1);
for (int i = 0; i < num_cifre_bin; i++) {
cifre_bin[i] = (valore & peso) ? '1' : '0';
peso = peso >> 1;
}