汇编程序:成绩分段统计
2017-05-12 21:03
190 查看
【任务】
内存自BUF单元开始的缓冲区连续存放着100个学生的英文分数,编程序统计其中90~100、60~89、60以下者各有多少人?并把结果连续存放到自RESUT开始的单元中。
【参考解答1】
【参考解答2】
【指令说明】
汇编语言中,串操作指令LODSB/LODSW是块读出指令,其具体操作是把SI指向的存储单元读入累加器,其中LODSB是读入AL,LODSW是读入AX中,、,然后SI自动增加或减小1或2位。当方向标志位DF=0时,则SI自动增加;DF=1时,SI自动减小。
与LODSB/LODSW类似的,STOSB/STOSW是块写入指令,其具体操作是把累加器的内容写入到指向的存储单元中。其中STOSB是从AL中读入,STOSW是从AX中读入,然后SI自动增加或减小1或2位。当方向标志位DF=0时,则SI自动增加;DF=1时,SI自动减小。
内存自BUF单元开始的缓冲区连续存放着100个学生的英文分数,编程序统计其中90~100、60~89、60以下者各有多少人?并把结果连续存放到自RESUT开始的单元中。
【参考解答1】
assume ds:data, ss:stack, cs:code data segment buf db 85, 72, 79, 90, 79, 54, 63, 66, 83, 79, 71, 77, 77, 65, 89, 93 db 69, 96, 72, 98, 60, 78, 69, 68, 80, 65, 91, 64, 90, 90, 64, 90 db 99, 55, 84, 56, 80, 54, 55, 66, 53, 54, 83, 61, 52, 92, 66, 51 db 95, 81, 51, 100, 70, 65, 50, 74, 91, 57, 95, 66, 54, 50, 73, 59 db 78, 80, 92, 78, 89, 78, 99, 100, 82, 92, 59, 71, 74, 81, 93, 74 db 98, 57, 57, 96, 76, 79, 57, 67, 52, 84, 87, 54, 67, 72, 59, 75 db 64, 89, 77, 80 resut db 3 dup(0) data ends stack segment stack db 100H dup(0) stack ends code segment start: mov ax, data mov ds, ax mov es, ax mov ax, stack mov ss, ax mov sp, 100H mov bx, 0 mov cx, 100 ao:mov al, buf[bx] cmp al, 90 jl l60 inc [resut] ;90-100的人数 jmp com l60: cmp al, 60 jge k8960 inc [resut+2] ;60以下 jmp com k8960: inc [resut+1] ;60-89 com: inc bx loop ao mov ax, 4c00h int 21h code ends end start
【参考解答2】
assume ds:data, ss:stack, cs:code data segment buf db 85, 72, 79, 90, 79, 54, 63, 66, 83, 79, 71, 77, 77, 65, 89, 93 db 69, 96, 72, 98, 60, 78, 69, 68, 80, 65, 91, 64, 90, 90, 64, 90 db 99, 55, 84, 56, 80, 54, 55, 66, 53, 54, 83, 61, 52, 92, 66, 51 db 95, 81, 51, 100, 70, 65, 50, 74, 91, 57, 95, 66, 54, 50, 73, 59 db 78, 80, 92, 78, 89, 78, 99, 100, 82, 92, 59, 71, 74, 81, 93, 74 db 98, 57, 57, 96, 76, 79, 57, 67, 52, 84, 87, 54, 67, 72, 59, 75 db 64, 89, 77, 80 resut db 3 dup(0) data ends stack segment stack db 100H dup(0) stack ends code segment start: mov ax, data mov ds, ax mov es, ax mov ax, stack mov ss, ax mov sp, 100H lea si, buf mov cx, 100 cld ao:lodsb ;lodsb指令见后说明 cmp al, 90 jl l60 inc [resut] ;90-100的人数 jmp com l60: cmp al, 60 jge k8960 inc [resut+2] ;60以下 jmp com k8960: inc [resut+1] ;60-89 com: loop ao mov ax, 4c00h int 21h code ends end start
【指令说明】
汇编语言中,串操作指令LODSB/LODSW是块读出指令,其具体操作是把SI指向的存储单元读入累加器,其中LODSB是读入AL,LODSW是读入AX中,、,然后SI自动增加或减小1或2位。当方向标志位DF=0时,则SI自动增加;DF=1时,SI自动减小。
与LODSB/LODSW类似的,STOSB/STOSW是块写入指令,其具体操作是把累加器的内容写入到指向的存储单元中。其中STOSB是从AL中读入,STOSW是从AX中读入,然后SI自动增加或减小1或2位。当方向标志位DF=0时,则SI自动增加;DF=1时,SI自动减小。
相关文章推荐
- 实训汇编语言设计——学生的成绩统计
- 最近项目报表开发中写的存储过程-成绩分段统计
- [Intel汇编-MASM]数据定义与分段程序
- 汇编程序:求平均成绩(用汇编玩结构体)
- 汇编程序:求总成绩
- C语言历年考题(某大学学生成绩统计程序)
- 汇编语言:在以GRADE为首地址的数组中存放着某班某门课30个学生的成绩。试编写一完整汇编语言程序实现:统计小于60分,60~89分和大于等于90分的学生人数,统计结果分别存放在LOWNUM、MIDD
- mysql中利用ceil函数对成绩进行分段统计
- 用PL/SQL语言编写一程序,实现按部门分段统计各个工资段的职工人数、以及各部门的工资总额
- [汇编]统计成绩分布
- 初学汇编之第二个程序(统计ax为1的个数)
- GNU汇编程序中的分段
- 统计各班学生的平均成绩,各班人数不等,但不超过30,编写一个程序求
- GNU汇编程序中的分段
- 实验七4编写程序,输入一批学生的成绩,遇0或负数则输入结束,要求统计并输出优秀(大于85)、通过(60~84)和不及格(小于60)的学生人数。
- C语言结构体的使用!简易学生成绩统计程序发布!
- 学生成绩统计程序(源码)
- 实验7(4)编写程序,输入一批学生的成绩,遇0或负数则输入结束,要求统计并输出优秀(大于85)、通过(60~84)和不及格(小于60)的学生人数。
- 汇编程序:统计0的个数
- 汇编程序:统计数据个数