Assembler, zmenit vystup – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Assembler, zmenit vystup – Assembler – Fórum – Programujte.comAssembler, zmenit vystup – Assembler – Fórum – Programujte.com

 

12. 5. 2009   #1
-
0
-


Nevie niekto ako by som zmenila tento program...stale mi to vypisuje vysledok osmickovo...ale potrebujem aby to bolo sestnastkovo...neviete to niekto zmenit?




.model small
.stack 100h

; -----------------------------------------------------------------------------------------------
; -----------------------------------------------------------------------------------------------
; ### data ###

.data
str1 DB "Zadaj retazec: ",'$'
str2 DB "Pocet vyhovujucich slov je ",'$'
str3 DB "(c) --= XXXXXXXXX =-- 2oo9",'$'
str4 DB "Zadanie c.308 - Strojovo orientovane jazyky",'$'
buffer DB 201 dup(200)

; -----------------------------------------------------------------------------------------------
; -----------------------------------------------------------------------------------------------
; ### code ###

.code

; -----------------------------------------------------------------------------------------------
; ### procedury ###


; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ## getStr
; # - nacita retazec z klavesnice ukonceny znakom '\n' a ulozi ho do buffera
; -----------------

getStr proc near
mov ah,01h ; vstup z klavesnice
getLoop: int 21h
cmp al,0dh ; testujeme koncovy znak (\n)
je getEnd ; ak bol, tak koniec nacitavania
mov [bx],al ; inak ulozime znak do buffera
inc bx ; BX nastavime na dalsi znak
jmp getLoop ; nacitaj dalsi znak
getEnd: mov byte ptr [bx],'$' ; CR skonvertujem na '$'
ret
getStr endp

; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ## putStr
; # - vypise retazec na ktory ukazuje BX a je ukonceny znakom '$'
; -----------------

putStr proc near
mov ah,2h ; zobraz znak
nextChar: cmp byte ptr [bx],'$' ; testujeme koncovy znak
je foundEnd ; ak bol, tak koniec
mov dl,[bx] ; inak ho vypiseme
int 21h
inc bx ; BX nastavime na dalsi znak
jmp nextChar ; vypis dalsieho znaku
foundEnd: ret
putStr endp

; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ## newLine
; # - vypise znak CR a LF (odriadkuje)
; -----------------

newLine proc near
mov ah,02h ; zobraz znak
mov dl,0dh ; CR
int 21h
mov dl,0ah ; LF
int 21h
ret
newLine endp

; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ## testChar
; # - zisti ci je znak [bx] male/velke pismeno, obsluzi pocitadla znakov
; # CL = pocet malych pismen, CH = pocet velkych pismen
; -----------------

testChar proc near

; +++++++++ rozoznavanie malych/velkych pismen +++++++++

cmp byte ptr [bx],'A' ; kontrolujeme velke pismeno - dolna hranica
jl Tend ; <'A' (nebude to pismeno)
cmp byte ptr [bx],'Z' ; kontrolujeme velke pismeno - horna hranica
jle Tinc1 ; <='Z' (je to velke pismeno)

cmp byte ptr [bx],'a' ; kontrolujeme male pismeno - dolna hranica
jl Tend ; <'a' (nebude to male pismeno)
cmp byte ptr [bx],'z' ; kontrolujeme male pismeno - horna hranica
jle Tinc2 ; <='z' (je to male pismeno)

jmp tend ; >'Z' (nieje to male pismeno)

; +++++++++ pocitanie malych/velkych +++++++++

Tinc1: inc ch ; velke pismeno
jmp tend

Tinc2: inc cl ; male pismeno
jmp tend

Tend: ret
testChar endp


; -----------------------------------------------------------------------------------------------
; -----------------------------------------------------------------------------------------------
; ### source ###

start:
mov ax,@DATA
mov ds,ax

mov bx,offset str4 ; nazov programu
call putStr
call newLine
call newLine


; +++++++++ vstup od pouzivatela +++++++++

mov bx,offset str1 ; vyzva na zadanie retazca
call putStr
mov bx,offset buffer ; nacitame retazec do 'buffer'
call getStr
call newLine ; odriadkujem


; +++++++++ analyza zadanych udajov +++++++++

mov bx,offset buffer ; prvy znak
mov cx,0 ; znulujeme pocitadla znakov
mov dx,0
push dx ; odlozime DX (pocitadlo vyhovujucich slov)

nextCh: cmp byte ptr [bx],'$' ; testujeme koncovy znak
je space ; ak bol, tak kontrola posledneho slova a koniec
cmp byte ptr [bx],' ' ; testujeme medzeru = zaciatok/koniec slova
je space

call testChar

