Assembler

Programovacie jazyky, rady, poradňa...
-MANeKEN-
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 87
Registrovaný: 24 feb 2006, 9:17
Bydlisko: Genabakis - Darudzistan

Príspevok od používateľa -MANeKEN- »

zdravim.... pliiiis potreboval by som co najsurnejsie poradit... mam taketo zadanie: 14.Zobrazte na zvolene miesta obrazovky pet znakov. Pohybujte postupne kurzorom po celej obrazovke. Ak kurzor narazi na znak, prida k nemu ten isty znak.Osetrite krajne body obrazovky.


Jednu a najpoctatnejsiu vec neviem :D ked je kurzor nad znakom ( v mojom pripade hviezdicka) potrebujem porovnat ci kurzor je nad znakom a napisat vedla... neviem... to kde je kurzor sa uklada do nejakeho registra alebo treba na to nejaku dosovsku funkciu? dik tu je zdrojak:

Kód: Vybrať všetko

zas      segment stack 'stack'
         dw 64
zas      ends

X	equ 1					; zaciatocny riadok
Y	equ 1					; zaciatocny stlpec


DATA    SEGMENT                 ;zaciatok datoveho segmentu
TEXT    DB      '*$'         ;definicia retazca
NR      DB  13,10
XOVA	DB      X	
YOVA	DB  	Y
DATA    ENDS

CODE    SEGMENT                 ;zaciatok kodoveho segmentu
        ASSUME  CS:CODE, DS:DATA, ss:zas        ;direktiva oznamuje

WRITE    MACRO W
    MOV AH,9
    MOV DX,OFFSET W
    INT 21H
    ENDM

CLEAR    MACRO
    MOV AX,0003H           
    INT 10H                
    ENDM

KURZOR    MACRO X,Y
    MOV DL,X                ;PRESUN X-OVEJ SURADNICE DO REGISTRA
    MOV DH,Y                ;PRESUN Y-OVEJ SURADNICE DO REGISTRA
    MOV AX,0200H            ;FUNKCIA NA OBSLUHU KURZORA
    INT 10H
    ENDM

start:      MOV AX, SEG DATA       
              MOV DS, AX
              CLEAR
              KURZOR 9,3              
              WRITE TEXT
              KURZOR 11,8
	      WRITE TEXT
	      KURZOR 22,8              
              WRITE TEXT	
	      KURZOR 2,9              
              WRITE TEXT
	      KURZOR 45,14              
              WRITE TEXT
	      KURZOR 1,1
	      MOV AH,07H          
              INT 21H                
              JMP POKRAC

POKRAC:		KURZOR XOVA,YOVA
		;PUSH CX 
		INC XOVA
		CMP CX, 2Ah   ; << tu porovnavam ci je v registry hviezdicka
		JZ DOPISANIE	
		CMP XOVA, 79
		JZ ZVYSY
		CMP YOVA, 24
		JZ KONIEC
		;POP CX
		JMP POKRAC

ZVYSY:		INC YOVA
		MOV DL,1
		JMP POKRAC

DOPISANIE:	INC XOVA
		WRITE TEXT 
		JMP POKRAC


KONIEC:		MOV AX,4C00H
   	        INT 21H 				
		       


code      ends	
               end start
sry moc to programko nedavam ak je to totalna blbost tam hore :D[/code]
sakoimo
Novice
Novice
Príspevky: 1
Registrovaný: 05 apr 2009, 22:40
Kontaktovať používateľa:

Príspevok od používateľa sakoimo »

Načítajte z klávesnice reťazec znakov ukončený znakom "nového riadku". Slová vo vstupe sú
oddelené najmenej jedným znakom "medzera". Uvažujte aj prvé, resp. posledné slovo vstupu.Určte počet slov dlhších ako 5 znakov potreboval by som pomoc,cenu dohodneme
vsimol som si ze programator to vie tak pls pomoz mi
programator
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 18 apr 2005, 8:31
Bydlisko: Papua new Guinea
Kontaktovať používateľa:

Príspevok od používateľa programator »

Pre ktoru platformu to potrebujete ? (8080, 8086, ...)
rusnak-cobra
Novice
Novice
Príspevky: 3
Registrovaný: 08 apr 2009, 13:23
Bydlisko: KOLONICA
Kontaktovať používateľa:

Re: Assembler

Príspevok od používateľa rusnak-cobra »

