微機原理與彙編 輸入n個數進行排序並輸出

2021-10-25 06:26:21 字數 4311 閱讀 1018

存n個資料(n<=100),如果多了的話會把後面的資料篡改(比如a2),如果想改可以直接在資料段**這裡進行修改

???

datas segment

;此處輸入資料段**

a1 word 100 dup(?)

;這是存n個元素

a2 byte 'please input five number:!'

a3 byte 'the number before sorting is:!'

a4 byte 'the number after sorting is:!'

a5 byte 'please input a number:!'

datas ends

stacks segment

;此處輸入堆疊段**

stacks ends

codes segment

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

start:

mov ax,datas

mov ds,ax

;此處輸入**段**

;這個用來寫排序函式的通用函式

;第一行輸入要排序元素的個數

;第二行輸入要排序的元素

;第三行輸入原排序的元素

;第四行輸入排序完成的元素

;輸入字串a5

mov si,offset a5

call outputstr

;輸入要排序的個數

call inputnum;出口引數di

call wrap

;輸出字串a2

mov si,offset a2

call outputstr

;輸入n個數

mov si,offset a1

call inputn

call wrap;換行

;輸出字串a3

mov si,offset a3

call outputstr

;輸出原順序

mov si,offset a1

call outputn

call wrap

;排序mov si,offset a1

call paixu

;輸出字串a4

mov si,offset a4

call outputstr

;輸出排序後的

mov si,offset a1

call outputn

mov ah,4ch

int 21h

inputn proc;輸入n個數,入口引數應該是di

push ax

push bx

push cx

push dx

mov cl,0

ifn1:

cmp cx,di

je ifnover

call input

mov [si],bx

add si,2

add cl,1

jmp ifn1

ifnover:

pop dx

pop cx

pop bx

pop ax

ret

inputn endp

input proc;輸入函式

push ax

push cx

push dx

mov bx,0

mov dh,10

jmp i0

i0: mov ah,1

int 21h

sub al,48

cmp al,0

jb i8

je i2

i2: cmp al,9

ja i8

jb i3

i3: mov cl,al

mov ch,0

mov ax,bx

mul dh

add cx,ax

mov bx,cx

jmp i0

i8: pop dx

pop cx

pop ax

retinput endp

outputn proc;輸出n個數,di為入口引數

push ax

push bx

push cx

push dx

mov bx,0

ofn1:

cmp bx,di

je ofnover

mov ax,[si]

call output

add si,2

add bl,1

jmp ofn1

ofnover:

pop dx

pop cx

pop bx

pop ax

retoutputn endp

output proc;輸出函式

push bx

push cx

push dx

mov bh,0

mov cl,10

div cl

cmp al,0

ja o1

je o2

o1: push ax

add bh,1

mov ah,0

div cl

cmp al,0

ja o1

je o2

o2: mov dl,ah

add dl,48

mov ah,2

int 21h

cmp bh,0

ja o3

je o4

o3: pop ax

sub bh,1

jmp o2

o4: pop dx

pop cx

pop bx

ret ;返回

output endp;結束

paixu proc;排序函式,si,di為入口引數

push ax

push bx

push cx

push dx

mov bx,di;用bx存一下di的值一會用

mov di,si;用di存si

mov al,0;遍歷引數1

mov cl,bl

p1:

inc al

mov bl,cl

cmp al,bl

jnb pover

mov si,di

mov ah,0;遍歷引數2

sub bl,al

sub si,2

p2: inc ah

add si,2

cmp ah,bl

ja p1

mov dh,[si]

mov dl,[si+2]

cmp dh,dl

ja pswap

jmp p2

pswap:

mov [si],dl

mov [si+2],dh

jmp p2

pover:

mov ch,0

mov di,cx;cx的值存著di的值一直沒變

pop dx

pop cx

pop bx

pop ax

retpaixu endp

outputstr proc;字串輸出函式

push ax

push dx

oscontinue:

mov dl,[si]

cmp dl,'!'

je osover

mov ah,2

int 21h

add si,1

jmp oscontinue

osover:

pop dx

pop ax

retoutputstr endp

wrap proc;換行函式

push dx

push ax

mov dx,13

mov ah,2

int 21h

mov dx,10

mov ah,2

int 21h

pop ax

pop dx

retwrap endp

inputnum proc;輸入元素個數函式

;出口引數di

push ax

push dx

push bx

call input

mov di,bx

pop bx

pop dx

pop ax

retinputnum endp

codes ends

end start

如有問題請私聊

qq3543998195

微機原理與組合語言 第七周作業

一 選擇題 一 若要檢查ax暫存器中的d12位是否為1,但不改變其中的值,應該用 a 指令。a test ax,1000h b or ax,1100h c xor ax,1000h d and ax,1000h 二 cpu在執行out dx,al指令時,d 暫存器的內容送到位址匯流排上。a ax b...

微機原理與彙編實驗 輸出帶顏色的字元

如下 datas segment 此處輸入資料段 datas ends stacks segment 此處輸入堆疊段 stacks ends codes segment assume cs codes,ds datas,ss stacks start mov ax,datas mov ds,ax 此...

容斥原理求1到n與k互質個數

參考部落格 傳送門 題目 hdu 4135 此處的k 1e9 include include include include includeusing namespace std typedef long long ll const int qq 10005 int num int prime qq...