|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2015
Messaggi: 3
|
Assembler
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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
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: Codice:
int valore = 0;
int peso = 1;
for (int i = num_cifre_dec - 1; i >= 0; i--) {
valore += (cifre[i] - '0') * peso;
peso *= 10;
}
Codice:
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;
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:00.



















