Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Assembly] Help programmino

    ciao a tutti... studio ingegneria informatica e mi sono ritrovato in questi periodi a dover fare combattimenti mortali contro assembler!!! Poiché ho un sacco di cose da fare e la logica assembler è un po' più complicata del buon vecchio C allora volevo chiedere un aiuto a chi se ne intende più di me... Veniamo al dunque

    Programma che converte 2 numeri A e B inseriti da tastiera compresi tra 0 e 255 e stampa in formato decimale e binario in numeri simmetrici compresi tra A e B

    io ho iniziato a buttare giù un po' di codice e sono riuscito a fare la conversione in binario, in simmetrico solo di un numero e non ho idea di come fare il cuore del programma ovvero trovare i simmetrici e convertirli.

    vi allego il codice che ho già fatto... chi mi vorrà aiutare sarà ben voluto



    codice:
    ;DEFINIZIONE COSTANTI
    PAGINA                  EQU 00h
    HT                      EQU 09h
    LF                      EQU 0AH
    CR                      EQU 0DH
    ;
    BIOS_VIDEO              EQU 10H
    SET_VIDEO_MODE          EQU 00H
    MODO_TESTO              EQU 03H
    ;
    SET_CURSOR              EQU 02H
    W_CHR_TTY               EQU 0EH
    ;
    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,'premere il tasto A e in seguito il tasto B: $'
    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]$'
    CODICE_TASTO1           DB      ?
    CODICE_TASTO2		    DB	    ?
    DSEG                    ENDS
    
    STACKM                  SEGMENT PARA STACK 'STACK'
                            DB      64 DUP('12345678')
    STACKM                  ENDS
    
                            ASSUME  CS:CSEG,DS:DSEG,SS:STACKM
    CSEG                    SEGMENT PARA PUBLIC 'CODE'
    
    ;CORPO PRINCIPALE DEL PROGRAMMA
    
    MAIN                    PROC  FAR
                            PUSH  DS
                            MOV   AX,00H
                            PUSH  AX
                            CALL  INIZIALIZZAZIONE
    CICLO_PRINCIPALE:       CALL  PROMPT
                            CALL  LETTURA_DATI1
    						CALL  LETTURA_DATI2
    						MOV   DX,OFFSET BIN_MESS
    						CALL  STAMPA_STRINGA
    						MOV   DL,[CODICE_TASTO1]
    						CALL  STAMPA_BIN
    						MOV   DX,OFFSET BIN_MESS
    						CALL  STAMPA_STRINGA
    						MOV   DL,[CODICE_TASTO2]
    						CALL  STAMPA_BIN
    						MOV   AL,[CODICE_TASTO1]
    						CALL  STAMPA_DEC
    						MOV   AL,[CODICE_TASTO2]
    						CALL  STAMPA_DEC
    						CALL  TEST_FINALE
    						JNZ   CICLO_PRINCIPALE
    						RET
    MAIN					ENDP
    
    ;PROCEDURA DI INIZIALIZZAZIONE
    
    INIZIALIZZAZIONE        PROC  NEAR
                            MOV   AX,DSEG
                            MOV   DS,AX
                            MOV   AH,SET_VIDEO_MODE
                            MOV   AL,MODO_TESTO
                            INT   BIOS_VIDEO
                            MOV   DX,0315H
                            CALL  SPOSTA_CURSORE
                            MOV   DX,OFFSET TITOLO
                            CALL  STAMPA_STRINGA
                            MOV   DX,0400H
                            CALL  SPOSTA_CURSORE
                            RET
    INIZIALIZZAZIONE        ENDP
    
    ;PROCEDURA PER STAMPARE IL MESSAGGIO INIZIALE
    
    PROMPT                  PROC         NEAR
                            MOV          DX,OFFSET ISTRUZIONI
                            CALL         STAMPA_STRINGA
                            RET
    PROMPT                  ENDP
    
    ;PROCEDURA PER STAMPARE UN NUMERO IN FORMATO BINARIO
    
    STAMPA_BIN	        	PROC     NEAR
    				        CMP	     DL,'0'
    					    JB	     SOTTOB
    					    CMP	     DL,'9'
    						JA	     SOTTOB
    						SUB	     DL,'0'
    SOTTOB:                 MOV      DH,08H
    CICLO_BINARIO :         XOR      AL,AL
                            SHL      DL,01H
                            ADC      AL,AL
                            CALL     STAMPA_NUMERO
                            DEC      DH
                            JNZ      CICLO_BINARIO
                            RET
    STAMPA_BIN              ENDP
    
    
    ;PROCEDURA PER STAMPARE UN NUMERO IN FORMATO DECIMALE
    
    STAMPA_DEC              PROC     NEAR
                            MOV      DX,OFFSET DEC_MESS
                            CALL     STAMPA_STRINGA
                            MOV      CH,10
                            XOR      CL,CL
    
    MEMODEC:                XOR      AH,AH
                            IDIV     CH
                            PUSH     AX
                            INC      CL
                            CMP      AL,0
                            JNZ      MEMODEC
    
                            XOR      CH,CH
    STAMPADEC:              POP      AX
                            MOV      AL,AH
                            CALL     STAMPA_NUMERO
                            LOOP     STAMPADEC
    
                            RET
    STAMPA_DEC              ENDP
    
    ;PROCEDURA PER DETERMINARE SE OCCORRE UN'ALTRA ITERAZIONE
    
    TEST_FINALE             PROC        NEAR
                            MOV         DX,OFFSET TERMINE
                            CALL        STAMPA_STRINGA
                            CALL        LETTURA_SN
                            CMP         AL,'n'
                            RET
    TEST_FINALE             ENDP
    
    ;PROCEDURE DI BASSO LIVELLO DI INTERFACCIA
    
    ;PROCEDUREA PER STAMPARE UN NUMERO DA 0 A 9
    
    STAMPA_NUMERO           PROC    NEAR
                            ADD     AL,'0'
                            MOV     AH,W_CHR_TTY
                            INT     BIOS_VIDEO
                            RET
    STAMPA_NUMERO           ENDP
    
    ;PROCEDURA PER LEGGERE DA TASTIERA S O N
    
    LETTURA_SN              PROC    NEAR
    NUOVA_LETTURA:          MOV     AH,R_KEY_CHR_NE
                            INT     DOS
                            OR      AL,00100000B
                            CMP     AL,'n'
                            JZ      FINE_LETTURA
                            CMP     AL,'s'
                            JNZ     NUOVA_LETTURA
    FINE_LETTURA:           RET
    LETTURA_SN              ENDP
    
    ;PROCEDURA PER SPOSTARE IL CURSORE
    
    SPOSTA_CURSORE          PROC      NEAR
                            MOV       BH,PAGINA
                            MOV       AH,SET_CURSOR
                            INT       BIOS_VIDEO
                            RET
    SPOSTA_CURSORE          ENDP
    
    ;PROCEDURA PER LEGGERE UN TASTO E MEMORIZZARLO IN CODICE_TASTO1
    
    LETTURA_DATI1           PROC    NEAR
                            MOV     AH,R_KEY_CHR
                            INT     DOS
                            MOV     [CODICE_TASTO1],AL
                            RET
    LETTURA_DATI1           ENDP
    
    ;PROCEDURA PER LEGGERE UN TASTO E MEMORIZZARLO IN CODICE_TASTO2
    
    LETTURA_DATI2           PROC    NEAR
                            MOV     AH,R_KEY_CHR
                            INT     DOS
                            MOV     [CODICE_TASTO2],AL
                            RET
    LETTURA_DATI2           ENDP
    
    
    ;PROCEDURA PER STAMPARE UNA STRINGA
    
    STAMPA_STRINGA          PROC       NEAR
                            MOV        AH,PRINT_STRING
                            INT        DOS
                            RET
    STAMPA_STRINGA          ENDP
    
    CSEG                    ENDS
                            END     MAIN

  2. #2
    heeeeeeeeeeeeeeeeelp!!!

  3. #3
    nessuno conosce assembly in questo forum?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.