[ 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 | 34
Bydlisko: IP: 209.85....
NapísalOffline : 21.12.2008 14:43 | Assembler, min, max v postupnosti

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ý: 19.02.26
Príspevky: 749
Témy: 31 | 31
Bydlisko: Ružomberok&...
NapísalOffline : 21.12.2008 20:03 | Assembler, min, max v postupnosti

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 | 1
NapísalOffline : 21.12.2008 23:15 | Assembler, min, max v postupnosti

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 | 34
Bydlisko: IP: 209.85....
Napísal autor témyOffline : 22.12.2008 11:42 | Assembler, min, max v postupnosti

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 | 1
NapísalOffline : 22.12.2008 14:35 | Assembler, min, max v postupnosti

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ý: 19.02.26
Príspevky: 749
Témy: 31 | 31
Bydlisko: Ružomberok&...
NapísalOffline : 22.12.2008 15:37 | Assembler, min, max v postupnosti

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 | 34
Bydlisko: IP: 209.85....
Napísal autor témyOffline : 22.12.2008 22:21 | Assembler, min, max v postupnosti

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


 [ Príspevkov: 7 ] 


Assembler, min, max v postupnosti



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

342

19.01.2015 8:45

liqua1

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

Program na vypísanie max a min cifre

v Backend

2

426

18.12.2016 21:50

BX

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

c++ min,max cislo a jeho pozicia

v Backend

9

1437

23.12.2013 20:10

BX

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

porovnavanie 3 premennych a vypis min a max

v Ostatné

9

1779

30.07.2008 23:58

ado21

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

K: Extérny HDD min. 250gb , USB kľúč min 8gb

v Bazár

0

407

11.01.2012 2:48

notfake

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

polia postupnosti pascal

v Ostatné

6

1279

01.05.2007 20:40

audiotrack

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

pascal pole - do utriedenej postupnosti vlozte x

v Ostatné

1

413

06.02.2011 17:06

juho

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

818

25.12.2008 17:11

michal1313

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

P: Kolobežky HT-T4 MAX ( Ninebot G30 MAX )

v Bazár

0

236

22.01.2023 11:10

notfake

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

Notebook- max. 650€, max. 14,5'' atď.

v Notebooky a netbooky

1

559

14.11.2014 9:49

nescafe

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

Assembler

v Backend

0

873

31.03.2009 20:10

bbeni

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

ASSEMBLER

v Backend

8

1870

13.03.2007 20:39

My-reC

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

assembler

v Backend

1

1589

10.11.2006 18:14

Marco

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

Assembler

v Backend

0

792

01.04.2009 21:02

bbeni

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

Assembler - úloha

v Backend

2

993

22.10.2007 15:04

programator

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

Assembler úloha

v Backend

0

874

02.02.2008 7:37

HT



© 2005 - 2026 PCforum, edited by JanoF