Caute, tak ja mam podobne zadanie jak je toto:
Jerrynko napísal:Načítajte z klávesnice reťazec znakov ukončený znakom "nového riadku".
Slová vo vstupe sú oddelené najmenej jedným znakom "medzera".
Uvažujte aj prvé, resp. posledné slovo vstupu. Určte počet slov obsahujúcich len znaky,
ktorých ASCII kódy tvoria klesajúcu postupnosť (krok -1).
Počet (0-99) vytlačte desiatkovo.
ale trochu ine, teda:
Načítajte z klávesnice reťazec znakov ukončený znakom "novéhoriadku". Nech slovo je postupnosť znakov medzi dvoma znakmi
"medzera". Určte počet slov obsahujúcich len susediace znaky
(rozdiel ASCII kodov je +1,-1). Počet vytlačte šestnástkovo.

ja ho mam vytvorene v 8086 ale potrebujem ho v 8080 tak ak by ste niekto boli ochotny a pomohli... VOPRED DAKUJEM

Kód: Vybrať všetko

A           SEGMENT
            ASSUME CS:A,DS:A
            ORG 100H


START:
		MOV CX,0	; POUZIJE SA AKO POCITADLO SLOV
		MOV BH,1	; POUZIJE SA AKO PRIZNAK, ZE JE TO VELKE PISMENO
	
@ZACCYKLU:	MOV AH,0	; CISLO SLUZBY
		INT 16H		; VOLANIE PRERUSENIA - VRATI STLACENU KLAVESU
		MOV AH,0EH	; SLUZBA NA VYPIS OBRAZOVKY
		INT 10H		; VYPIS ZNAKU
	
@ZACCYKLU2:
		MOV BL,AL	; ULOZENIE PRVEHO ZNAKU

		MOV AH,0	; CISLO SLUZBY
		INT 16H		; VOLANIE PRERUSENIA - VRATI STLACENU KLAVESU
		MOV AH,0EH	; SLUZBA NA VYPIS OBRAZOVKY
		INT 10H		; VYPIS ZNAKU

		ADD BL
		CMP AL,BL	; POROVNANIE S 'A' (65)
		JZ @ZACCYKLU2	; BOL ZADANY NESPRAVNY ZNAK, MENSI AKO 'A'
		DEC BL
		DEC BL
		CMP AL,BL	; POKRACUJE, AK AL > 'A'
		JZ @ZACCYKLU2	; AK JE AL > 'Z'
		CMP AL,20H	; AK JE TO MEDZERA
		JZ @NOVESLOVO
		CMP AL,0DH	; AK TO BOL ENTER
		JZ @KONIEC

		MOV BH,0	; BOL ZADANY NESPRAVNY ZNAK
		JMP @ZACCYKLU2	; IDE NA ZACIATOK CYKLU


@NOVESLOVO:	CMP BH,0
		JZ @ZACCYKLU
		ADD CX
		MOV BH,1
		JMP @ZACCYKLU


@KONIEC:	CMP BH,1
		JZ @VYPIS
		ADD CX


@VYPIS:		MOV BX,4

@CYKLUS2:
		MOV AL,CH	; ULOZENIE HORNEJ CASTI VYSLEDKU DO AL
		AND AL,F0H	; OSTANU LEN 12, 13, 14 BIT
		SHR AL,4	; POSUN O 4 BITY DOPRAVA, DOSTANEME 8-CKOVY ZNAK
		ADD AL,30H	; PRIPOCITANIE ASCII HODNOTY '0'
		MOV AH,0EH	; SLUZBA NA VYPIS ZNAKU
		INT 10H		; VYPIS ZNAKU
		SHL CX,4	; POSUN VYSLEDKU O 3 BITY DOLAVA (DOSTANEME DALSIU CIFRU)
		DEC BX
		CMP BX,0	; AK BX > 0
		JA @CYKLUS2

		INT 20H		; KONIEC

A ENDS
END START
Luk1
Light Expert
Light Expert
Príspevky: 55
Registrovaný: 13 dec 2008, 15:35
Kontaktovať používateľa:

Príspevok od používateľa Luk1 »

caute mohol by mi niekto pls vysvetli a popisat ako funguje tento program co vlastne robia prikazy pop push psw a porobne ako funguje ten prevod ? bol by som velmi vdacny, prog vlastne po zadani retazca vypise poce slov ktore maju viac cisel ako pismen velkej abecedy, dik

Kód: Vybrať všetko

org 1000

dcx sp			;inicializacia zasobnika (0FFFFh)

