實驗內容
編寫一個彙編語言程序,實現先輸入一個0-100的數N,而後輸入N個數,以回車結束每一個數字並顯示在屏幕上,再將未排序前和從小到大排序後的結果顯示在屏幕上。實驗結果應達到以下的一個界面:數組
實驗過程
本次彙編語言程序設計要求的是對n個數進行排序,首先咱們要定義程序結果的那些字符串以及這個n個數的一個數組。同時咱們應該設置一個堆棧段來實現數的顯示。less
接着咱們但是程序的正式開始部分,咱們經過9號調用來輸出咱們所要展現的字符串,而後用換行符來換行,接着咱們輸入數字n,循環輸入數字的每一位並顯示出來,而後將數字n保存在cx裏面。這其中應該經過1號調用程序來實現數字的回顯。oop
而後咱們要從低位到高位,把數字n進行壓棧操做,保留這個數字的一個順序以後再出棧來顯示出這個數字n。再經過把數字n放在cx裏面,能夠做爲後面循環輸入n個數字的一個loop的次數。spa
接着咱們經過輸入n個data並保存在數組array裏面。data的輸入和輸出和前面的n是同樣的道理。最後咱們經過冒泡排序對這個順序來重排,而冒泡排序採用的是是書上的例題的程序,使用的是一種雙重循環的方法。設計
最後咱們再經過排序後的這樣一個數組輸出,輸出的方法也是和前面的方法是大體相同的。code
實驗結果演示:
附上代碼:
DATAS SEGMENT S1 db 'How many data to input?(less than equal to 100)','$' S2 db 'Input ','$' S3 db ' data,press[Enter] after input each data.','$' S4 db 'Before sorting:','$' S5 db 'After sorted:','$' array dw 100 dup(?) DATAS ENDS STACKS SEGMENT stack db 100h dup(?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX XOR CX,CX MOV DX,OFFSET S1 MOV AH,09H INT 21H;9號調用 輸出字符串S1 MOV DL,0AH;換行符 MOV AH,02H;2號調用 DL等於輸出字符 INT 21H MOV DL,10 L1:;(循環)輸入數字n並顯示 數字n保存在CX(能夠loop) MOV AH,1;1號調用 鍵盤輸入回顯 AL=輸入字符 INT 21H CMP AL,0DH;與回車比較(0AH是換行) je L2;回車則跳L2 SUB AL,30H AND AX,00FFH;AH清0 AL不變 MOV BX,AX MOV AX,CX MUL DL;8位乘法 AX<- AL*DL 十位數乘10 ADD AX,BX;十位加個位 MOV CX,AX;先把n保存到CX AX用來調用 CMP BL,0DH JNZ L1 L2: MOV DL,0AH MOV AH,02H;2號調用 DL等於輸出字符 INT 21H MOV DX,OFFSET S2; MOV AH,09H INT 21H;9號調用 輸出字符串S2 MOV AX,CX MOV BH,10 MOV BL,0 XOR DX,DX L3:;從低位到高位 把n壓棧 DIV BH;AL<-AX/BH AH<-AX%BH MOV DL,AH ADD DX,30H PUSH DX INC BL;BL計數n的位數 AND AX,00FFH CMP AL,0 JNZ L3 L4:;輸出n POP DX MOV AH,02H;二號調用顯示n INT 21H DEC BL CMP BL,0 JNZ L4 MOV DX,OFFSET S3 MOV AH,09H INT 21H MOV DL,0AH MOV AH,02H INT 21H MOV SI,0 MOV DI,10 XOR DX,DX L6:;(循環)輸入一個data MOV AH,01H INT 21H CMP AL,0DH JE L7 SUB AL,30H AND AX,00FFH MOV BX,AX MOV AX,DX MUL DI ADD AX,BX MOV DX,AX CMP BL,0DH JNE L6 L7:;輸入n個data保存在數組內 MOV array[SI],DX ADD SI,2 MOV DL,0AH MOV AH,02H INT 21H XOR DX,DX LOOP L6 MOV DX,OFFSET S4 MOV AH,09H;輸出S4 INT 21H SHR SI,1;SI/2 MOV CX,SI MOV SI,0 L8: MOV AX,array[SI] MOV BH,10 MOV BL,0 XOR DX,DX L9:;把1個data(循環)壓棧,BL計數位數 DIV BH;AL<-AX/BH AH<-AX%BH mov DL,AH ADD DX,30H PUSH DX INC BL AND AX,00FFH CMP AL,0 JNZ L9 L10:;把一個data(循環)出棧 POP DX MOV AH,02H INT 21H DEC BL CMP BL,0 JNZ L10 MOV DL,32 MOV AH,02H INT 21H ADD SI,2 LOOP L8 MOV DL,0AH MOV AH,02H INT 21H sort:;冒泡排序 SHR SI,1 MOV DX,SI MOV CX,SI DEC CX loop1: mov di,cx mov bx,0 loop2: mov ax,array[bx] cmp ax,array[bx+2] jle continue xchg ax,array[bx+2] mov array[bx],ax continue: add bx,2 loop loop2 mov cx,di loop loop1 MOV CX,DX MOV SI,0 MOV DX,OFFSET S5 MOV AH,09H INT 21H L11:;排序後輸出 MOV AX,array[SI] MOV BH,10 MOV BL,0 XOR DX,DX L12: DIV BH MOV DL,AH ADD DX,30H PUSH DX INC BL AND AX,00FFH CMP AL,0 JNZ L12 L13: POP DX MOV AH,2 INT 21H DEC BL CMP BL,0 JNZ L13 MOV DL,32 MOV AH,02H INT 21H ADD SI,2 LOOP L11 MOV AH,4CH INT 21H CODES ENDS END START