存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...