Domanda

Ho appena iniziato a utilizzare il linguaggio assembly (mi è sembrato di imparare qualcosa di nuovo) e ho incontrato alcune domande (finora) che tutti i tutorial che ho esaminato non rispondono o sono troppo vecchi per sapere.

1) Ho provato alcune ricerche (forse non conosco le parole chiave giuste), ma non riesco a trovare un elenco aggiornato di modalità grafiche per modificare le risoluzioni dello schermo, ecc. Il migliore che ho trovato è: Tutorial per assemblatori e difficilmente penso che 640x480 sia il è possibile utilizzare il miglior linguaggio di assemblaggio per la risoluzione. Qualcuno sa di un tutorial più aggiornato che posso usare?

Modifica: l'interruzione 10h è obsoleta e non supporta più di 640x480

2) È possibile " mov " un valore da una variabile a un'altra variabile senza prima spostarlo in un registro? Esempio:

jmp start
  n1     dw 0
  n2     dw 0
  res    dw 0
start:
  mov n1,5
  mov n2,6
  mov res,n1
  add res,n2
...etc...

Modifica: non è possibile. Non puoi passare da una memoria all'altra senza usare i registri.

3) Passando alla domanda 1, c'è un modo per rilevare quale modalità grafica sta attualmente utilizzando un utente, in modo che io possa cambiarla e cambiarla dopo? (Presumo che ci sia, ma non sono sicuro di come farlo.)

Modifica: è necessario eseguire una query sul sistema operativo per le impostazioni grafiche.

È stato utile?

Soluzione

Per le domande n. 1 e n. 3, consultare le VESA BIOS Extensions . Questa era una specie di standard per gestire "Super VGA" modi popolari negli anni '90.

Per quanto riguarda il n. 2, in generale la risposta è no, non è possibile spostare la memoria in memoria. Ma non è strettamente vero: c'è MOVS (sposta stringa), che sposta un byte, una parola o una parola da DS: SI a ES: DI. Di solito questa istruzione viene utilizzata insieme a un prefisso REP per spostare blocchi di memoria. Inoltre, supponendo che tu abbia uno stack impostato, puoi spostare la memoria in memoria senza ostruire un registro premendo e facendo scoppiare:

PUSH [mem1]
POP  [mem2]

Altri suggerimenti

Per quanto riguarda la tua prima domanda, l'interrupt 10 è molto vecchio e probabilmente non viene utilizzato oltre le risoluzioni di 640x480. Viene ora utilizzata una parte diversa dello stack del software; cioè, dovresti interrogare Windows per ottenere l'attuale risoluzione dello schermo.

Questo post piuttosto dettagliato contiene molti dettagli su come utilizzare l'assemblatore per guidare DirectX in Windows. Oggigiorno DirectX è la famiglia di API chiave per la grafica, non ti allontanerai molto utilizzando gli interruzioni dell'era DOS e programmando direttamente il framebuffer VGA.

L'interruzione 10h è fondamentalmente una chiamata di funzione del sistema operativo (in realtà esegue il codice BIOS). Internamente, legge / scrive la memoria video e vari registri sulla scheda grafica. Per avere un'idea di che tipo di cose accada " entro " interrompere 10h, controllare questo fuori.

Quando si esegue un programma DOS in Windows, viene eseguito in una macchina DOS virtuale. Windows in realtà non gli consente di toccare la scheda grafica ma di riprodurla con una virtuale. Di solito questo si estende solo alle modalità dello schermo VGA (e talvolta solo alla modalità testo), cioè ciò che hai è una scheda VGA virtuale (non una moderna scheda grafica). Per questo motivo, in linguaggio assembly a 16 bit in Windows, non è possibile utilizzare tutte le funzionalità delle moderne schede grafiche.

Sì, certo, il linguaggio assembly può farti fare qualsiasi cosa la scheda grafica possa fare. Ma solo se uno dei due:

  • il tuo programma ha accesso illimitato all'hardware grafico (ad es. stai scrivendo un driver di dispositivo Windows o Linux, o stai eseguendo in puro DOS, o il tuo kernel), oppure
  • il tuo programma passa attraverso l'interfaccia del sistema operativo appropriata.

Se sei ancora interessato al linguaggio assembly, ti suggerirei di provare a scrivere un kernel giocattolo. In questo modo, imparerai una montagna di cose.

Lascia un commento se desideri ulteriori informazioni.

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