zoukankan      html  css  js  c++  java
  • 汇编语言程序设计实验二

      分支程序设计(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
    ——来自 熊猫 [http://www.cnblogs.com/xiongmao-cpp/]
  • 相关阅读:
    处理溢出
    电梯调度之需求分析
    求二维矩阵和最大的子矩阵
    四则运算改进,结果判断
    结对开发
    四则运算题测试阶段
    阶段二站立会议(2)
    阶段二站立会议(1)
    课程改进意见
    场景调研
  • 原文地址:https://www.cnblogs.com/xiongmao-cpp/p/4908082.html
Copyright © 2011-2022 走看看