Inviato: Lun Gen 29, 2007 11:54 am Oggetto: MUL a 64 bit
Ciao a tutti. Sono una studentessa alle prime armi con la programmazione in assembler e mi servirebbe una piccola mano.
In un esercizio mi viene richiesto di accettare da tastiera un numero compreso tra 2 e 9 e stamperne tutte le potenze, prima in decimale e poi in binario, fino ad un risultato compreso in 64 bit. Come posso fare?
Ringrazio anticipatamente chi mi risponderà.
No, non ci penserei minimamente. Ho già fatto tutta la parte che riguarda la richiesta di inserimento di un numero, il controllo dell'intervallo richiesto, la trasformazione dei risultati in binario, ma non riesco a saltarci fuori con la potenza del numero. In pratica mi servirebbe sapere come posso fare la sottoprocedura per farmi dare come risultato tutte le potenze del numero inserito fino a che la potenza non entra nei 64 bit.
Inviato: Mar Feb 20, 2007 5:24 pm Oggetto: Esercizio in assembler
Ciao ragazzi.
Il mio problema è questo:
Scrivere un programma in Assembly che acquisisca in ingresso un numero compreso tra 2 e 9. Visualizzare sul video in formato decimale e binario tutte le potenze del numero in ingresso fino al valore massimo contenibile in 64 bit.
DSEG SEGMENT PARA PUBLIC 'DATA'
TITOLO DB 'CORSO DI CALCOLATORI ELETTRONICI$'
ISTRUZIONI DB CR,HT,HT,HT,HT,HT,CR,'Inserisci una cifra (numero intero) tra 2 e 9: $'
BIN_MESS DB CR,LF,HT,HT,'Rappresentazione Binaria: $'
DEC_MESs DB CR,LF,HT,HT,'Rappresentazione Decimale: $'
TERMINE DB CR,LF,LF,HT,'Un''altra iterazione? [S/N] $'
NUMERO DB ?
POT1 DB 1 DUP (?) ; REUPERO AL
POT2 DB 1 DUP (?) ; RECUPERO AH
POT3 DB 1 DUP (?) ;VARIE
POT4 DB 1 DUP (?) ;VARIE
CON DB 1 DUP (?)
DSEG ENDS
STACKM SEGMENT PARA STACK 'STACK' ;viene allocata una zona di
DB 64 DUP('12345678') ;memoria per lo Stack: in
STACKM ENDS
ASSUME CS:CSEG,DS:DSEG,SS:STACKM
CSEG SEGMENT PARA PUBLIC 'CODE'
;------------------------------------------------------;
; Corpo principale del programma ;
;------------------------------------------------------;
MAIN PROC FAR
PUSH DS ;Istruzioni da lasciare SEMPRE
MOV AX, 00h ;al principio dei programmi!
PUSH AX
CALL INIZIALIZZAZIONE
CICLO_PRINCIPALE: CALL PROMPT
CALL LETTURA_DATI
MOV AX, 00h
MOV AL , NUMERO ;istr agg
MOV DX,0
MOV CON, 00h
MOV POT1,AL
MOV POT2,AH
CALCOLA_POT: MOV AL, POT1
MOV AH, POT2
CALL STAMPA_NUMERO
MOV AL, POT1
MOV AH, POT2
CALL MOLTIPLICAZIONE ; MOLTIPLICAZIONE A 32 BIT
MOV POT1,AL
MOV POT2,AH
INC CON
CMP CON, 5
JNE CALCOLA_POT ;
CALL TEST_FINALE
JNZ CICLO_PRINCIPALE
RET ;ritorno al Sistema Operativo
MAIN ENDP
MOLTIPLICAZIONE PROC NEAR
PUSH AX
MOV AX,DX
MUL NUMERO
XCHG DX,CX
XCHG BX,AX
POP AX
MUL NUMERO
ADD BX,DX
RET
MOLTIPLICAZIONE ENDP
Non so cosa sbaglio per avere il risultato richiesto dal problema.
Tutte le chiamate che vengono fatte all'interno del programma dovrebbero essere funzionanti. Il mio problema è che non riesco a trasformare il risultato da esadecimale a decimale. Come posso fare?
Come posso arrivare a utilizzare 64 bit?
Non puoi inserire nuovi Topic in questo forum Non puoi rispondere ai Topic in questo forum Non puoi modificare i tuoi messaggi in questo forum Non puoi cancellare i tuoi messaggi in questo forum Non puoi votare nei sondaggi in questo forum