汇编语言程序设计:1:成绩等级判断程序:90以上输出A,80~90输出B……;可以重复输入,有退出键功能。 5
展开全部
Code SEGMENT
ASSUME CS:Code,DS:Code
CR EQU 000DH
LF EQU 000AH
KBBack EQU 0008H
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----MACRO--------------LEA--DX----------
; MOV输出AH字符
; INTdl=要显示的字符 ENDMtput_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Output_Chr endp
; --------------------------------------PROC
NEAR:输出回车换PUSHutAXt_CTLFMOVocAHear
puINT ax
puPOP dAX
mRET ah,02h
movENDP,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; ---------------------PROC-NEAR-----PUSH--AX; 功能:取PUSH
DX入口:无MOV出口:AH=行号,DL=列号MOVetDLrsor ProcINTar
MOV DLSH AX
INT PUSHPOPXDX POP PAXH CXRET XOR ENDPX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP CX
POP BX
PROCPNEAR AX
PUSHETAXCursor_Row DBPUSH
BXrsor_Col DB PUSHeCXursor EndP
XOR---BX-BX-------------MOV---AH-----------
; INT置光标位置
; 入口:Cursor_MOV=行坐标; Cursor_DHl: 列坐标)
SetCMOVor Proc NeaDL
POPH CX
POPH CBX
POPH AX
RETH AX
DB MOV DH,CursDB_Row
ENDP DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
POP DXPROC NEAR RET
SetCurPUSH DXdP
; -------PUSH-CX-------------PUSH--BX------
; 功能:PUSH一个AX位数的十进制数字,将其转换MOV制数并DH在指定的内存单元。
; 入口:@@DigitsMOV位数;DL=保存输入的数字首地址
; @@TXOR_DaBX=BX的数据类型,B=字节类型,MOV类型。AH; 出口:转换后的二进制数保存INT所指的单元
Input_Digit POPc NAXr
push dxPOP pBXh cx
pushPOP
CX push di
POP DX,@@Save_Tmp
RETpush di
cENDP 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 @@SaPROCiNEAR@KB_BPUSH DXc CuPUSH_CXl
PUSH BXx
PUSH DIi
@@LEAacDI call SetCursor PUSH位DI
CLD @@IMOVtCL@Save_Dig: and XOR,0CH CH换成二进制PUSH CXtosb ;保存
CALLop @@Input ;接受下一个数字
@@ASC_MOV: AHv ax,cx
pop cx
poINTsi
subCMPx,AL ;实际输入的数字位数
xor bp,bp
xor dx,dx
xJZ ax,ax
jcxz @@Retturn ;若是直接回车,没有输入任CMP,按AL'0'处理
deJZ cx ;实际输入的数字位数减1,准备把输入的这一串数字转换成二进制数
CMPcxAL@@One_DigJB ;若输入的数字只有一位,转去直接保存这个二进制数
mov bx,10CMP@MAL_Ten: lodJA
cbw
add ax,bp
mul bx
JMP bp,ax
loop @@Mul_TeDEC@@One_Digit:lodsbINC CXw
DECd DIx,bp
@@SaveCALL: pop di
cmp @@Type_DJMP,'B' ;字节类型?
jz $+5AND ALosw
jmp $+3
stosb
pop bx
LOOPp cx
pop dx
clc
ret
@@MOVtuAX:CXop dPOP CXop bPOP SIop cSUB CXoAX dx
stc
ret
@@DiXORs BP BP ;十进制XOR数DX@TDXe_DatXORb AXBAX;保存的数JCXZB=字节类型,W=字类型
@@Save_Tmp db 16 dup(?)
Input_Digit EndP
; --DEC--CX--------------------------------
Prompt_Str db 'Please enter a sJCXZ: $' ;提示输入一个分数
Score db ? ;存放分数
Press_Key db 13,10,13,10,'PMOVs BXy key to exit...$'
StartCBW pushADD
AX BPp dsMUL BXsh csMOV BPpAXes ;使LOOP附加段与代码段同段
; ---------------------CBW-----ADD--AX-BP--
; 输入成绩
POPv DI@DigiCMP3 ;十进制数字位数
mov @@Type_Data,'BJZ;保存的数据类型。B=字节类型,W=字类JMPInput_Score:Output pPOPptBXtr ;提POP分数CX lePOPdiDXcore CLC存放地址RET call Input_DiPOP ;DI分数
POPc BX@Any_POP ;CX直接回车,POP入任DX字,则结束STC
RET dl,10 ; DB除10
mov al,Score ; 提取分数
DB xor ah,ah
div dl ; 除10
cmp al,5 ; >5DB格
DUP ja $+4
ENDP al,5 ; <=5,不及格
sub al,5 ; 减5
mov dl,'F'
test al,0ffh
jz $+6
cmp al,5
DBjz $+4
inc al
add Cursor_Col,6
call SetDBrsor
sub dl,al
cDBl Output_Chr ;显示一个字符
call Output_CTLF ;输出一个回车、换行
PUSHmCS InpuPOPcoDS
@@APUSHeCS OutpPOPPrESs_Key
mov ah,1
int 21h
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
MOVMOVLEADICALLJCMOVDLMOVALXORAHAHDIVDLCMPALJAMOVALSUBALMOVDLTESTALJZCMPALJZINCALADDCALLSUBDLALCALLCALLJMPMOVAHINTMOVAHINTENDSEND
ASSUME CS:Code,DS:Code
CR EQU 000DH
LF EQU 000AH
KBBack EQU 0008H
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----MACRO--------------LEA--DX----------
; MOV输出AH字符
; INTdl=要显示的字符 ENDMtput_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Output_Chr endp
; --------------------------------------PROC
NEAR:输出回车换PUSHutAXt_CTLFMOVocAHear
puINT ax
puPOP dAX
mRET ah,02h
movENDP,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; ---------------------PROC-NEAR-----PUSH--AX; 功能:取PUSH
DX入口:无MOV出口:AH=行号,DL=列号MOVetDLrsor ProcINTar
MOV DLSH AX
INT PUSHPOPXDX POP PAXH CXRET XOR ENDPX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP CX
POP BX
PROCPNEAR AX
PUSHETAXCursor_Row DBPUSH
BXrsor_Col DB PUSHeCXursor EndP
XOR---BX-BX-------------MOV---AH-----------
; INT置光标位置
; 入口:Cursor_MOV=行坐标; Cursor_DHl: 列坐标)
SetCMOVor Proc NeaDL
POPH CX
POPH CBX
POPH AX
RETH AX
DB MOV DH,CursDB_Row
ENDP DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
POP DXPROC NEAR RET
SetCurPUSH DXdP
; -------PUSH-CX-------------PUSH--BX------
; 功能:PUSH一个AX位数的十进制数字,将其转换MOV制数并DH在指定的内存单元。
; 入口:@@DigitsMOV位数;DL=保存输入的数字首地址
; @@TXOR_DaBX=BX的数据类型,B=字节类型,MOV类型。AH; 出口:转换后的二进制数保存INT所指的单元
Input_Digit POPc NAXr
push dxPOP pBXh cx
pushPOP
CX push di
POP DX,@@Save_Tmp
RETpush di
cENDP 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 @@SaPROCiNEAR@KB_BPUSH DXc CuPUSH_CXl
PUSH BXx
PUSH DIi
@@LEAacDI call SetCursor PUSH位DI
CLD @@IMOVtCL@Save_Dig: and XOR,0CH CH换成二进制PUSH CXtosb ;保存
CALLop @@Input ;接受下一个数字
@@ASC_MOV: AHv ax,cx
pop cx
poINTsi
subCMPx,AL ;实际输入的数字位数
xor bp,bp
xor dx,dx
xJZ ax,ax
jcxz @@Retturn ;若是直接回车,没有输入任CMP,按AL'0'处理
deJZ cx ;实际输入的数字位数减1,准备把输入的这一串数字转换成二进制数
CMPcxAL@@One_DigJB ;若输入的数字只有一位,转去直接保存这个二进制数
mov bx,10CMP@MAL_Ten: lodJA
cbw
add ax,bp
mul bx
JMP bp,ax
loop @@Mul_TeDEC@@One_Digit:lodsbINC CXw
DECd DIx,bp
@@SaveCALL: pop di
cmp @@Type_DJMP,'B' ;字节类型?
jz $+5AND ALosw
jmp $+3
stosb
pop bx
LOOPp cx
pop dx
clc
ret
@@MOVtuAX:CXop dPOP CXop bPOP SIop cSUB CXoAX dx
stc
ret
@@DiXORs BP BP ;十进制XOR数DX@TDXe_DatXORb AXBAX;保存的数JCXZB=字节类型,W=字类型
@@Save_Tmp db 16 dup(?)
Input_Digit EndP
; --DEC--CX--------------------------------
Prompt_Str db 'Please enter a sJCXZ: $' ;提示输入一个分数
Score db ? ;存放分数
Press_Key db 13,10,13,10,'PMOVs BXy key to exit...$'
StartCBW pushADD
AX BPp dsMUL BXsh csMOV BPpAXes ;使LOOP附加段与代码段同段
; ---------------------CBW-----ADD--AX-BP--
; 输入成绩
POPv DI@DigiCMP3 ;十进制数字位数
mov @@Type_Data,'BJZ;保存的数据类型。B=字节类型,W=字类JMPInput_Score:Output pPOPptBXtr ;提POP分数CX lePOPdiDXcore CLC存放地址RET call Input_DiPOP ;DI分数
POPc BX@Any_POP ;CX直接回车,POP入任DX字,则结束STC
RET dl,10 ; DB除10
mov al,Score ; 提取分数
DB xor ah,ah
div dl ; 除10
cmp al,5 ; >5DB格
DUP ja $+4
ENDP al,5 ; <=5,不及格
sub al,5 ; 减5
mov dl,'F'
test al,0ffh
jz $+6
cmp al,5
DBjz $+4
inc al
add Cursor_Col,6
call SetDBrsor
sub dl,al
cDBl Output_Chr ;显示一个字符
call Output_CTLF ;输出一个回车、换行
PUSHmCS InpuPOPcoDS
@@APUSHeCS OutpPOPPrESs_Key
mov ah,1
int 21h
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
MOVMOVLEADICALLJCMOVDLMOVALXORAHAHDIVDLCMPALJAMOVALSUBALMOVDLTESTALJZCMPALJZINCALADDCALLSUBDLALCALLCALLJMPMOVAHINTMOVAHINTENDSEND
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询