PDA

View Full Version : [Assembly-DOS] Pulire lo schermo e scrivere una frase


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

mmx[ngg]
25-06-2004, 16:13
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 bh, 7 ; Attribute
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

AnonimoVeneziano
25-06-2004, 16:31
Originariamente inviato da mmx[ngg]

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 bh, 7 ; Attribute
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



Attribute??

Non l'avevo trovato da nessuna parte , cosa fa?? (Mo provo)

Grazie

Ciao

AnonimoVeneziano
25-06-2004, 16:36
Funziona :D

Sei un mito , grazie :D

mmx[ngg]
25-06-2004, 16:39
Semplicemente imposta il colore del testo e dello sfondo...prima scrivevi nero su nero....ecco xke non vedevi niente.

Se non ricordo male i 4 bits + significativi sono il colore del testo, dal 5° al 7° bit lo sfondo e il bit finale dovrebbe essere il blink...ma non ne sono sicuro xke è una vita ke non vedo + ste cose...al max prova :)

AnonimoVeneziano
25-06-2004, 16:53
LoL , detto così sembra facile :)

Sai mica se c'è una tabella con tutti sti attributi? Mi piacerebbe provare a fare lo schermo di un colore diverso :)

Ciao

repne scasb
25-06-2004, 18:46

Luc@s
26-06-2004, 15:24
have a look (http://www.italios.it/osfromscratch/kout.php)

AnonimoVeneziano
26-06-2004, 15:26
Originariamente inviato da repne scasb
Il seguente codice ASM ti generera' la tabella che cerchi:


View_All_Attribute proc near

mov ax,3h
int 10h
push 0B800h
pop es
mov di,2C0h
xor ax,ax
loop_attribute:
stosw
add ax,101h
test al,0Fh
jne loop_attribute
add di,80h
test al,0F0h
jne loop_attribute
mov ah,10h
int 16h
mov ah,4Ch
int 21h

View_All_Attribute endp


Se non dovessi riuscire a compilare il codice ti allego l'eseguibile per visualizzare tale tabella.


Togo , grazie :D

Ciao

AnonimoVeneziano
26-06-2004, 15:27
Originariamente inviato da Luc@s
have a look (http://www.italios.it/osfromscratch/kout.php)


Grazie anche a te :D

Ciao

Luc@s
02-07-2004, 17:30
giusto per sapere.........come hai poi risolto?

AnonimoVeneziano
02-07-2004, 18:43
Ho risolto impostando la serie di attributi giusti per lo schermo ^^

Prima mettevo "00" che era come "Nero su Nero" , adesso metto diversi colori a seconda di quelli che voglio , come indicato anche nella tabella nel link che mi hai postato :)

Ciao

Luc@s
02-07-2004, 18:48
Originariamente inviato da AnonimoVeneziano
Ho risolto impostando la serie di attributi giusti per lo schermo ^^

Prima mettevo "00" che era come "Nero su Nero" , adesso metto diversi colori a seconda di quelli che voglio , come indicato anche nella tabella nel link che mi hai postato :)

Ciao

hai evoluto il code?
Ma sul libro che mi hai "passato" c'è sta roba??
E il link che ti ho dato era utile?

AnonimoVeneziano
02-07-2004, 18:59
Evoluto il code ... diciamo che l'ho modificato , c'è poco da evolvere :p

Si, sta roba c'è sul libro

Si era utile, grazie :)

Ciao

Luc@s
02-07-2004, 19:05
Originariamente inviato da AnonimoVeneziano
Evoluto il code ... diciamo che l'ho modificato , c'è poco da evolvere :p


Ma in teoria un soft non è l'evoluzione di poche istruzioni?

AnonimoVeneziano
02-07-2004, 19:14
Originariamente inviato da Luc@s
Ma in teoria un soft non è l'evoluzione di poche istruzioni?


Ehm :fagiano:


Ma quando sono troppo poche..... :sofico:


Si, comunque l'ho ottimizzato e adesso usa metà delle istruzioni per fare la stessa cosa :)

Ciao

Luc@s
02-07-2004, 19:21
I want see the program!

AnonimoVeneziano
02-07-2004, 20:23
Ce l'ho sul 286 , quando ho tempo lo posto :P

Ciao