當前位置:首頁 » 考試成績 » 匯編完成輸入10個學生成績嗎

匯編完成輸入10個學生成績嗎

發布時間: 2021-01-01 19:09:19

1. 8086匯編語言 在此輸入10個學生的成績後,依次在界面上顯示:及格人數x個,不及格y個

這要看你用的系復統了,
XP的話,可以制用最原始的Masm和Tasm,這是以前DOS環境下用的,最直接,用DEBUG可以操作內存,很強大。
由於好些DOS下的東西在WIN7下支持不好,所以如果你的系統是WIN7的話建議用emu8086,它在系統下模擬的環境也很不錯,界面也比較好

2. 用匯編語言,在鍵盤里輸入10個學生的成績,用冒泡排序法從大到小進行排

CODESEGMENT
ASSUMECS:CODE
ORG100H
START:
PUSHCS
POPDS
PUSHCS
POPES
CALLINPUTNUM
MOVAX,NUM
MOVN,AX
CALLBUBBLESORT
MOVAH,2
MOVDL,10
INT21H
MOVDL,13
INT21H
MOVCX,N
LEASI,ARRAY
@M1:
MOVAX,[SI]
CALLDISPAX
INCSI
INCSI
LOOP@M1

MOVAH,4CH
INT21H

NDW?
;============================================
BUBBLESORTPROCNEAR
LEABX,ARRAY
LEASI,NUM
MOVAX,SI
SUBAX,BX
RORAX,1
MOVWORDPTR[NUM],AX
DECWORDPTR[NUM]

MOVWORDPTR[I],0;以下採用冒泡排序
LEADI,ARRAY
LINE1:
INCWORDPTR[I]
MOVAX,WORDPTR[I]
CMPAX,WORDPTR[NUM]
JGLINE3
MOVWORDPTR[J],0
LINE2:
INCWORDPTR[J]
MOVAX,WORDPTR[NUM]
INCAX
SUBAX,WORDPTR[I]
CMPWORDPTR[J],AX
JGLINE1
MOVBX,WORDPTR[J]
ROLBX,1
MOVAX,WORDPTR[DI][BX-2]
CMPAX,WORDPTR[DI][BX]
JNCLINE2
MOVCX,WORDPTR[DI][BX]
MOVWORDPTR[DI][BX],AX
MOVWORDPTR[DI][BX-2],CX
JMPLINE2
LINE3:
RET

IDW?
JDW?
BUBBLESORTENDP

;===============================================
;鍵盤輸入數值數組子程序(數組名為array,元素個數存放在num中)
INPUTNUMPROCNEAR
;輸入的數據以一個空格分隔,以回車符結束輸入
LEADI,ARRAY;將數組第一個元素的有效地址置入DI
MOVWORDPTR[NUM],0
STIN:
MOVAX,0
PUSHAX
AGAIN1:
MOVAH,1
INT21H
MOVBYTEPTR[CHAR],AL
CMPAL,13
JELINE0
CMPAL,''
JELINE0
SUBAL,30H
MOVAH,0
MOVSI,AX
POPAX
MOVCL,10
MOVCH,0
MULCX
ADDAX,SI
PUSHAX
JMPAGAIN1
LINE0:
POPAX
MOVWORDPTR[DI],AX
INCWORDPTR[NUM]
CMPBYTEPTR[CHAR],13
JESTINEND
INCDI
INCDI
JMPSTIN
STINEND:
RET
ARRAYDW100DUP(0)
NUMDW0
CHARDB?
INPUTNUMENDP

;===============================================
DISPAXPROCNEAR
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDS
PUSHCS
POPDS
PUSHAX
MOVAH,2
MOVDL,32
INT21H
POPAX
MOVBYTEPTRNZ,0
PUSHAX
LEASI,DIVARR
MOVCX,5
@1:
POPAX
MOVDX,0
MOVBX,[SI]
DIVBX
PUSHDX
CMPAL,0
JNE@2
CMPBYTEPTRNZ,1
JE@2
CMPCX,1
JE@2
MOVDL,20H
JMP@3
@2:
ADDAL,30H
MOVDL,AL
MOVBYTEPTRNZ,1
@3:
MOVAH,2
INT21H
INCSI
INCSI
LOOP@1
POPDX
POPDS
POPSI
POPDX
POPCX
POPBX
RET
DIVARRDW10000,1000,100,10,1
NZDB0
DISPAXENDP
;=============================================
CODEENDS
ENDSTART

