| | |
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Autor | Správa |
---|
Registrovaný: 23.11.08 Príspevky: 187 Témy: 34 Bydlisko: IP: 209.85.... | Napísal Logik: 21.12.2008 14:43 | |
|
Caute, mam problem najst minimum a maximum v zadanej postupnosti cisel. Funguje mi to pre kladne cisla, ale akonahle zmenim niektore cislo za zaporne, tak to nejde. A chcem to spravit tak, ze v postupnosti budu zaporne aj kladne cisla, program najde min, max a vypise. Bolo by fajn, keby to vypisalo aj index minima, maxima.
Kód: ;Definujte postupnost celych cisel <-32768; 32768> ;Najdite minimum & maximum, vypiste ich na obrazovku s indexom
.MODEL small .STACK 100h .DATA cislo DB 6,7 dup (?) ;alokacia, max 6 pole DW 1, 10, 100, 1000, 10000 ;definicia postupnosti (pola) Dlzka EQU $-Pole ;EQU znamena const, .CODE .386
Read PROC ;vystupny parameter ax mov dx, offset cislo mov bx, offset cislo mov di, 2 mov ah, 0Ah int 21h mov ah, 2 mov dl, 0Ah int 21h mov ax, 0 mov dx, 0
konverzia: mov cl, [bx + di] cmp cl, 0dH jz inicializacia and cl, 00001111b ;prevedie znak na cislo .386 imul ax, 10 mov ch, 0 add ax, cx inc di jmp konverzia inicializacia: ret Read ENDP
Write PROC ;vstupny parameter ax mov bx, offset pole mov di, 0
delenie: mov cx, 10 mov dx, 0 div cx add dl, '0' ;konverzia na ASCII kod mov [bx + di], dl inc di cmp ax, 0 jnz delenie
vypis: dec di mov dl, [bx + di] mov ah, 2 int 21h cmp di, 0 jnz vypis ;ak di sa nerovna nule, skoc na vypis
ret Write ENDP
Zac: ;Hlavny program mov ax, @data mov ds, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov ax, 0FFFh ;do ax presunieme maximum: najvissie hexadecimalne cislo mov cx, Dlzka/2 mov di, 0 ;pocitadlo di nastavime na 0 mov bx, Offset Pole ;bx nastavime na zaciatok pola
cyklus2: cmp ax, [bx+di] ;porovnaj prvok pola s maximom jb dalej2 ;ak je prvok pola mensi ako maximum skoc na navestie dalej mov ax, [bx+di] ;inak do ax presun prvok pola dalej2: inc di inc di ;dvakrat inkrementujeme pocitadlo loop cyklus2
call Write ;zavolaj procedure write ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov dl, 0Dh int 21h mov dl, 0Ah int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov ax, 00000h ;do ax presunieme minimum: najnizssie hexadecimalne cislo mov cx, Dlzka/2 mov di, 0 ;pocitadlo di nastavime na 0 mov bx, Offset Pole ;bx nastavime na zaciatok pola
cyklus: cmp ax, [bx+di] ;porovnaj prvok pola s minimom ja dalej ;ak je prvok pola vacsi ako minimum skoc na navestie dalej mov ax, [bx+di] ;inak do ax presun prvok pola dalej: inc di inc di ;dvakrat inkrementujeme pocitadlo loop cyklus
call Write ;zavolaj procedure write ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
koniec: mov ax, 4C00h int 21h END Zac
|
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... |
kua, v com to kompilujes, skusil som uz vsetko mozne a stale mi pise nejake erory.
|
|
Registrovaný: 28.04.07 Prihlásený: 03.11.09 Príspevky: 133 Témy: 1 | Napísal imcold: 21.12.2008 23:15 | |
|
rýchly odhad - v porovnávaní musíš použiť inštrukcie pre skoky uvažujúce znamienka, tj. jg/jl namiesto ja/jb.
|
|
Registrovaný: 23.11.08 Príspevky: 187 Témy: 34 Bydlisko: IP: 209.85.... | Napísal autor témy Logik: 22.12.2008 11:42 | |
|
mne ten zdrojak funguje bez problemov, na kompilaciu pouzivam tasm /z a tlink /v ;len to potrebujem prerobit na zaporne cisla...ked zmenim postupnost
Kód: pole DW -1, -10, 100, 1000, 10000
a zmenim namiesto ja/jb dam jg/jl, vypise
65526
13621
ale malo by vypisat
-1
10000
ako to upravim?
|
|
Registrovaný: 28.04.07 Prihlásený: 03.11.09 Príspevky: 133 Témy: 1 | Napísal imcold: 22.12.2008 14:35 | |
|
Musíš upraviť Write tak, aby správne konvertovalo záporné čísla: 65526 je -10 interpretované ako kladné číslo. Ako sa ti tam dostalo 13621, nemám tušenia (a nemám v pláne si to kompilovať a testovať).
|
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... |
v procedure write mas
Kód: mov bx,offset pole nahrad to s Kód: mov bx,offset cislo
a musis mat nahradene tie podmienene skoky a proceduru write tak ako chcel imcold,
|
|
Registrovaný: 23.11.08 Príspevky: 187 Témy: 34 Bydlisko: IP: 209.85.... | Napísal autor témy Logik: 22.12.2008 22:21 | |
|
uz mi to ide, stacilo pouzit podmienene skoky jnl/jl namiesto ja/jb a pri vypise v procedure Write testovat zaporne cislo pouzitim podmieneneho skoku jnl, ak je zaporne tak vypisat '-' a od 0FFFFh odpocitat dane cislo, vlastne vypiseme dvojkovy doplnok a pred neho '-'... tu je zdrojak:
Kód: ;Definujte postupnost celych cisel <-32768; 32768> ;Najdite minimum & maximum, vypiste ich na obrazovku
.MODEL small .STACK 100h; .DATA cislo DB 6,7 dup (?) ;alokacia, max 6 pole DW -10, -1, 0, 1000, 10000 ;definicia postupnosti (pola) Dlzka EQU $-Pole ;EQU znamena const, pom DW 0 .CODE .386
Write PROC ;vstupny parameter ax mov bx, offset pom mov di, 0 mov dx, 0FFFFh cmp ax,0 jnl delenie ;ak nie je mensie ako 0 skoc na navestie delenie ;inak je zaporne cislo sub dx,ax inc dx mov ax,dx push ax
mov dl, '-' mov ah, 2 int 21h pop ax
delenie: mov cx, 10 mov dx, 0 div cx add dl, '0' ;konverzia na ASCII kod mov [bx + di], dl inc di cmp ax, 0 jnz delenie
vypis: dec di mov dl, [bx + di] mov ah, 2 int 21h cmp di, 0 jnz vypis ;ak di sa nerovna nule, skoc na vypis
ret Write ENDP
Zac: ;Hlavny program mov ax, @data mov ds, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov ax, 07FFFh ;do ax presunieme maximum: najvyssie hexadecimalne cislo mov cx, Dlzka/2 mov di, 0 ;pocitadlo di nastavime na 0 mov bx, Offset Pole ;bx nastavime na zaciatok pola
cyklus2: cmp ax, [bx+di] ;porovnaj prvok pola s maximom jl dalej2 ;ak je maximum mensie ako prvok pola skoc na navestie dalej2 mov ax, [bx+di] ;inak do ax presun prvok pola dalej2: inc di inc di ;dvakrat inkrementujeme pocitadlo loop cyklus2
call Write ;zavolaj procedure write ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov dl, 0Dh ;vypis int 21h mov dl, 0Ah ;ENTERU int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov ax, 08000h ;do ax presunieme minimum: najnizssie hexadecimalne cislo mov cx, Dlzka/2 mov di, 0 ;pocitadlo di nastavime na 0 mov bx, Offset Pole ;bx nastavime na zaciatok pola
cyklus: cmp ax, [bx+di] ;porovnaj prvok pola s minimom jnl dalej ;ak je minimum vacsie ako prvok pola skoc na navestie dalej mov ax, [bx+di] ;inak do ax presun prvok pola dalej: inc di inc di ;dvakrat inkrementujeme pocitadlo loop cyklus
call Write ;zavolaj procedure write ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
koniec: mov ax, 4C00h int 21h END Zac
|
|
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| TV min. 32" max. 300e v Monitory, televízory a projektory | 2 | 277 | 19.01.2015 8:45 liqua1 | | c++ min,max cislo a jeho pozicia v Assembler, C, C++, Pascal, Java | 9 | 1307 | 23.12.2013 20:10 BX | | Program na vypísanie max a min cifre v Assembler, C, C++, Pascal, Java | 2 | 356 | 18.12.2016 21:50 BX | | porovnavanie 3 premennych a vypis min a max v Assembler, C, C++, Pascal, Java | 9 | 1687 | 30.07.2008 23:58 ado21 | | K: Extérny HDD min. 250gb , USB kľúč min 8gb v Kúpim | 0 | 318 | 11.01.2012 2:48 notfake | | polia postupnosti pascal v Assembler, C, C++, Pascal, Java | 6 | 1188 | 01.05.2007 20:40 audiotrack | | pascal pole - do utriedenej postupnosti vlozte x v Assembler, C, C++, Pascal, Java | 1 | 353 | 06.02.2011 17:06 juho | | Aky max. procak a max grafiku do K8 neo4 ?? v PC zostavy | 10 | 717 | 25.12.2008 17:11 michal1313 | | P: Kolobežky HT-T4 MAX ( Ninebot G30 MAX ) v Predám | 0 | 152 | 22.01.2023 11:10 notfake | | Notebook- max. 650€, max. 14,5'' atď. v Notebooky a netbooky | 1 | 462 | 14.11.2014 9:49 nescafe | | Assembler v Assembler, C, C++, Pascal, Java | 0 | 791 | 31.03.2009 20:10 bbeni | | ASSEMBLER v Assembler, C, C++, Pascal, Java | 8 | 1723 | 13.03.2007 20:39 My-reC | | assembler v Assembler, C, C++, Pascal, Java | 1 | 1492 | 10.11.2006 18:14 Marco | | Assembler v Assembler, C, C++, Pascal, Java | 0 | 708 | 01.04.2009 21:02 bbeni | | Assembler 8086 v Assembler, C, C++, Pascal, Java | 11 | 1288 | 19.05.2010 22:38 JR55 | | Assembler 8086 v Assembler, C, C++, Pascal, Java | 3 | 605 | 21.04.2009 20:05 Fico |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|