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

    [NASM/DOS - preprocessore] errore nella valutazione delle espressioni ad assemle time

    ok forse questo forum non ha mai visto una domanda relativa all'assembly per il buon vecchio dos16, ma tentar non nuoce

    tentando di ridurre lo spazio di memoria allocato dal mio programma asm con l'opportuna funzione del DOS (16bit, model tiny: è un file .com):

    codice:
    mov sp, END + 0x12
    mov ah, 0x4A
    mov bx, (END/16) + 0x04
    int 0x21
    (END è una label posta alla fine del codice)

    ottengo un errore causato da END/16: "division operation may only be applied to scalar values"

    poiché dovrebbe essere una sostituzione fatta a livello di preprocessore...non capisco da cosa possa essere causata...
    Gabriele B. - http://9thcircle.it

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [NASM/DOS - preprocessore] errore nella valutazione delle espressioni ad assemle

    Originariamente inviato da TheClue/Nash
    codice:
    mov sp, END + 0x12
    mov ah, 0x4A
    mov bx, (END/16) + 0x04
    int 0x21
    In genere in questi casi si fanno le operazioni singolarmente con delle istruzioni. Es. metti END in bx poi fai uno shift a destra di 4 bit (una divisione per 16) con SHR, quindi aggiungi 4 con un ADD.

    Ricordati che stai lavorando in assembly, non in C, Java o Visual Basic .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    si è il "workaround" che ho usato in effetti

    pero' mi domandavo per quale motivo comparisse quell'errore. l'indirizzo END e' valutato in compile time (e la prima istruzione lo dimostra), quindi tecnicamente anche END/16 + 4 dovrebbe essere valutabile a tempo di compilazione e sostituito dal preprocessore con un valore numero immediato...
    Gabriele B. - http://9thcircle.it

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.