3. 求用匯編語言實現:從鍵盤輸入10個學生成績,求最高,最低和平均值。

data段略,ax存放現在第一個學生內的位置容
mov bl, [ax}
a2: inc ax
cmp [ax],bl
jg a1
bh = bl
a1: dec cl,1
cmp cl,0
jne a2

4. 【高分】幫忙用匯編語言做一個程序:學生成績統計

; 程序操作說明:
; 1、本程序定義:姓名最多個20個字元,學號最多10個字元,成績最多3位數字
; 2、輸入學生信息時,各信息足位時,自動結束;不足位數時,按回車鍵結束
; 3、輸入姓名時,若直接回車,表示結束學生信息輸入,進入信息處理
; 本程序在MASMPlus 1.2集成環境下通過編譯,經過調試,運行正確。
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:輸出一個字元
; 入口:dl=要顯示的字元
Output_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Output_Chr endp
; -------------------------------------
; 功能:輸出回車換行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; -------------------------------------
; 功能:取游標位置
; 入口:無
; 出口:DH=行號,DL=列號
GetCursor Proc Near
PUSH AX
PUSH BX
PUSH CX
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP CX
POP BX
POP AX
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -------------------------------------
; 功能:置游標位置
; 入口:Cursor_Row=行坐標; Cursor_Col: 列坐標)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
SetCursor EndP
; -------------------------------------
; 功能:鍵盤輸入一個指定位數的十進制數字,將其轉換成二進制數並保存在指定的內存單元。
; 由於限定最大數據類型為字,所以,數字位數最多:5,最大無符號數:65536
; 約定:直接回車,視為數字0
; 入口:@@Digits=數字位數;di=保存輸入的數字首地址
; @@Type_Data=保存的數據類型,B=位元組類型,W=字類型。
; 出口:轉換後的二進制數保存在di所指的單元
Input_Digit Proc Near
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
push dx
push cx
push bx
push di
lea di,@@Save_Tmp
push di
cld
mov cl,@@Digits
xor ch,ch
push cx
@@Input: call GetCursor ;取游標位置
mov ah,1 ;從鍵盤接受一個字元
int 21h
cmp al,CR ;若鍵入的是回車,已經鍵入的數字不足N位
jz @@ASC_Dec ;轉去處理已經鍵入的數字
cmp al,KBBack
jz @@KB_Back ;若是回空鍵,重新輸入
cmp al,'0'
jb @@KBBack ;若低於數字'0',重新輸入
cmp al,'9'
ja @@KBBack ;若低於數字'9',重新輸入
jmp @@Save_Dig
@@KB_Back: dec Cursor_Col
inc cx
dec di
@@KBBack: call SetCursor ;置游標位置
jmp @@Input
@@Save_Dig: and al,0fh ;轉換成二進制數
stosb ;保存
loop @@Input ;接受下一個數字
@@ASC_Dec: mov ax,cx
pop cx
pop si
sub cx,ax ;實際輸入的數字位數
xor bp,bp
xor dx,dx
xor ax,ax
jcxz @@Save_Ret ;若直接回車,沒有輸入任何數字,按輸入'0'處理
dec cx ;實際輸入的數字位數減1,准備把輸入的這一串數字轉換成二進制數
jcxz @@One_Digit ;若輸入的數字只有一位,轉去直接保存這個二進制數
mov bx,10
@@Mul_Ten: lodsb
cbw
add ax,bp
mul bx
mov bp,ax
loop @@Mul_Ten
@@One_Digit: lodsb
cbw
add ax,bp
@@Save_Ret: pop di
cmp @@Type_Data,'B' ;位元組類型?
jz $+5
stosw
jmp $+3
stosb
pop bx
pop cx
pop dx
ret
@@Digits db ? ;十進制數字位數
@@Type_Data db 'B' ;保存的數據類型。B=位元組類型,W=字類型
@@Save_Tmp db 16 p(?)
Input_Digit EndP
; -------------------------------------
; 功能:把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
; 入口:AX=二進制數
; 出口:在當前游標位置顯示轉換後的ASCII碼數字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov BYTE ptr [di],'$'
dec di
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 p(?)
Dec_ASCII EndP
; -------------------------------------
; 功能:把AL中的二進制無符號數作為小數轉換成顯式的十進制ASCII碼,
; 並送顯示屏顯示,未考慮四捨五入
; 入口:AH=二進制數,BH=除數,CX=保留小數位數
; 出口:在當前游標位置顯示轉換後的ASCII碼數字
Dec_Frac Proc Near
push ax
mov dl,'.'
call Output_Chr ;顯示一個小數點
pop ax
mov bl,10 ;乘數
@@Dec_Frac: mov al,ah ;余數不為0,處理小數部分
mul bl ;余數乘10,繼續做除法
div bh ;除以除數,取商數作為結果的一位小數
or al,30h
mov dl,al
call Output_Chr ;顯示一位小數
loop @@Dec_Frac
ret
Dec_Frac EndP
; -------------------------------------
Name_Length equ 20 ;姓名長度
ID_Length equ 10 ;學號長度
Info_Students Struc ; 學生信息結構類型
Name_Student db Name_Length p(?) ;姓名
ID_Student db ID_Length p(?) ;學號
Score_Student db ? ;成績
Info_Students EndS
; -------------------------------------
Prompt_Str db 7,'Name',Name_Length-4+2 p(20h) ;姓名標題字元串
db 'Student ID',2 p(20h) ;學號標題字元串
db 'Score',CR,LF ;成績標題字元串
db Name_Length p('-'),2 p(20h)
db ID_Length p('-'),2 p(20h)
db 5 p('-'),CR,LF,'$'
Temp_Cursor dw ? ;輸入、顯示學生信息游標位置
prompt_Ave db CR,LF,'Average: $' ;提示顯示平均分
Buffer_Data db ?,?,Name_Length+2 p(?) ;姓名、學號輸入緩沖區
Press_Key db CR,LF,CR,LF,'Press any key to exit...$'
Start: push cs
pop ds
push cs
pop es ;使數據段、附加段與代碼段同段
mov @@Digits,3 ;十進制數字位數
mov @@Type_Data,'B' ;保存的數據類型。B=位元組類型,W=字類型
; -------------------------------------
; 顯示姓名、學號、成績標題,提示輸入學生信息
Output Prompt_Str
call GetCursor ;取游標位置
mov Temp_Cursor,dx ;保存輸入、顯示學生信息游標位置
; -------------------------------------
; 輸入學生姓名、學號、成績
lea di,Score_Table ;姓名、學號、成績存放地址
Input_Name: call GetCursor ;取游標位置
mov Buffer_Data,Name_Length+1 ;允許輸入的最多字元數
push di
lea di,Buffer_Data[2]
mov cx,(Name_Length+2)/2
mov ax,2020h ;填充空格
rep stosw
pop di
lea dx,Buffer_Data ;姓名輸入緩沖區地址
mov ah,0ah
int 21h
lea si,Buffer_Data[1]
lodsb ;讀入實際輸入的字元個數
test al,al
jz @@L1 ;若輸入學生姓名時,直接回車,認為學生姓名、學號、成績等輸入結束,轉去計算輸入的學生人數
mov cx,Name_Length ;姓名字元數
rep movsb ;寫入學生信息緩沖區
add Cursor_Col,Name_Length+2 ;列號加姓名長度再加2,開始輸入學號
call SetCursor ;置游標位置
push di
lea di,Buffer_Data[2]
mov cx,(Name_Length+2)/2
mov ax,2020h ;填充空格
rep stosw
pop di
lea dx,Buffer_Data ;學號輸入緩沖區地址
mov ah,0ah
int 21h
lea si,Buffer_Data[2]
mov cx,ID_Length ;學號字元數
rep movsb ;寫入學生信息緩沖區
add Cursor_Col,ID_Length+2 ;列號加學號長度再加2,開始輸入成績
call SetCursor ;置游標位置
call Input_Digit ;輸入成績
call Output_CTLF ;輸出一個回車、換行
jmp Input_Name ;輸入下一名學生信息
; -------------------------------------
; 計算輸入的學生人數
@@L1: mov ax,di
sub ax,offset Score_Table ;所有學生信息所佔內存容量
mov bl,type Info_Students ;每名學生信息所佔內存容量
div bl
mov cx,ax ;CX=輸入的學生人數
test cx,cx
jnz @@L00
jmp Exit_Proc ;若未輸入任何信息,直接結束程序
; -------------------------------------
; 建立學生信息鏈表
@@L00: push di ;保存鏈表地址
lea ax,Score_Table ;學生信息起始地址
push cx
@@L2: stosw ;保存學生信息地址
add ax,type Info_Students ;每名學生信息所佔內存容量
loop @@L2
pop cx
pop si ;彈出鏈表地址給si
cmp cx,2
jb Exit_Proc ;若只輸入了1名學生的信息,則無須排序和顯示結果
; -------------------------------------
; 用冒泡排序法按成績降序排序
push si ;入棧保存鏈表地址
push cx ;保存學生人數
dec cx ;准備用冒泡排序法排序
@@Sorting: push cx ;入棧保存外循環次數
push si ;入棧保存數組地址
@@Compare: push si
pop di ;當前數組元素地址賦給目的變址寄存器,以備交換之用
lodsw ;將當前學生信息地址讀入AX
mov bx,ax
mov al,[bx.Score_Student] ;將當前學生成績讀入AL
mov bx,[si] ;相鄰的下一個學生信息地址
cmp al,[bx.Score_Student] ;當前學生成績與相鄰的下一個學生成績相比較
jae @@NextOne ;若大於或等於,不作數據交換,處理下一個數組元素
mov ax,[di] ;若小於,讀入當前學生信息鏈表節點
xchg ax,[si] ;交換鏈表元素
mov [di],ax ;保存數值較大者節點地址
@@NextOne: loop @@Compare ;處理下一個數組元素
pop si ;數組地址出棧
pop cx ;外循環次數出棧
loop @@Sorting ;下一趟比較
call Output_CTLF
; -----------------------------------------
; 按成績降序顯示所有學生信息
Output Prompt_Str ;顯示學生信息標題
call GetCursor ;取游標位置
mov Temp_Cursor,dx ;保存顯示學生信息游標位置
pop cx ;彈出學生人數
pop si ;彈出鏈表地址
push cx ;保存學生人數
xor bx,bx ;總成績初值
@@List_Info: push cx ;保存學生人數
call GetCursor ;取游標位置
lodsw ;讀入鏈表的一個節點
push si ;入棧保存鏈表地址
mov si,ax
push si ;入棧保存學生信息地址
lea si,[si.Name_Student] ;姓名地址
mov cx,Name_Length ;姓名字元串長度
@@Dsip_Name: lodsb ;讀入一個字元
cmp al,0dh ;回車符?
jz @@L3 ;是,姓名顯示結束
mov dl,al
call Output_Chr ;顯示一個字元
loop @@Dsip_Name ;下一個字元
@@L3: add Cursor_Col,Name_Length+2 ;列號加姓名長度再加2,開始顯示學號
call SetCursor ;置游標位置
pop si ;彈出學生信息地址
push si ;入棧保存學生信息地址
lea si,[si.ID_Student] ;學號地址
mov cx,ID_Length ;姓名字元串長度
@@Dsip_ID: lodsb ;讀入一個字元
cmp al,0dh ;回車符?
jz @@L4 ;是,學號顯示結束
mov dl,al
call Output_Chr ;顯示一個字元
loop @@Dsip_ID ;下一個字元
@@L4: add Cursor_Col,ID_Length+2 ;列號加學號長度再加2,開始顯示成績
call SetCursor ;置游標位置
pop si ;彈出學生信息地址
lea si,[si.Score_Student] ;成績地址
lodsb ;讀入成績
xor ah,ah
add bx,ax ;累加總成績
call Dec_ASCII ;把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
call Output_CTLF
pop si ;彈出鏈表地址
pop cx ;彈出學生人數
loop @@List_Info ;下一個節點(學生信息)
call Output_CTLF
; -------------------------------------
; 計算並顯示平均分
Output prompt_Ave ;提示顯示平均分
mov ax,bx
pop bx ;彈出學生人數
div bl ;平均分取整數部分
mov bh,ah ;保存余數
xor ah,ah
call Dec_ASCII ;顯示平均分
mov ah,bh ;余數
mov bh,bl ;除數
mov cx,2 ;保留小數位數
call Dec_Frac ;把AL中的二進制無符號數作為小數轉換成顯式的十進制ASCII碼
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意鍵結束程序
mov ah,1
int 21h
mov ah,4ch ;結束程序
int 21h
Score_Table: ;學生成績存儲區
Code ENDS
END Start ;編譯到此結束