inc bx ; dalsi znak
jmp nextCh


; +++++++++ zaciatok/koniec slova +++++++++

space: sub cl,ch ; (pocet malych) - 2*(pocet velkych)
sub cl,ch ; ak vyhovuje, vysledok je 0 (CX=0)

cmp cl,0 ; testujeme ci je spravny pocet malych/velkych
jne chWend ; ak nie, tak skok

pop dx ; obnovime pocitadlo spravnych slov
inc dx ; aktualne slovo vyhovovalo
push dx ; odlozime spat

chWend: cmp byte ptr [bx],'$' ; testujeme koncovy znak
je finish ; ak bol, tak konec analyzy slov

mov cx,0 ; znulujeme pocitadlo znakov
inc bx ; dalsi znak
jmp nextCh


; +++++++++ vypisanie vysledku v osmickovej sustave +++++++++

finish: mov bx,offset str2 ; vypis o vysledkoch
call putStr

pop dx ; obnovime DX (pocitadlo vyhovujucich slov)
mov dh,dl ; do DH odlozime pocitadlo (DL potrebujeme na vystup)

rol dl,2 ; najvyssi rad
and dl,00000011b
add dl,30h ; prevedieme na ASCII kod
int 21h

mov dl,dh ; stredny rad
ror dl,3
and dl,00000111b
add dl,30h ; prevedieme na ASCII kod
int 21h

mov dl,dh ; najnizsi rad
and dl,00000111b
add dl,30h ; prevedieme na ASCII kod
int 21h


; +++++++++ copyright a koniec programu +++++++++

call newLine
call newLine
mov bx,offset str3 ; vypis copyrightu
call putStr

mov ax,4c00h ; ukoncenie programu (0=koniec bez chyby)
int 21h

end start

; -----------------------------------------------------------------------------------------------

Nahlásit jako SPAM
IP: 195.168.209.–
o-lox0
Super člen
12. 5. 2009   #2
-
0
-

Milá Multi jazyková tazatelko :-)

definoval bych řetězec
hexa DB '0123456789ABCDEF'

pak před výpisem
mov SI,offset hexa

+
a pak tak krásně jak si rotovala a bitově maskovala osmičkově jen ANDuj 16ově
výsledek si místo v DL ukládej nejdřív do BX abys ho takto přičetla:
mov dl,[si+bx]
Int vypis

Nahlásit jako SPAM
IP: 85.71.152.–
13. 5. 2009   #3
-
0
-

no ja neviem ci som blba, alebo to je tym ze som blondina :)) ale mne to stale nejak nejde...neskusis mi to napisat cely program ako to ma byt? :))

Nahlásit jako SPAM
IP: 195.168.209.–
o-lox0
Super člen
13. 5. 2009   #4
-
0
-

Vyber si buď mi napiš jak se vybere třeba znak 3 z řetězce na který ukazuje SI a používáš BX. Jak necháš v reg. BX jen spodní bity pro 0-15...
..a postupně se k tomu dostaneš.
Nebo napiš poutavý odstavec o tom jaké to je být blondýna, když už si to tu vehementně sama nakousla :))

nekončící milodary se tu nerozdávají :))

Nahlásit jako SPAM
IP: 85.71.152.–
13. 5. 2009   #5
-
0
-

To o-lox : Joj, chlapi. To je hrozne s vami, nepomozete a nepomoze :))

Nahlásit jako SPAM
IP: 195.168.209.–
o-lox0
Super člen
13. 5. 2009   #6
-
0
-

To aadulienkaa : ještě chvíli dloubej a napíšu :)), a nevim v takovémto prostředí - nebude náhodou na obloze víc jasno, když řeknu že já jsem žena a ty muž ? :))


last update from Scotland Yard :D
Ponůkám krajší zábavu, kdo má zájem -- táto rádoby žena je samozřejmě muž, je to tentýž člověk jako JohnAbruzzi, ale protože v cyberprostoru se JohnAbruzzi už celkově vyskytuje tolikrát jako žena - blondýna - je možné že to žena skutečně je kódy kopírující žena bloudivě tápající po fórech, to jsou mi věci :-))
Tak konečná je nejspíš (on kdoví) u chlapa ročníku 83, Juraje, kterej na mě už začíná mít asi svůj prašivej vliv, brrr, dDesmondD, podezření je u andrealovasova a dokud bude živ tak milióny nových zkomolenin :D rodokmenů

Nahlásit jako SPAM
IP: 85.71.152.–
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, 125 hostů

Podobná vlákna

Jak změnit TD na TH? — založil pidiďundina

Změnit název ? — založil JerryM

Chcete změnit svět? — založil janmo

Jak změnit text... — založil VojtaK

 

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