Visualizzazione dei risultati da 1 a 2 su 2

Discussione: aiuto per esercizio

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    13

    aiuto per esercizio

    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,DSSEG,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?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Confermo quanto detto qui.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.