5. 用匯編語言用匯編語言編寫從鍵盤上輸入N個學生的成績,然後按成績降序輸出顯示各學生的成績。

學生成績輸出時是先輸出成績,再輸出其序號。


CODESEGMENT
ASSUMECS:CODE
ORG100H
START:PUSHCS
POPDS
PUSHCS
POPES
CALLINPUTNUM
MOVAH,2
MOVDL,13
INT21H
MOVDL,10
INT21H

LEASI,@ARRAY
LEABP,@XUHAO
MOVCX,@NUM
CALLSORTWORD

LEASI,@ARRAY
LEABX,@XUHAO
MOVCX,@NUM
CLD
@1:
LODSW
CALLDSPAXS
MOVAX,[BX]
CALLDSPAXS
INCBX
INCBX
MOVAH,2
MOVDL,13
INT21H
MOVDL,10
INT21H
LOOP@1

MOVAH,4CH
INT21H


;===============================================
;鍵盤輸入數值數組子程序(數組名為@array,元素個數存放在@num中)
;可以是負數
;採用字元串緩沖方式輸入
INPUTNUMPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
PUSHF
;對數組@array清零
MOVCX,100
MOVAX,0
LEADI,@ARRAY
CLD
REPSTOSW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;初始化序號數組
MOVCX,100
MOVAX,1
LEADI,@XUHAO
@WXUHAO:
STOSW
INCAX
LOOP@WXUHAO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVWORDPTR@NUM,0
;輸入的數據以一個空格分隔,以回車符結束輸入
LEADX,@STRA
MOVAH,10
INT21H
MOVCL,@STRN
MOVCH,0
MOVWORDPTR@STRM,CX
LEASI,@STR
CLD

