2021-05-27

该博客介绍了一个使用汇编语言编写的程序,用于根据用户输入的成绩判断等级,包括excellent, good, medium, pass和failed。程序通过键盘读取学生姓名、科目和成绩,然后运用比较和条件跳转指令来实现等级判断。同时,博主使用IDAPro进行逆向工程和调试,详细记录了寄存器和内存空间的变化,以理解程序执行流程。
摘要由CSDN通过智能技术生成

汇编成绩等级判断实验

一、实训目的
1.熟练运用汇编语言数据定义伪代码实现数据的定义与分配
2.运用比较指令,实验整数大小的判断
3.运用条件跳转指令,实现不同用户输入情况下实现不同的成绩等级输出
4.运用IDA Pro进行单步调试,并记录寄存器、内存空间值的变化
二、实训内容
1.编写一个汇编程序,完成如下要求:
(1)程序包含必要的数据定义语句,保存中间运算结果。
(2)程序通过键盘输入学生的姓名,科目与成绩
(3)程序根据学生的成绩判断成绩等级,90-100为excellent、80-89为good,70-79为medium,60-69为pass,60以下为failed
(4)程序输出的内容为:如果学生成绩在60以上,输入内容为:
congratulations 学生姓名, your 课程名 grade is 等级。
如果学生成绩在60以下,输出内容为:
sorry 学生姓名, your 课程名 grade is 等级。
2.使用IDA Pro对程序进行逆向及调试,要求如下:
(1)在每次用户输入后程序位置设置断点
(2)记录当前寄存器的值,并对于程序代码相关的寄存器值进行解读
(3)记录每次输入后,程序定义的变量空间的值,并结合用户输入情况进行解读
(4)在程序程序跳转前设置断点,记录与程序代码相关的标记寄存器变化
(5)输出汇总结果前设置断点,并对于程序相关的寄存器和内存空间的值进行解读

代码片.

INCLUDE Irvine32.inc	;从Irvine32文件中复制所需要的定义和设置信息
.data				;后面插入变量
;学生姓名
cyy118_name Byte 20 dup(?)
cyy118_class byte 30 dup(?)
cyy118_score byte ?

congratulations BYTE "congratulations ",0
sorry BYTE "sorry ",0
your  BYTE ",your ", 0
grade BYTE " grade is ",0
excellent BYTE "excellent.", 0
good  BYTE "good.", 0
mediu  BYTE "medium.", 0
pass  BYTE "pass.", 0
failed  BYTE "failed.", 0

.code
main PROC
	mov edx,offset cyy118_name
	mov ecx,lengthof cyy118_name
	call ReadString
	
	mov edx,offset cyy118_class
	mov ecx,lengthof cyy118_class
	call ReadString

	call ReadInt;读入分数直接存入eax
	;判断分数为多少,做出对应选择
	cmp eax,90
	jae p1
	cmp eax,80
	jae p2
	cmp eax,70
	jae p3
	cmp eax,60
	jae p4
	cmp eax,0
	jae p5

p1:
	mov edx,offset congratulations
	call WriteString
	mov EDX,OFFSET cyy118_name
	call WriteString
	mov EDX,OFFSET your
	call WriteString
	mov EDX,OFFSET cyy118_class
	call WriteString
	mov EDX,OFFSET grade
	call WriteString
	mov EDX,OFFSET excellent
	call WriteString
	exit
p2:
	mov edx,offset congratulations
	call WriteString
	mov EDX,OFFSET cyy118_name
	call WriteString
	mov EDX,OFFSET your
	call WriteString
	mov EDX,OFFSET cyy118_class
	call WriteString
	mov EDX,OFFSET grade
	call WriteString
	mov EDX,OFFSET good
	call WriteString
	exit
p3:
	mov edx,offset congratulations
	call WriteString
	mov EDX,OFFSET cyy118_name
	call WriteString
	mov EDX,OFFSET your
	call WriteString
	mov EDX,OFFSET cyy118_class
	call WriteString
	mov EDX,OFFSET grade
	call WriteString
	mov EDX,OFFSET mediu
	call WriteString
	exit
p4:
	mov edx,offset congratulations
	call WriteString
	mov EDX,OFFSET cyy118_name
	call WriteString
	mov EDX,OFFSET your
	call WriteString
	mov EDX,OFFSET cyy118_class
	call WriteString
	mov EDX,OFFSET grade
	call WriteString
	mov EDX,OFFSET pass
	call WriteString
	exit
p5:
	mov EDX,OFFSET sorry
	call WriteString
	mov EDX,OFFSET cyy118_name
	call WriteString
	mov EDX,OFFSET your
	call WriteString
	mov EDX,OFFSET cyy118_class
	call WriteString
	mov EDX,OFFSET grade
	call WriteString
	mov EDX,OFFSET failed
	call WriteString
	exit
main ENDP			;后跟其他子程序
END main			;最后一行



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值