汇编程序:成绩分段统计

简介: 【任务】   内存自BUF单元开始的缓冲区连续存放着100个学生的英文分数,编程序统计其中90~100、60~89、60以下者各有多少人?并把结果连续存放到自RESUT开始的单元中。

【任务】
  内存自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自动减小。
目录
相关文章
加快软盘操作速度的汇编程序源代码
加快软盘操作速度的汇编程序源代码
|
4月前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
140 3
|
4月前
|
程序员 编译器 数据处理
汇编高手秘籍:解锁性能优化新境界,用汇编语言让你的程序飞起来!
【8月更文挑战第31天】汇编语言作为编程基石,其高效性能备受推崇。尽管现代软件开发更偏爱高级语言,但在性能要求极高的场景下,汇编优化仍不可或缺。本文通过示例代码介绍四种优化技巧:循环展开、寄存器分配、指令重排及SIMD指令使用,显著提升执行效率。同时强调分析性能瓶颈、测试优化效果及保持代码可读性的重要性,助力开发者在关键代码路径上实现性能突破。
116 0
8086 汇编笔记(五):包含多个段的程序
8086 汇编笔记(五):包含多个段的程序
|
7月前
|
编译器 开发者 C++
8086 汇编笔记(三):第一个程序
8086 汇编笔记(三):第一个程序
|
6月前
|
C语言
程序技术好文:部分ARM汇编指令解读
程序技术好文:部分ARM汇编指令解读
|
7月前
|
存储 编译器
C51汇编程序
C51汇编程序
71 5
|
7月前
|
存储 程序员 数据处理
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
759 1
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
|
存储 Java C++
汇编语言、寄存器分类及程序计数器
汇编语言、寄存器分类及程序计数器
151 0
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)