lxi h,text		;vypis text
call putstr

lxi h,text1		;vypis text1
call putstr

lxi d,vlozeny		;adresa pre vstup retazca
call getline

lxi b,vlozeny

mvi d,0 		;pocet cislic v slove
mvi e,0			;pocet velkych pismen v slove 
push psw		;vlozime si nulu do zasobnika, pocet vyhovujucich slov
jmp char_loop

char:
mvi d,0			;vynulovanie pocitadla
mvi e,0			;vynulovanie pocitadla
char_loop:			;citanie znakov a pocitanie cislic v slove
ldax b			;nacitanie znaku z retazca
inx b			;posun v retazci doprava
cpi 10			;porovnanie pre koniec nacitavania, enter
jz koniec_nacitania		;
cpi 32 			;porovnanie na koniec slova, space=medzera
jz pocet_slov		
cpi '0'			;vacsie alebo rovne ako 0
jc pismena		
cpi '9' + 1		;mensie alebo rovne ako 9
jnc pismena
inr d			;zvysenie poctu cislic o 1
jmp char_loop

pismena:
cpi 'A'			;vacsie alebo rovne ako A
jc char_loop		
cpi 'Z' + 1		;mensie alebo rovne ako Z
jnc char_loop
inr e			;zvysenie poctu pismen o 1
jmp char_loop


pocet_slov:	;pocitanie vyhovujucich slov
mov a,d		;presun hodnoty z registra D do akumulatora
cmp e		;porovnanie akumulatora a registra E
jc char		;ak je pismen viac skoc na char
jz char		;ak je pismen rovnako vela ako cislic skoc na char, osetrene medzery
pop psw		;vyber zo zasobnika do akumulatora
inr a			;zvysenie poctu vyhovujucich slov
push psw 			;vlozenie z akumulatora do zasobnika
jmp char

koniec_nacitania: 	;osetrenie ak sme spracovali posledne slovo
mov a,d
cmp e			;porovnanie ci slovo obsahuje aspon 2 cislice
jc prevod
jz prevod
pop psw
inr a			;zvysenie poctu vyhovujucich slov
push psw
jmp prevod

prevod:		;prevod 4b binarneho cisla na sestnastkove [jednotky]	 	
pop psw
mov h,a
ani 15			;logicky sucin
push psw
cpi 10			;porovnananie ci je cislo mensie ako 10	
jc prevod1
pop psw			;ak je mensie skoci na koniec1
mov b,a
mvi a,7			
add b			;pripocitanie 7, lebo su to pismena, vacsie ako 10
push psw

prevod1:		;prevod 4b binarneho cisla na sestnastkove [desiatky]
mov a,h
rrc			;posun o 1b doprava
rrc
rrc
rrc
ani 15			;logicky sucin
push psw
cpi 10			;porovnananie ci je cislo mensie ako 10
jc vypis			;ak je mensie skoci na koniec1
pop psw
mov b,a
mvi a,7
add b			;pripocitanie 7
push psw

vypis:		;vypis poctu slov sestnastkovo
lxi h,text2
call putstr

pop psw
adi '0'
call putchar		;vypisanie sestanstkovej cislice [desiatky]

pop psw
adi '0'
call putchar		;vypisanie sestanstkovej cislice[jednotky]

call newline
hlt

include 'examples\8080\include\getline.inc'
include 'examples\8080\include\putstr.inc'
include 'examples\8080\include\putchar.inc'
include 'examples\8080\include\newline.inc'
text: db 'Program zistuje pocet slov obsahujucich viac cislic ako pismen velkej abecedy',10,13
text1: db 'Zadaj retazec, ukonci stlacenim enter  ',0,10,13
text2: db 10,13,'Pocet slov, v hexa tvare: 0x',0
vlozeny: ds 50
tthomas
Novice
Novice
Príspevky: 2
Registrovaný: 15 máj 2009, 7:50

pls help

Príspevok od používateľa tthomas »

caute chalani pls viete mi niekto pomoct so zadanim???



Napiste program, ktory nacita z klavesnice retazec maximalne 85 znakov, spravi kontrolny vypis retazca na obrazovku , a potom vykona ulohu.
Ulohu realizujte ako externu proceduru. Na spracovanie pola znakov pouzite retazcove instrukcie.

vypise pozicie prvych dvoch velkych pismen v retazci

neviem vobec pouzit tie retazove instrukcie...


pls help
Napísať odpoveď