Teletext do boxu – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Teletext do boxu – Assembler – Fórum – Programujte.comTeletext do boxu – Assembler – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Matěj Andrle
~ Anonymní uživatel
1329 příspěvků
22. 4. 2013   #1
-
0
-

Dobrý den,

snažím se vypsat inteligentně text - tedy wrapovat v mezerách. Postupuji tak, že si vložím si do záslobníku, načítám byte per byte slovo dokud nenajdu mezeru, či vynucení nového řádku - pro což jsem si vyčlenil \$. Pokud najdu mezeru, podívám se, zda se toto slovo vejde do řádku - jehož velikost je uchována v cl (používám lodsb, který char ukládá do al). Pokud ne, či pokud došlo na vynucení řádku - \$, zavolá se .newLine - který jen posune kurzor o řádek dolů a anuluje počítanou velikost řádku. Nyní vypíše slovo do teletextu byte per byte, dokud nenajde mezeru, či vynucení - tentokrát se ale vrací na "zčeknutí" dalšího slova.

OsPrintString:

	line db 0

	pusha
	mov ah, 0Eh					; int 10h teletype function

.loadWord:

	push si
	jmp .chaining

.summary:

	pop si

	cmp [line], cl
	jg .newLine

	jmp .writeWord

.chaining:

	lodsb

	cmp al, 0
	je .summary

	cmp al, 92
	je .chanTestEsc

	cmp al, 32
	je .summary

	inc byte [line]
	jmp .chaining
	
.chanTestEsc:

	lodsb
	cmp al, 36
	je .newLine
	
	inc byte [line]

	cmp al, 92
	je .chanTestEsc
	
	inc byte [line]
	jmp .chaining

.writeWord:

	lodsb						; Get char from string
	cmp al, 0
	je .done						; If char is zero, end of string

	cmp al, 92					; Is escape letter?
	je .testEsc

	int 10h						; Otherwise, print it
	
	cmp al, 32
	je .loadWord
	
	jmp .writeWord

.testEsc:

	lodsb
	cmp al, 36
	je .loadWord
	
	mov bl, al
	mov al, 92
	int 10h
	mov al, bl
	
	cmp al, 92
	je .testEsc
	
	int 10h
	jmp .writeWord

.newLine:

	inc dh
	mov byte [line], 0
	call OsMoveCursor
	jmp .writeWord

Něco je však na mé logice špatně... :) (Něco se přecijen vypíše - ale vidím jen horní konce delších písmen - těsně pod obrazovkou.)

Děkuji.

Nahlásit jako SPAM
IP: 78.136.153.–
Reklama
Reklama
Matěj Andrle
~ Anonymní uživatel
1329 příspěvků
22. 4. 2013   #2
-
0
-

Oprava - nepopoval jsem si ve vynuceném řádku - problém to však nemohlo ovlivnit - v testovaném textu vynucení nemám...

OsPrintString:

	line db 0

	pusha
	mov ah, 0Eh					; int 10h teletype function

.loadWord:

	push si
	jmp .chaining

.summary:

	pop si

	cmp [line], cl
	jg .newLine

	jmp .writeWord

.chaining:

	lodsb

	cmp al, 0
	je .summary

	cmp al, 92
	je .chanTestEsc

	cmp al, 32
	je .summary

	inc byte [line]
	jmp .chaining
	
.chanTestEsc:

	lodsb
	cmp al, 36
	je .pop
	
	inc byte [line]

	cmp al, 92
	je .chanTestEsc
	
	inc byte [line]
	jmp .chaining

.writeWord:

	lodsb						; Get char from string
	cmp al, 0
	je .done						; If char is zero, end of string

	cmp al, 92					; Is escape letter?
	je .testEsc

	int 10h						; Otherwise, print it
	
	cmp al, 32
	je .loadWord
	
	jmp .writeWord

.testEsc:

	lodsb
	cmp al, 36
	je .loadWord
	
	mov bl, al
	mov al, 92
	int 10h
	mov al, bl
	
	cmp al, 92
	je .testEsc
	
	int 10h
	jmp .writeWord

.pop:

	pop si

.newLine:

	inc dh
	mov byte [line], 0
	call OsMoveCursor
	jmp .writeWord

.done:

	popa
	ret
Nahlásit jako SPAM
IP: 78.136.153.–
Matěj Andrle
~ Anonymní uživatel
1329 příspěvků
23. 4. 2013   #3
-
0
-

Neee - tak to je fatk moc... :) Nemohu deklarovat proměnnou v lokální adrese - stačilo jí dát pod tento zázrak... (deklaraci)

Nahlásit jako SPAM
IP: 78.136.153.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 162 hostů

Podobná vlákna

Teletext — založil stoker303

Mazani boxu — založil Hurys

Pole picture boxu? — založil Karel

C# - Enabled na Check boxu — založil polerok

Winapi pozadí Edit boxu — založil vollf82

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý