Domanda

Ho uno script ASM che visualizza la data (giorno, mese, anno) e l'ora (ore, minuti, secondi).

Stampa il datetime corrente sulla casella DOS. Il fatto è che è statico. Quello che voglio fare è renderlo dinamico, nel senso che devo scrivere il nuovo valore nel punto esatto in cui il valore corrente si trova sullo schermo. Come si fa in ASM?

Non ne ho idea e Google non è stato mio amico per questo.

È stato utile?

Soluzione

Usa il codice ASM per posizionare il cursore prima di stampare la stringa. Ad esempio:

        MOV     DX,1629H                ; (LINE 16H, COL 29H)
        MOV     AH,2                    ; Move cursor to DH,DL
        INT     10H
        ; now print your string

Altri suggerimenti

Se la tua casella DOS è COMMAND.COM o CMD.EXE precedente a Windows 2000 (la più recente CMD.EXE non offre supporto ANSI), supporterà le sequenze di escape ANSI. È possibile utilizzare vari comandi cursore per posizionare il cursore all'inizio dell'orologio prima di visualizzare la nuova ora.

Questo non è in realtà un problema specifico della lingua, ma più di uno specifico della piattaforma. Hai detto che sei in esecuzione su un box DOS, quindi puoi utilizzare uno dei seguenti:

  1. Se si utilizza una routine di stampa DOS (come INT 21h con AH = 9), è possibile stampare un carattere di ritorno a capo (ASCII 13) senza un carattere di nuova riga successivo (ASCII 10) per riportare il cursore all'inizio della riga corrente. Allo stesso modo, se si tratta in realtà di un'app di Windows basata su console e si utilizza WriteConsole, è necessario ottenere lo stesso effetto.
  2. Se stai veramente usando DOS, puoi usare il BIOS per aggiornare la posizione corrente del cursore con INT 10h, AH = 2.
  3. Come indicato da Sparr, puoi inviare " ANSI " sequenze di escape (se viene caricato ansi.sys) per controllare il cursore, così come altre cose, come il colore. Queste sequenze di escape verranno stampate (ad es. Ala INT 21h, AH = 9), proprio come il tuo testo.

Se stai programmando molto assembly in DOS, terrei un segnalibro su uno di a> interrupt riferimenti .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top