bubble sort-assembly

συζητήσεις για assembly

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
pnastis
Δημοσιεύσεις: 3
Εγγραφή: 27 Σεπ 2007 18:10

bubble sort-assembly

Δημοσίευση από pnastis » 27 Σεπ 2007 18:21

Η άσκηση έχει ως εξής. Θα διαβάζει ένα string απο το κυρίως πρόγραμμα και ένα χαρακτήρα. + ή - . αν ειναι '+' θα κανει αύξουσα ταξινόμηση αλλιώς αν ειναι '-' φθίνουσα. πιο κάτω έχω τον κώδικα της συνάρτησης. Αν και δεν μου βγάζει κανένα error παρά μόνο 2-3 warnings που είναι για τα 'jmp' δεν μου τρέχει. αν μπορεί κάποιος να με βοηθήσει θα του είμαι πολυ ευγνόμων..

sort PROC
push bp
mov bp,sp

mov bx,[bp+4] ; symvolo

mov dx,bx ; dx=bx=symvolo
cmp dx,'+' ; an einai '+' tha kanei ascending sorting
je asc
cmp dx,'-' ; alliws an einai '-' tha kanei descending
je desc
jmp wrong



asc: mov ah,9
lea dx,asce
int 21h

mov dh,1 ; dh=exwterikos metritis

zero: mov bx,[bp+6] ; bx=string
mov dl,1 ; dl=esswterikos metritis


swap: mov cl,[bx] ; 1o stoixeio tou pinaka
mov ch,[bx+1] ; 2o stoixeio tou pinaka

cmp cl,ch
jle dont_swap

mov al,cl ; temp=array
mov [bx],ch ; array=array[i+1]
mov [bx+1],al ; array[i+1]=temp

inc dl ; ayxisi tou eswterikou counter
cmp dl,counter ; sygrisi me to plithos xaraktirwn tou sting
jle swap ; oso einai mikrotero i iso pigene sto swap

inc dh ; alliws ayxisi tou exwterikou counter
cmp dh,counter ; sygrisi me to plithos xaraktirwn tou string
jle zero ; oso einai mikrotero i iso pigene sto zero
jmp typwma ; alliws typwse to string



dont_swap:
inc bx ; ayxisi tou bx
inc dl ; ayxisi tou esswterikou counter
cmp dl,counter ; sygrisi me plithos
jle swap ; oso einai mikrotero i iso pigene swap

inc dh ; alliws ayxise ton exwteriko counter
cmp dh,counter ; sygrisi me counter
jle zero ; mikrotero i iso pigene sto zero alliws typwse to string


typwma: mov dx,0
mov bx,[bp+6]

mov dx,bx
mov ax,9
int 21h


desc:


pop bp

RET
sort ENDP

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

bubble sort-assembly

Δημοσίευση από LightForce » 27 Σεπ 2007 21:45

..another assembler, wow :o

pnastis γειά,
υποθέτω ότι τα διάφορα στοιχεία που λείπουν τα έκοψες εσύ, π.χ ο κώδικας για descenting sort δεν υπάρχει.
αντικατέστησε χαμηλά (λιγο πάνω απο την desc) το AX με ΑΗ για να τυπώσεις το string -το οποίο πρέπει να τελειώνει σε $

Κώδικας: Επιλογή όλων

 mov dx,bx
 mov ah,9  
 int 21h 
ένα γρήγορο τέστ που έκανα μόνο στο ascending sort τμήμα στον fasm δουλεψε ο κώδικας.

pnastis
Δημοσιεύσεις: 3
Εγγραφή: 27 Σεπ 2007 18:10

bubble sort-assembly

Δημοσίευση από pnastis » 28 Σεπ 2007 00:49

eyxaristw gia to endiaferon lightforce alla den nomizw na einai ayto to provlima. pragmati kwdika gia descending den ekana giayto afisa to label keno kai to topothetisa sto telos tis procedure.. pio katw ehw ton plires kwdika tis askisis. an mporeis rixe tou mia matia.
eyxaristw

;//////////////////////////////////////////////////
;-------------- BUBBLE SORT IN ASSEBLY -------------
;//////////////////////////////////////////////////
;//////////////////////////////////////////////////
;CREATED BY STELIOS PANAYIOTOU
;//////////////////////////////////////////////////


Title bubble sort
Dosseg
.Model small
.Stack 100h

.Data
max DB 20
strlen DB ?
string DB 20 DUP("$")
chline DB 10,13,'$'
prompt DB "Please enter a string:",10,13,'$'
min DB "Please enter a symbol('+','-')",10,13,'$'
error DB "Incorrect symbol",10,13,'$'
asce DB "String in asceding order:",10,13,'$'
desce DB "String in desceding order:",10,13,'$'
counter db ?