LEADI,@ARRAY;將數組第一個元素的有效地址置入DI
MOVWORDPTR@NUM,0
@STIN:
MOVAX,0
PUSHAX
MOVBYTEPTR@SIGNN,0
@AGAIN1:
CMPWORDPTR@STRM,0
JE@LINE0
LODSB
DECWORDPTR@STRM
CMPAL,''
JE@LINE0
CMPAL,'-'
JNE@INPUT1
MOVBYTEPTR@SIGNN,1
JMP@AGAIN1
@INPUT1:
SUBAL,30H
MOVAH,0
MOVBX,AX
POPAX
MOVCL,10
MOVCH,0
MULCX
ADDAX,BX
PUSHAX
JMP@AGAIN1
@LINE0:
POPAX
CMPBYTEPTR@SIGNN,1
JNE@INPUT2
NEGAX
@INPUT2:
MOVWORDPTR[DI],AX
INCWORDPTR@NUM
CMPWORDPTR@STRM,0
JE@STINEND
INCDI
INCDI
JMP@STIN
@STINEND:
POPF
POPDI
POPSI
POPDX
POPCX
POPBX
POPAX
RET
@STRADB255
@STRNDB?
@STRDB255DUP(?)
@STRMDW0
@ARRAYDW100DUP(0)
@NUMDW0
@CHARDB?
@SIGNNDB0
@XUHAODW100DUP(0)
INPUTNUMENDP
;===============================
;字數組排序(有符號數冒泡排序)
SORTWORDPROCNEAR
;數組長度置入cx,字數組首地址置入si,序號數組首地址置入bp
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
PUSHBP
PUSHF
PUSHCX
POPDX
DECDX
@SORTWL1:
MOVCX,DX
MOVDI,SI
MOVBX,BP
@SORTWL2:
MOVAX,[DI+2]
CMPAX,[DI]
JL@SORTWNEXT;從大到小(無符號換成JB)
XCHGAX,[DI]
MOV[DI+2],AX
;====================
MOVAX,[BX+2]
XCHGAX,[BX]
MOV[BX+2],AX
;====================
@SORTWNEXT:
INCDI
INCDI
INCBX
INCBX
LOOP@SORTWL2
DECDX
JNZ@SORTWL1
POPF
POPBP
POPDI
POPSI
POPDX
POPCX
POPBX
POPAX
RET
SORTWORDENDP

