Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 7 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Assembler, min, max v postupnosti

Registrovaný: 23.11.08
Príspevky: 187
Témy: 34
Bydlisko: IP: 209.85....
Príspevok NapísalOffline : 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


Offline

Užívateľ
Užívateľ
Assembler, min, max v postupnosti

Registrovaný: 19.09.06
Prihlásený: 21.04.24
Príspevky: 749
Témy: 31
Bydlisko: Ružomberok&...
Príspevok NapísalOffline : 21.12.2008 20:03

kua, v com to kompilujes, skusil som uz vsetko mozne a stale mi pise nejake erory.


Offline

Užívateľ
Užívateľ
Assembler, min, max v postupnosti

Registrovaný: 28.04.07
Prihlásený: 03.11.09
Príspevky: 133
Témy: 1
Príspevok NapísalOffline : 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.


Offline

Užívateľ
Užívateľ
Assembler, min, max v postupnosti

Registrovaný: 23.11.08
Príspevky: 187
Témy: 34
Bydlisko: IP: 209.85....
Príspevok Napísal autor témyOffline : 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?


Offline

Užívateľ
Užívateľ
Assembler, min, max v postupnosti

Registrovaný: 28.04.07
Prihlásený: 03.11.09
Príspevky: 133
Témy: 1
Príspevok NapísalOffline : 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ť).


Offline

Užívateľ
Užívateľ
Assembler, min, max v postupnosti

Registrovaný: 19.09.06
Prihlásený: 21.04.24
Príspevky: 749
Témy: 31
Bydlisko: Ružomberok&...
Príspevok NapísalOffline : 22.12.2008 15:37

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,


Offline

Užívateľ
Užívateľ
Assembler, min, max v postupnosti

Registrovaný: 23.11.08
Príspevky: 187
Témy: 34
Bydlisko: IP: 209.85....
Príspevok Napísal autor témyOffline : 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


Odpovedať na tému [ Príspevkov: 7 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. TV min. 32" max. 300e

v Monitory, televízory a projektory

2

277

19.01.2015 8:45

liqua1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. c++ min,max cislo a jeho pozicia

v Assembler, C, C++, Pascal, Java

9

1307

23.12.2013 20:10

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Program na vypísanie max a min cifre

v Assembler, C, C++, Pascal, Java

2

356

18.12.2016 21:50

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. porovnavanie 3 premennych a vypis min a max

v Assembler, C, C++, Pascal, Java

9

1687

30.07.2008 23:58

ado21 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. K: Extérny HDD min. 250gb , USB kľúč min 8gb

v Kúpim

0

318

11.01.2012 2:48

notfake Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. polia postupnosti pascal

v Assembler, C, C++, Pascal, Java

6

1188

01.05.2007 20:40

audiotrack Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pascal pole - do utriedenej postupnosti vlozte x

v Assembler, C, C++, Pascal, Java

1

353

06.02.2011 17:06

juho Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Aky max. procak a max grafiku do K8 neo4 ??

v PC zostavy

10

717

25.12.2008 17:11

michal1313 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. P: Kolobežky HT-T4 MAX ( Ninebot G30 MAX )

v Predám

0

152

22.01.2023 11:10

notfake Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Notebook- max. 650€, max. 14,5'' atď.

v Notebooky a netbooky

1

462

14.11.2014 9:49

nescafe Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Assembler

v Assembler, C, C++, Pascal, Java

0

791

31.03.2009 20:10

bbeni Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ASSEMBLER

v Assembler, C, C++, Pascal, Java

8

1723

13.03.2007 20:39

My-reC Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. assembler

v Assembler, C, C++, Pascal, Java

1

1492

10.11.2006 18:14

Marco Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Assembler

v Assembler, C, C++, Pascal, Java

0

708

01.04.2009 21:02

bbeni Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Assembler 8086

v Assembler, C, C++, Pascal, Java

11

1288

19.05.2010 22:38

JR55 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Assembler 8086

v Assembler, C, C++, Pascal, Java

3

605

21.04.2009 20:05

Fico Zobrazenie posledných príspevkov


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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra