Pomoc s assembler 86 – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Pomoc s assembler 86 – Assembler – Fórum – Programujte.comPomoc s assembler 86 – Assembler – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
firin
~ Anonymní uživatel
3 příspěvky
8. 5. 2009   #1
-
0
-

caute, mam program v asm 86 ale nepracuje mi spravne, ma nacitat retazec znakov a urcit pocet slov s rovnakym poctom velkych pismen a cislic, nejako mi to blbne a zle pocita, mame uvazovat aj prve aj posledne slovo, dakujem

JUMPS			; toto je direktíva pre podporu dlhých skokov

.MODEL SMALL ; tu som nadefinoval dátový model
.STACK 100H ; tu zasa veľkosť zásobníka
.DATA ; táto oblasť sa nastaví ako dátový segment - obsahuje premenné programu

ZNAK DB 0 ; tu sa uklada nacitany znak
VELKE DW 0
CISLA DW 0
JESLOVO DB 0
POCET DW 0
OZNAM DB "Napiste text a potvrdte ho Enterom:",10,13,"$"
TEXTIK DB 10,13,"Pocet slov s rovnakym poctom cislis a velkych znakov je: $"

.CODE ; kódovy segment - obsahuje všetky inštrukcie

; vypíše v osmickovej sústave obsah registra AX
Vypis PROC
PUSH AX BX DX ; vloží obsahy registrov do zásobníka

MOV DX,AX ; DX <- AX
MOV BX,32768 ; BX <- 32768
SKOK:
MOV AX,DX ; AX <- DX
MOV DX,0 ; DX <- 0
DIV BX ; AX <- DX:AX / BX, DX <- DX:AX MOD BX

PUSH BX ; uloží obsah registra BX do zásobníka
MOV BX,AX ; BX <- AX
MOV AH,02H ; číslo funkcie pre výpis znaku
PUSH DX ; uloží slovo zo zásobníka do registra DX
MOV DL,'0' ; DL <- ASCII kód '0'
ADD DL,BL ; DL <- DL + BL
INT 21H ; vykonanie funkcie
POP DX ; uloží slovo zo zásobníka do registra DX
POP BX ; a BX

PUSH AX DX ; uloží obsahy registrov do zásobníka
MOV DX,0 ; DX <- 0
MOV AX,BX ; AX <- BX
MOV BX,8 ; BX <- 8
DIV BX ; AX <- DX:AX / BX, DX <- DX:AX MOD BX
MOV BX,AX ; BX <- AX
POP DX AX ; uloží slová zo zásobníka do registrov

CMP BX,0 ; porovná BX a 0
JNZ SKOK ; a ak sa nerovnajú skočí na SKOK

POP DX BX AX ; uloží slová zo zásobníka do registrov
RET ; návrat na miesto volania funkcie
ENDP Vypis

; testuje, ci dane slovo splna podmienku
Testuj PROC
PUSH AX

CMP JESLOVO,0
JZ TESTUJ2
MOV AX,CISLA
CMP AX,VELKE
JNZ TESTUJ2

INC POCET
TESTUJ2:
MOV JESLOVO,0
MOV VELKE,0
MOV CISLA,0

POP AX
RET
ENDP Testuj


START:
MOV AX,@DATA ; AX = segment oblasti DATA
MOV DS,AX ; ten som nasledne uložil do DS

MOV AH,09H ; AH = číslo funkcie pre výpis reťazca
MOV DX,OFFSET OZNAM ; DX = offset OZNAM
INT 21H ; vykonanie funkcie
CITANIE:
; nacitam znak z klavesnice do AL
MOV AH,00H
INT 16H

; a ulozim ho do premennej ZNAK
MOV ZNAK,AL

; porovná AL so znakmi konca slova (medzera, koniec riadku)
CMP ZNAK,32
JZ TESTIK
CMP ZNAK,10
JZ KONIEC
CMP ZNAK,13
JZ KONIEC

; ak bol nacitany nevyditelny znak tak sa neberie v uvahu
CMP ZNAK,32
JL CITANIE

MOV AH,02H ; chcem vypisat dany znak
MOV DL,ZNAK ; DL = ASCII hodnota tohto znaku
INT 21H ; vypis znaku

MOV JESLOVO,1

CMP ZNAK,48 ; ak je znak mensi ako znak 0
JL CITANIE ; skoci sa na navestie CITANIE
CMP ZNAK,90 ; ak je znak vacsi ako znak Z
JG CITANIE ; tak je to to iste

CMP ZNAK,58
JL PRIDCIS
CMP ZNAK,64
JG PRIDVEL


JMP CITANIE
PRIDCIS:
INC CISLA

JMP CITANIE
PRIDVEL:
INC VELKE

JMP CITANIE
TESTIK:
MOV AH,02H ; chcem vypisat dany znak
MOV DL,32 ; DL = ASCII hodnota medzery
INT 21H ; vypis znaku

CALL Testuj

JMP CITANIE
KONIEC:
CALL Testuj

MOV AH,09H ; AH = číslo funkcie pre výpis reťazca
MOV DX,OFFSET TEXTIK ; DX = offset TEXTIK
INT 21H ; vykonanie funkcie

MOV AX,POCET
CALL Vypis

MOV AX,4C00H ; AX = číslo funkcie pre ukončenie programu
INT 21H ; vykonanie funkcie
END START

Nahlásit jako SPAM
IP: 95.102.14.–
Reklama
Reklama
bbeni0
Návštěvník
8. 5. 2009   #2
-
0
-

ako a v com si to skompiloval ?

Nahlásit jako SPAM
IP: 85.248.5.–
firin
~ Anonymní uživatel
3 příspěvky
8. 5. 2009   #3
-
0
-

To bbeni : tasm a tlink

Nahlásit jako SPAM
IP: 95.102.14.–
firin
~ Anonymní uživatel
3 příspěvky
8. 5. 2009   #4
-
0
-

joj ja som lolo, som myslel ze to je zle lebo ked som zadal napriklad as tak mi vypisalo 1, pritom to je dobre kedze je tam 0 velkych a 0 cisel :D

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

Podobná vlákna

Assembler pomoc — založil pontiac

Assembler-pomoc — založil tichous

Assembler 8080 pomoc — založil bbeni

POmoc s assembler 8080 pls — založil firinko

C++ vs Assembler — založil Dodo

 

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