PDA

Visualizza la versione completa : aiuto per esercizio


alsa81
20-02-2007, 18:25
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.


;definizione costanti
PAGINA EQU 00h
HT EQU 09h
LF EQU 0Ah
CR EQU 0Dh
;
BIOS_VIDEO EQU 10H
SET_VIDEO_MODE EQU 00h ;in AH
MODO_TESTO EQU 03H ;in AL
;
SET_CURSOR EQU 02h ;in AH
W_CHR_TTY EQU 0Eh ;in AH
;
DOS EQU 21H
R_KEY_CHR EQU 01H
PRINT_STRING EQU 09H
R_KEY_CHR_NE EQU 07h


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?

alka
20-02-2007, 19:06
Confermo quanto detto qui (http://forum.html.it/forum/showthread.php?s=&threadid=1083196).

Loading