AnonimoVeneziano
25-06-2004, 15:46
Ciao,
Ho un problema con un programma in Assembly-DOS che ho scritto di prova .
In pratica quello che deve fare sto programma cazzutissimo si può riassumere in 3 parti :
1) Pulisce lo schermo completamente
2) Sposta il cursore di scrittura a metà schermo
3) Scrive un altrettanto cazzutissima frase
Il codice sorgente per NASM è qua :
; Source Name: PROVA.ASM
; Executable Name: PROVA.COM
[BITS 16] ; Set 16 bit code generation
[ORG 0100H] ; Set the start of the code at address 0100H [COM FILE]
[SECTION .text] ; Opening SECTION .text
START: ; START Label
call Cleaning
mov dl, 25 ; Positioning cursor on 39 = X Coordinate
mov dh, 11 ; Positioning cursor on 11 = Y Coordinate
call Positioning ; Calling "Positioning" procedure
mov dx, message ; Loading in DX the address of "message"
call Write ; Calling the "Write" procedure
call Closing ; Calling the "Closing" procedure
Write:
mov ah, 9 ; Loading DOS service code into AH [9 = Print on the screen]
int 21H ; Software Interrupt [Calling DOS Dispatcher]
ret ; Returning from Procedure
Cleaning:
mov cl, 0 ; Upper-left corner X Coordinate
mov ch, 0 ; Upper-left corner Y Coordinate
mov dl, 79 ; Bottom-right corner X Coordinate
mov dh, 24 ; Bottom-right corner Y Coordinate
mov al, 0 ; Scrolling 0 lines [Clean the screen]
mov ah, 6 ; Put BIOS call code 6 in AH
int 10H ; Calling VIDEO BIOS Service
ret ; Returning from Procedure
Positioning:
mov ah, 2 ; Loading VIDEO BIOS Service code into AH [2 = Cursor Positioning]
mov bh, 0 ; Stay in display page 0
int 10H ; Calling VIDEO BIOS Service
ret ; Returning from Procedure
Closing:
mov ax, 04C00H ; Loading DOS Service code in AX Register [04C00 = exit from execution]
int 21H ; Calling DOS Service
ret ; Returning from Procedure
[SECTION .data]
message db "Frase sostituita :)" , 13, 10, "$"
Scusate per i commenti in inglese, ma li ho messi in inglese perchè fanno figo :D
Comunque il problema è questo :
In pratica lo schermo si pulisce dopo aver eseguito la procedura "Cleaning" che pulisce lo schermo usando la chiamata al Video BIOS "6" , lo schermo diventa completamente nero .
Successivamente fa l'azione di spostare il cursore a centro schermo e di scrivere la frase , solo che.... la frase non si vede!!
Lo schermo rimane totalmente nero e non da segni di vita , neanche il prompt del DOS dopo che ha finito di eseguire il programma .
Posso scrivere quello che voglio , ma lo schermo rimane nero (però in sistema è attivo , infatti se ad esempio do il comando "DIR" non si vede nulla a schermo ma l'HD lavora ) e l'unico modo per recuperarlo è usare il comando "CLS" .
Perchè fa sta cosa???
Come faccio a pulire lo schermo senza che me lo blocchi??
Grazie a tutti :)
Ciao
Ho un problema con un programma in Assembly-DOS che ho scritto di prova .
In pratica quello che deve fare sto programma cazzutissimo si può riassumere in 3 parti :
1) Pulisce lo schermo completamente
2) Sposta il cursore di scrittura a metà schermo
3) Scrive un altrettanto cazzutissima frase
Il codice sorgente per NASM è qua :
; Source Name: PROVA.ASM
; Executable Name: PROVA.COM
[BITS 16] ; Set 16 bit code generation
[ORG 0100H] ; Set the start of the code at address 0100H [COM FILE]
[SECTION .text] ; Opening SECTION .text
START: ; START Label
call Cleaning
mov dl, 25 ; Positioning cursor on 39 = X Coordinate
mov dh, 11 ; Positioning cursor on 11 = Y Coordinate
call Positioning ; Calling "Positioning" procedure
mov dx, message ; Loading in DX the address of "message"
call Write ; Calling the "Write" procedure
call Closing ; Calling the "Closing" procedure
Write:
mov ah, 9 ; Loading DOS service code into AH [9 = Print on the screen]
int 21H ; Software Interrupt [Calling DOS Dispatcher]
ret ; Returning from Procedure
Cleaning:
mov cl, 0 ; Upper-left corner X Coordinate
mov ch, 0 ; Upper-left corner Y Coordinate
mov dl, 79 ; Bottom-right corner X Coordinate
mov dh, 24 ; Bottom-right corner Y Coordinate
mov al, 0 ; Scrolling 0 lines [Clean the screen]
mov ah, 6 ; Put BIOS call code 6 in AH
int 10H ; Calling VIDEO BIOS Service
ret ; Returning from Procedure
Positioning:
mov ah, 2 ; Loading VIDEO BIOS Service code into AH [2 = Cursor Positioning]
mov bh, 0 ; Stay in display page 0
int 10H ; Calling VIDEO BIOS Service
ret ; Returning from Procedure
Closing:
mov ax, 04C00H ; Loading DOS Service code in AX Register [04C00 = exit from execution]
int 21H ; Calling DOS Service
ret ; Returning from Procedure
[SECTION .data]
message db "Frase sostituita :)" , 13, 10, "$"
Scusate per i commenti in inglese, ma li ho messi in inglese perchè fanno figo :D
Comunque il problema è questo :
In pratica lo schermo si pulisce dopo aver eseguito la procedura "Cleaning" che pulisce lo schermo usando la chiamata al Video BIOS "6" , lo schermo diventa completamente nero .
Successivamente fa l'azione di spostare il cursore a centro schermo e di scrivere la frase , solo che.... la frase non si vede!!
Lo schermo rimane totalmente nero e non da segni di vita , neanche il prompt del DOS dopo che ha finito di eseguire il programma .
Posso scrivere quello che voglio , ma lo schermo rimane nero (però in sistema è attivo , infatti se ad esempio do il comando "DIR" non si vede nulla a schermo ma l'HD lavora ) e l'unico modo per recuperarlo è usare il comando "CLS" .
Perchè fa sta cosa???
Come faccio a pulire lo schermo senza che me lo blocchi??
Grazie a tutti :)
Ciao