;=================================
DSPAXSPROCNEAR
PUSHAX
TESTAX,8000H
JNS@DSPAXS1
PUSHAX
PUSHDX
MOVAH,2
MOVDL,'-'
INT21H
POPDX
POPAX
NEGAX
@DSPAXS1:
CALLDSPAX
POPAX
RET
DSPAXSENDP
;===============================
DSPAXPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHF
XORCX,CX
MOVBX,10
@DSPAX1:
XORDX,DX
DIVBX
INCCX
ORDX,30H
PUSHDX
CMPAX,0
JNE@DSPAX1
MOVAH,2
@DISPAX2:
POPDX
INT21H
LOOP@DISPAX2
MOVDL,32
INT21H
POPF
POPDX
POPCX
POPBX
POPAX
RET
DSPAXENDP
;==================================
CODEENDS
ENDSTART

6. 求解答,匯編語言如何設計10個學生成績統計

; 本程序在MASMPlus 1.2集成環境下通過編譯,經過調試,運行正確。
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:輸出一個字元
; 入口:dl=要顯示的字元
Output_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Output_Chr Endp
; -------------------------------------
; 功能:輸出回車換行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF Endp
; -------------------------------------
; 功能:把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
; 入口:AX=二進制數
; 出口:在當前游標位置顯示轉換後的ASCII碼數字
Dec_ASCII Proc Near
push ds
push cs
pop ds
push cs
pop es
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov BYTE ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
pop ds
ret
@@Temp_Save db 7 p(?)
Dec_ASCII EndP
; -------------------------------------
; 功能:把AL中的二進制無符號數作為小數轉換成顯式的十進制ASCII碼,
; 並送顯示屏顯示,未考慮四捨五入
; 入口:AH=二進制數,BH=除數,CX=保留小數位數
; 出口:在當前游標位置顯示轉換後的ASCII碼數字
Dec_Frac Proc Near
push ax
mov dl,'.'
call Output_Chr ;顯示一個小數點
pop ax
mov bl,10 ;乘數
@@Dec_Frac: mov al,ah ;余數不為0,處理小數部分
mul bl ;余數乘10,繼續做除法
div bh ;除以除數,取商數作為結果的一位小數
or al,30h
mov dl,al
call Output_Chr ;顯示一位小數
loop @@Dec_Frac
ret
Dec_Frac EndP
; -------------------------------------
SCORE db 56,69,84,82,73,88,99,63,100,80 ; 成績單
Elements equ ($-SCORE)/Type SCORE ;元素個數
RESULT db 6 p(0) ; 各分數段計數
SUM dw 0 ;總分
AVER db ? ;平均分
prompt_Res db '00---59: $'
prompt_Ave db 13,10,'Average: $' ;提示顯示平均分
Press_Key db 13,10,13,10,'The complated. Press any key to exit...$'
Start: push cs
pop ds
push cs
pop es ;使數據段、附加段與代碼段同段
; -------------------------------------
; 統計低於60分、60-69、70-79、80-89、90-100各分數段人數並顯示
lea si,SCORE ; 成績首地址
mov cx,Elements ;成績數目
mov dl,10 ; 用於除10
cld
@@Statics: lodsb ; 提取成績
xor ah,ah
add SUM,ax ;累計總分
div dl ; 除10
cmp al,5 ; >5,及格
jg $+4
mov al,5 ; <=5,不及格
sub al,5 ; 減5,分數段計數地址偏移量
cbw ;
push ax
pop bx
inc RESULT[bx] ; 計數增1
loop @@Statics ; 循環,統計下一個成績
mov al,RESULT[5] ;取100分人數
add RESULT[4],al ;加到90-100分數段
mov bl,59h
mov cx,5
lea si,RESULT ;各分數段計數數組首地址
lea dx,prompt_Res ; 統計結果字元串地址
List_Res: mov ah,9 ;顯示分數段提示信息
int 21h
lodsb ;讀入計數值
xor ah,ah
call Dec_ASCII ; 顯示統計結果
call Output_CTLF ;輸出一個回車、換行
mov al,bl
inc al
daa
mov bl,al
push cx
mov cl,4
xor ah,ah
shl ax,cl
shr al,cl
or ax,3030h
xchg ah,al
mov WORD ptr Prompt_Res,ax
mov al,bl
add al,9
mov bl,al
xor ah,ah
shl ax,cl
shr al,cl
or ax,3030h
xchg ah,al
mov WORD ptr Prompt_Res[5],ax
pop cx
loop List_Res
; -------------------------------------
; 計算並顯示平均分
Output prompt_Ave ;提示顯示平均分
mov bl,Elements
mov ax,SUM ;取總分
div bl ;平均分取整數部分
mov AVER,al ;保存平均分
xor ah,ah
call Dec_ASCII ;顯示平均分
Exit_Proc: lea dx,Press_Key ;提示操作完成,按任意鍵結束程序
mov ah,9
int 21h
mov ah,1
int 21h
mov ah,4ch ;結束程序
int 21h
Code ENDS
END Start ;編譯到此結束

