当前位置:首页 » 考试成绩 » 汇编完成输入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