.Code
start: mov ax,@DATA
mov ds,ax

mov ah,9
lea dx,prompt
int 21h

; /////////////////////////////////
; ----- diabase xaraktires ------
; /////////////////////////////////


mov ah,0ah
lea dx,max
int 21h

lea dx,string ; metafora tou offset tou string stin stoiva
push dx

mov ah,strlen
mov counter,ah ; counter=megethos tou pinaka


mov ah,9
lea dx,chline
int 21h

; //////////////////////////////////
; ------ diavase xaraktira(+,-)
;////////////////////////////////////
char: mov ah,9
lea dx,min
int 21h

mov ah,1
int 21h

mov ah,0
push ax ; metafora tou xaraktira stin stoiva

mov ah,9
lea dx,chline
int 21h


CALL sort
jmp telos


;/////////////////////////////////////////////////
;------------- SORT PROCEDURE --------------------
;/////////////////////////////////////////////////

sort PROC
push bp
mov bp,sp

mov bx,[bp+4] ; symvolo

mov dx,bx ; dx=bx=symvolo
cmp dx,'+' ; an einai '+' tha kanei ascending sorting
je asc
cmp dx,'-' ; alliws an einai '-' tha kanei descending
je desc
jmp wrong



asc: mov ah,9
lea dx,asce
int 21h

mov dh,1 ; dh=exwterikos metritis

zero: mov bx,[bp+6] ; bx=string
mov dl,1 ; dl=esswterikos metritis


swap: mov cl,[bx] ; 1o stoixeio tou pinaka
mov ch,[bx+1] ; 2o stoixeio tou pinaka

cmp cl,ch
jle dont_swap

mov al,cl ; temp=array
mov [bx],ch ; array=array[i+1]
mov [bx+1],al ; array[i+1]=temp

inc dl ; ayxisi tou eswterikou counter
cmp dl,counter ; sygrisi me to plithos xaraktirwn tou sting
jle swap ; oso einai mikrotero i iso pigene sto swap

inc dh ; alliws ayxisi tou exwterikou counter
cmp dh,counter ; sygrisi me to plithos xaraktirwn tou string
jle zero ; oso einai mikrotero i iso pigene sto zero
jmp typwma ; alliws typwse to string



dont_swap:
inc bx ; ayxisi tou bx
inc dl ; ayxisi tou esswterikou counter
cmp dl,counter ; sygrisi me plithos
jle swap ; oso einai mikrotero i iso pigene swap

inc dh ; alliws ayxise ton exwteriko counter
cmp dh,counter ; sygrisi me counter
jle zero ; mikrotero i iso pigene sto zero alliws typwse to string


typwma: mov dx,0
mov bx,[bp+6]

mov dx,bx
mov ax,9
int 21h


desc:


pop bp

RET
sort ENDP

;/////////////////////////////////////////////////
-------------- END OF SORT PROCEDURE ------------
;/////////////////////////////////////////////////



;///////////////////////////////////////////
;se periptwsi lathous eisagwgis xaraktira
;epanalamvanetai i diadikasia eisagwgis
;///////////////////////////////////////////

wrong: mov ah,9
lea dx,error
int 21h

pop bp
pop cx
pop ax
jmp char



telos: mov ah,4ch
int 21h
end start

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

bubble sort-assembly

Δημοσίευση από LightForce » 28 Σεπ 2007 20:47

pnastis μια ματιά έριξα, δεν έχω τον χρόνο να ασχοληθώ περισσότερο για να είμαι ειλικρινής.

εδώ τι γίνεται, απο που παίρνεις το μήκος του string?

Κώδικας: Επιλογή όλων

mov ah,strlen
mov counter,ah ; counter=megethos tou pinaka
δες πως δουλεύει η INT 21h/0Ah

pnastis
Δημοσιεύσεις: 3
Εγγραφή: 27 Σεπ 2007 18:10

bubble sort-assembly

Δημοσίευση από pnastis » 03 Οκτ 2007 12:49

telika doulepsa poly panw stin askisi kai tin elysa lightforce. ithele pragmatika arketes wres.
eyxaristw pantws gia to endiaferon .

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

bubble sort-assembly

Δημοσίευση από LightForce » 03 Οκτ 2007 20:32

τίποτα, νάσαι καλά pnastis.
χαίρομαι πολύ που την έλυσες!
μην χαθείς απο το forum,

Απάντηση

Επιστροφή στο “Assembly”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες