組合語言巧妙排序字串

2021-10-13 19:30:06 字數 3598 閱讀 3137

用組合語言實現任意輸入字串排序,我主要是採用先分組,然後分別排序,在把兩個組合起來排序的使用演算法。

在我的輸出結果頁面中,總共會有6行,第一行表示的是你所輸入的我們需要排序的字串,第二行表示的是將字串分為兩組其中的第一組,第三行表示的是將字串分為兩組其中的第二組,第四行表示的是對分成的第一組排序得到的結果,第五行表示的是對分成的第二組排序得到的結果,第六行表示的是第四行第五行都合起來進行的排序,相當於對第一行進行排序。

具體**如下:

datas segment

buf db 100,?,100 dup(?),'$'

mes db 's $'

a db 100 dup(?)

b db 100 dup(?)

d db 100 dup(?)

datas ends

stacks segment

;此處輸入堆疊段**

stacks ends

codes segment

assume cs:codes,ds:datas,ss:stacks

start:

mov ax,datas

mov ds,ax

;此處輸入**段**

mov dx,offset buf

mov ah,10

int 21h

mov bl,buf+1

mov ah,2

mov dl,0ah

int 21h

mov al,bl

mov ah,0

mov cl,2

div cl

mov dl,al

mov si,offset buf+2

mov ah,0

mov al,dl

mov cx,ax

mov bx,offset a

mov di,cx

movsb1:

mov dx,[si]

mov [bx],dx

inc bx

inc si

dec cx

cmp cx,0

jnz movsb1

mov byte ptr [bx],'$'

mov ah,9

mov dx,offset a

int 21h

mov bx,offset b

mov ah,2

mov dl,0ah

int 21h

movsb2:

mov dx,[si]

mov [bx],dx

inc si

inc bx

cmp byte ptr [si],0dh

jnz movsb2

mov dl,[bx]

int 21h

mov byte ptr [bx],'$'

mov ah,9

mov dx,offset b

int 21h

mov ah,2

mov dl,0ah

int 21h

mov bx,offset a

mov si,offset a+1

mov cx,si

paia:

mov dl,[bx]

cmp [si],dl

jna da

inc si

cmp byte ptr [si],'$'

jz next

jnz paia

da: mov al,[si]

mov [bx],al

mov [si],dl

inc si

cmp byte ptr [si],'$'

jz next

jnz paia

next:

inc bx

mov si,cx

inc si

mov cx,si

cmp byte ptr [si],'$'

jnz paia

mov ah,9

mov dx,offset a

int 21h

mov ah,2

mov dl,0ah

int 21h

mov bx,offset b

mov si,offset b+1

mov cx,si

paib:

mov dl,[bx]

cmp [si],dl

jna dab

inc si

cmp byte ptr [si],'$'

jz next1

jnz paib

dab:

mov al,[si]

mov [bx],al

mov [si],dl

inc si

cmp byte ptr [si],'$'

jz next1

jnz paib

next1:

inc bx

mov si,cx

inc si

mov cx,si

cmp byte ptr [si],'$'

jnz paib

mov ah,9

mov dx,offset b

int 21h

mov ah,2

mov dl,0ah

int 21h

mov bx,offset a

mov si,offset b

mov di,offset d

paid:

mov al,[bx]

cmp al,[si]

jna diyige

dierge:

mov al,[si]

mov [di],al

inc di

inc si

cmp byte ptr [si],'$'

jz jieshu2

jnz paid

diyige:

mov [di],al

inc di

inc bx

cmp byte ptr [bx],'$'

jz jieshu1

jnz paid

jieshu1:

mov al,[si]

mov [di],al

inc di

inc si

cmp byte ptr [si],'$'

jz jieshu

jnz jieshu1

jieshu2:

mov al,[bx]

mov [di],al

inc di

inc bx

cmp byte ptr [bx],'$'

jz jieshu

jnz jieshu2

jieshu:

mov byte ptr [di],'$'

mov ah,9

mov dx,offset d

int 21h

mov ah,4ch

int 21h

codes ends

end start

我之前發的那個字串排序只能針對指定的字串,而且演算法也比較笨,相比於那個,這個演算法更加靈敏,輕巧。但**相比而言也會更多。

計算字串長度 組合語言

設有一字串存放在以 buf 為首址的資料區中,其最後一字元 作為結束標誌,計算該字串的長度並輸出 datas segment buf db 20,20 dup datas ends stacks segment stacks ends codes segment assume cs codes,ds...

巧妙的字串排序

sort str.c 讀入字串,並排序字串 include include define size 81 限制字串長度,包括 0 define lim 20 可讀入的最多行數 define halt 空字串停止輸入 void stsrt char string int num 字串排序函式 char...

組合語言字串比較與查詢

組合語言實現 用字串處理指令編制程式,處理字串的比較和查詢,顯示結果。要求 1 字串的比較函式中,乙個字串在資料段定義,另乙個字串在程式執行時從鍵盤輸入,必須定義鍵盤緩衝區。指出不相等的位置。2 在字串中查詢某個字元,並指出找到的位置。第一問 data segment buff db255 dup ...