汇编语言:按学号查找学生成绩信息

汇编语言:按学号查找学生成绩信息

题目要求

已知ASSEMBLY数组存放的是按照学号从1到10的学生汇编成绩。
现在要求从键盘上输入一个学生的学号,然后显示该生对应的汇编成绩。
输入不存在的学号要有报错提示。

运行截图


编程平台

Masm for Windows 集成实验环境 2012.5

代码实现

DATAS SEGMENT
    ASSEMBLY DB 10,20,30,40,50,60,70,80,90,100;学号从1到10的学生汇编成绩
    input DB 'Enter the student id: $'
    result DB 'The assembly score is: $'
    error DB 'The student id does not exist!$'
DATAS ENDS

STACKS SEGMENT STACK
    DB 200H DUP(?)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC
    MOV AX,DATAS
    MOV DS,AX
    
    LEA DX,input;输入提示
    MOV AH,9H
    INT 21H
    
    MOV BX,0;BX存放输入的数值
  i:
    MOV AH,1H
    INT 21H
    CMP AL,0DH;输入回车则停止输入
    JE s
    CALL SUBP1;将输入的数字样式不变地放在十六进制中
    MOV AH,0
    MOV DX,AX;DX存放当前输入的字符
    MOV CL,4
    SHL BX,CL;BX每次左移4位
    ADD BX,DX;(BX)=(BX)+(DX)
    JMP i
   
  s:
    CMP BX,1H
    JB err
    CMP BX,10H
    JG err
    JE special;输入的数字为10
    CMP BX,9H
    JG err
    DEC BX;此时确定输入的值在1~9之间,由于偏移地址从0开始,故BX自减
    JMP output
    
special:
    SUB BX,7;十进制的10对应的是十六进制的A
  
output: 
    LEA DX,result;输出提示
    MOV AH,9H
    INT 21H
    
    MOV AL,[BX]
    MOV AH,0
    CALL SUBP2;用十进制形式输出数值
    JMP finish
    
err:
    LEA DX,error;错误提示
    MOV AH,9H
    INT 21H
    
finish:  
    MOV AH,4CH
    INT 21H
MAIN ENDP
;子程序
;功能:让十进制数字样式不变地放在十六进制中,如将10D变成10H。
;入口参数:AL存放输入的数字。
SUBP1 PROC
   ;判断是否为数字
	CMP AL,30H
	JB stop
    CMP AL,39H
    JG stop
    SUB AL,30H
    
stop:
    RET
SUBP1 ENDP
;子程序
;功能:用十进制形式输出数值。
;入口参数:AX存放要输出的数值。
SUBP2 PROC
	MOV BX,10
	MOV SI,0;记录要输出的位数
	
lop1:
    MOV DX,0
    DIV BX
    PUSH DX;余数入栈
    INC SI
    CMP AX,0;也可以写成OR AX,AX
    JNE lop1
    
lop2: 
    MOV AH,2
    POP DX 
    ADD DL,30H;转换成对应的ASCII码
    INT 21h
    DEC SI
    CMP SI,0
    JNE lop2

    RET
SUBP2 ENDP
CODES ENDS
    END MAIN

如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值