汇编语言程序设计实验二
分支程序设计(1)
实验内容:在内存 Score 缓冲区中存放有 100 个学生的成绩数据,为无符号字节数。假设学生成绩在[90, 100]区间为优秀,在[80,90)区间为良好,在[70,80)区间为一般,在[60,70)区间为及格,在[0,60)区间为不及,要求统计出不及格,及格,一般,良好和优秀的人数,分别送入 Notpassed, Passed, Good, Better 和 Best字节单元。 用普通的跳转语句实现上述功能。
分析:实验内容没什么好说的了。首先将一个成绩放到一个寄存器中,然后将该成绩依次和60、70、80、90相比较,并根据比较的结果分别跳到相应的分支中去处理(对应的分数段人数+1),进行100次循环即可。该程序主要是让我们熟悉几条常用的条件转移指令:JL(小于)、JNL(不小于)、JG(大于)、JNG(不大于)。当然还有其他的,像无条件转移指令JMP等等,都可以用来类似高级语言中的if、for、while的条件判断。通常在这些指令前会使用一些改变状态标志的指令比如cmp等。
其中,在这个实验中可以学习到的内容是。在数据段中定义了student变量,包含100个字节元素。这里和高级语言中的数组的概念是一样的。其实回想高级语言的数组声明,也是为变量开辟一块连续的内存空间用来给数组保存数据,变量名保存着数组的首地址。在汇编语言中,也可以像高级语言一样,通过“下标”来访问“数组”的元素。例如:可以通过student[0]来访问第一个元素,通过student[3]来访问第四个元素等等。但是需要注意的是,之所以可以将si+1来顺序访问下一个student元素,是因为student分配的是字节。如果student分配的是字变量,则访问就会有点不同。访问第一个元素时,应为student[0],访问第二个元素时,应该为student[2],访问第三个元素时,应该为student[4]……访问第i个元素,则为student[2*i]。这个主要是要考虑字节在内存中的分配与字在内存中的分配的区别,便可明了。
实现该功能的汇编代码如下:
;使用条件分支结构实现分数统计 stack segment stack db 2014 dup(?) stack ends data segment 'data' student db 70,75,80,85,90,95,70,61,55,45, 90 dup(75) Notpassed db 0 Passed db 0 Good db 0 Better db 0 Best db 0 data ends code segment 'code' assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax mov si,0 mov cx,100 again: cmp student[si],60 jl fun0 cmp student[si],70 jl fun1 cmp student[si],80 jl fun2 cmp student[si],90 jl fun3 inc Best jmp done fun0: inc Notpassed jmp done fun1: inc Passed jmp done fun2: inc Good jmp done fun3: inc Better jmp done done: inc si loop again mov bl,Good mov cx,8 show: mov ah,02H shl bl,1 mov dl,0 adc dl,30H int 21H loop show mov ax,4c00H int 21H code ends end start
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· 卧槽!C 语言宏定义原来可以玩出这些花样?高手必看!
· langchain0.3教程:从0到1打造一个智能聊天机器人