Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1

    Aiuto Assembler!!!

    Salve a tutti...vi posto il mio problema con la speranza che qualcuno di voi sappia aiutarmi. Stò realizzando un programma assembler con un architettura 8086. Mi sovviene all'improvviso la necessità di dover utilizzare dei registri a 32 bit e quindi i registri eax edx... per fare ciò pongo all'inizio del codice l'estensione .386 vado poi acompilare l'operazione di tasm va bene ma qnd vado a linkare mi dà qst errore: Fatal:32 bit record encountered in module nome_file.asm...qualcuno saprebbe aiutarmi?!premetto ke sn nuovo del linguaggio...grazie 1000 in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    EDIT: hai provato con la direttiva

    .486

    ?

    P.S. Attenzione al titolo e al regolamento ...

  3. #3
    uso il tasm...
    P.S
    vado a dare un okkiata al regolamento...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da faster589
    uso il tasm...
    Tasm 5.0 ?

    Hai provato con la direttiva

    .486

    ?

  5. #5
    si è loa versione 5.0...ho provato ad inserire .486 ma il risultato non cambia...

  6. #6
    ragazzi datemi una mano stò impazzendo...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Puoi mostrare il codice?

  8. #8
    In realtà nn posso altrimenti sfato tutto quello fatto sino ad ora...se puoi connetterti a mirc oppure su msn così te lo passo e ci dai un occhiata...sei poi proprio devo lo posto...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Posta soltanto la parte iniziale e quella che ti da' l'errore ... non postarlo tutto ...

    E dimmi anche come compili (la linea di comando con i parametri che usi ... e poi stai usando Tasm.exe o Tasm32.exe ?)

  10. #10
    .386
    ;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
    MODE_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
    PRE_LEN EQU 10

    DSEG SEGMENT PARA PUBLIC 'DATA'

    SEGNO DB ?
    NUM DW 0
    NUM_A2 DW 0
    NUM_QUADR1 DW 0
    NUM_QUADR2 DW 0
    DIVD DW ?
    ERR_MESS DB CR,LF,LF,CR,'Valore non ammesso.Inserire un nuovo numero compreso tra -999 e 999:',0DH,0AH,'$'

    TITOLO DB 'CORSO di CALCOLATORI ELETTRONICI$'
    ISTRUZIONI DB CR,LF,LF,CR,'Inserire un numero compreso tra -999 e 999:$'
    BIN_MESS DB CR,LF,HT,HT,'Rappresentazione Binaria:$'
    A2_MESS DB CR,LF,HT,HT,'Rappresentazione Binaria in complemento A2:$'

    DEC_MESS DB CR,LF,HT,HT,'Rappresentazione Decimale del quadrato del numero:$'
    TERMINE DB CR,LF,LF,HT,'Un altra iterazione? [S/N]$'
    CODICE_TASTO DB ?
    DSEG ENDS



    STACKM SEGMENT PARA STACK 'STACK' ; Viene allocata una zona di
    DB 64 DUP('12345678') ; memoria per lo stack: in
    STACKM ENDS ; tutto 64*8 bytes.


    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


    CALL STAMPA_BIN
    CALL COMP_A2
    CALL STAMPA_A2
    CALL QUADR
    CALL STAMPA_DEC
    CALL TEST_FINALE
    JNZ CICLO_PRINCIPALE
    RET ;Ritorno al Sistema Operativo
    MAIN ENDP


    ;----------------------------------------------------------------------------------;
    ; Procedura di inizializzazione ;
    ; ;
    ; REGISTRI UTILIZZATI: AX,DX,SX ;
    ;----------------------------------------------------------------------------------;

    INIZIALIZZAZIONE PROC NEAR
    MOV AX,DSEG ;Inizializzazione segmento dati
    MOV DS,AX ; tramite il registro AX.

    MOV AH,SET_VIDEO_MODE ;Servizio BIOS 'Set Video Mode':
    MOV AL,MODE_TESTO ;modo testo 80 x 25,colori
    INT BIOS_VIDEO ;

    MOV DX,0315h ;Imposta riga (DH) e colonna (DL)
    CALL SPOSTA_CURSORE ;Muove il cursore nel pos scelta

    MOV EDX,OFFSET TITOLO ;Sceglie la stringa (DSX)
    CALL STAMPA_STRINGA ;e la stampa.

    MOV DX,0400h ;Imposta riga(DH) e colonna (DL)
    CALL SPOSTA_CURSORE ;Muove il cursore nella pos scelta
    RET ;Ritorno alla procedura chiamante
    INIZIALIZZAZIONE ENDP


    ;-----------------------------------------------------------------------------------;
    ; Procedura per stampare il messaggio iniziale ;
    ; ;
    ; REGISTRI UTILIZZATI: DX, AH ;
    ;-----------------------------------------------------------------------------------;

    PROMPT PROC NEAR
    MOV EDX,OFFSET ISTRUZIONI ;Sceglie la stringa (DSX)
    CALL STAMPA_STRINGA ; e la stampa.
    RET ;Ritorna alla procedura chiamante
    PROMPT ENDP



    l'errore nn mi è dato ad una riga particolare poichè come dicevo quando vado a compilare (tasm base.asm) nn mi da nessun errore, l'errore mi appare quando faccio tlink base.asm...l'unica cosa strana che ho notato quando ho aggiunto l'estensione .386 è che su operazioni del tipo MOV DX,OFFSET TITOLO ; mi dava errore ed ho dovuto modificarle in MOV EDX,OFFSET TITOLO ; nn sò quanto sia rilevante però preferisco dirtelo...

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.