7. 用匯編 記得用匯編 編制一程序,從鍵盤輸入的一個班學生的學號姓名成績,對成績排序

一次實驗,是不復可能編寫出制來這許多程序的。

實驗室的老師,會提供大部分(或全部)代碼。

學生做實驗時,現場操作,只需輸入下列:

輸入1是數據錄入並輸出(包括姓名、學號、成績);
輸入2是排序後的數據輸出(包括姓名、學號、成績、名次);
輸入3是可以按學號查找某學生,並輸出其成績,選擇修改或不改成績

而已。

8. 用匯編語言編寫 輸入十個學生某門課的成績,編程求出平均分、最高分和最低分,並顯示所求結果。

這個程序涉及幾個問題
1輸入
2輸出
3排序
4累計,求平均
你最好查書完成大部分,不明白的細節再來問

9. 求用匯編語言 解決10個學生的平均成績

data segment
buff db 30p(?);換成學生成績
word0 db 0ah,0dh
db 'the thirty scores are:','$'
word1 db 0ah,0dh
db 'average scores is:','$'
data ends
code segment
assume cs:code ,ds:data
start:mov ax,data
mov ds,ax
mov dx,offset word0
mov ah,9
int 21h
mov dx,offset buff
mov ah,9
int 21h;輸出成績
mov ax,0
mov si,offset buff
clc
adc0:adc ax,word ptr [si]
inc si
loop adc0
mov bl,30
div bl
mov ah,0
div al,10;下面是實現10進制顯示
mov dh,ah
mov dx,offset word1
mov ah,09h
int 21h

mov dl,al
mov ah,02h
int 21h
mov dl,dh
mov ah,02h
int 21h
mov ah,4ch
int 21h
code ends
end start

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919