該程序實現了「簡易學生成績管理系統」。程序自己有點繁瑣,因爲程序過長,甚至超出了jmp的範圍,因此中間還須要中轉jmp,但我本人仍是有點滿意的。
這是個人彙編實驗課程做業,若是你們有相似做業的話但願不要過分借鑑,本程序僅供參考和學習!不要抄襲!es6
1)熟悉數據分類的方法;
2)掌握屏幕上顯示數據格式的方法。oop
① 循環菜單式學生成績管理系統;
② 輸入任意個0~100的數字;
③ 按<60,60~69,70~79,80~89,90~99和100共六檔分類;
④ 統計出每檔的個數及總數;
⑤ 輸入數據將存於內存中;
⑥ 選擇錯誤提示和正確退出提示。學習
data segment men db 0dh,0ah db '*****Student Score System*****',0dh,0ah db '**-----1>Input score--------**',0dh,0ah db '**-----2>Count class--------**',0dh,0ah db '**-----3>Quit system--------**',0dh,0ah db '**Please input your select:',0dh,0ah,'$' err db ' ->Select error! Please select again!',0dh,0ah,'$' inp db ' ->Please input scores (<CR> to quit):',0dh,0ah,'$' inpok db 'Finish!',0dh,0ah,'$' cou db ' ->Here are the classification statistics :','$' qui db ' ->Welcome to use this system next time!','$' mes1 db '-score[<60 :','$' mes2 db '-score[<60-69] :','$' mes3 db '-score[<70-79] :','$' mes4 db '-score[<80-89] :','$' mes5 db '-score[<90-99] :','$' mes6 db '-score[=100] :','$' mes7 db '-Total Number :','$' result db 100 dup(0) total db 00 s5 db 00 s6 db 00 s7 db 00 s8 db 00 s9 db 00 s10 db 00 data ends code segment assume cs:code, ds:data start: mov ax,data mov ds,ax ;ds指向data數據段 menu: push cx mov cx,0ffffh delay: loop delay ;設置輸出延遲 pop cx mov ah,9 mov dx,offset men int 21h ;輸出提示字符串 mov ah,1 int 21h ;輸入選擇 cmp al,'1' je input cmp al,'2' je coun cmp al,'3' je qu mov dx,offset err mov ah,9 int 21h ;輸入錯誤提示 jmp menu ;---------- INPUT ---------- input: mov ah,9 mov dx,offset inp int 21h ;輸出提示字符串 mov si,offset result ;si指向result mov cx,0 ;cx爲輸入數字個數 s: mov ah,1 int 21h ;輸入數字字符 sub al,30h ;將字符轉化爲數字值 mov bh,al ;數字值存於bh a: mov ah,1 int 21h ;輸入數字字符 cmp al,20h ;判斷輸入是否爲空格 je b ;如是,跳轉至b標號 cmp al,0dh ;判斷輸入是否爲回車 je c ;如是,跳轉至c標號 sub al,30h ;不然,將字符轉化爲數字值 mov bl,al ;數字值存於bl mov al,10 ;將al置10 mul bh ;將高位乘10,存於ax mov bh,0 ;將bh置0 add ax,bx ;將ax與bx相加(實際結果只在al中) mov bh,al ;將結果存於bh jmp a ;循環至a處 b: mov al,bh ;將結果存於al mov [si],al ;將結果存於ds:si處 inc si ;si指向下一單元 inc cx ;數字個數加一 jmp s ;循環至s處 c: mov al,bh ;將結果存於al mov [si],al ;將結果存於ds:si處 inc si ;si指向下一單元 inc cx ;數字個數加一 mov si,offset result ;si指向result jmp comp coun: jmp count qu: jmp quit comp: mov al,[si] ;si處內容存於al cmp al,60 jb five ;若al小於60,跳轉至five cmp al,70 jb six ;若al小於70,跳轉至six cmp al,80 jb seven ;若al小於80,跳轉至seven cmp al,90 jb eight ;若al小於90,跳轉至eight cmp al,100 jb nine ;若al小於100,跳轉至nine cmp al,100 je ten ;若al小於100,跳轉至ten jmp next ;若其餘,跳轉至next five: mov al,[s5] ;s5處內容存於al add al,01 ;al加一 daa ;轉化爲十進制BCD碼 mov [s5],al ;將al的值存於s5處 jmp next ;跳轉至next處 six: mov al,[s6] ;同上 add al,01 daa mov [s6],al jmp next seven: mov al,[s7] ;同上 add al,01 daa mov [s7],al jmp next eight: mov al,[s8] ;同上 add al,01 daa mov [s8],al jmp next nine: mov al,[s9] ;同上 add al,01 daa mov [s9],al jmp next ten: mov al,[s10] ;同上 add al,01 daa mov [s10],al jmp next next: mov al,[total] ;total處內容存於al add al,01 ;al加一 daa ;轉化爲十進制BCD碼 mov [total],al ;將al的值存於total處 inc si ;si指向下一單元 loop comp ;循環至comp mov ah,9 mov dx,offset inpok int 21h ;輸出提示字符串 jmp menu ;---------- COUNT ---------- count: mov ah,9 mov dx,offset cou int 21h ;輸出提示字符串 mov ah,2 mov dl,0dh int 21h ;輸出回車 mov dl,0ah int 21h ;輸出換行 mov dx,offset mes1 mov ah,09h int 21h ;輸出字符串 mov al,[s5] ;將s5處內容存至al call disp ;調用disp,以十進制輸出al中內容 mov dx,offset mes2 mov ah,09h int 21h mov al,[s6] call disp ;同上 mov dx,offset mes3 mov ah,09h int 21h mov al,[s7] call disp ;同上 mov dx,offset mes4 mov ah,09h int 21h mov al,[s8] call disp ;同上 mov dx,offset mes5 mov ah,09h int 21h mov al,[s9] call disp ;同上 mov dx,offset mes6 mov ah,09h int 21h mov al,[s10] call disp ;同上 mov dx,offset mes7 mov ah,09h int 21h mov al,[total] call disp ;同上 jmp menu ;---------- QUIT ---------- quit: mov ah,9 mov dx,offset qui int 21h ;輸出提示字符串 mov ax,4c00h int 21h ;結束程序 disp proc near push cx ;cx入棧 mov bl,al ;將al的值存於bl and al,0f0h ;將低四位置零 mov cl,04 ;設置循環移動位數爲4 ror al,cl ;循環右移四位 add al,30h ;將數字轉化爲ASCII碼值 mov dl,al mov ah,02h int 21h ;輸出al中的數字(即十位) mov al,bl ;將bl的值存於al and al,0fh ;將高四位置零 add al,30h ;將數字轉化爲ASCII碼值 mov dl,al mov ah,02h int 21h ;輸出al中的數字(即個位) mov ah,2 mov dl,0dh ;輸出回車 int 21h mov dl,0ah int 21h ;輸出換行 pop cx ret disp endp code ends end start