在emu8086中学习汇编语言统计分数段个数程序

s1      segment stack
        dw      100h    dup(?)
top     label   word
s1      ends
s2      segment
score   dw      76,69,84,90,73,88,99,63,100,80,'$'
s6 dw 0,'$'
s7 dw 0,'$'
s8 dw 0,'$'
s9 dw 0,'$'
s10 dw 0,'$'
s2      ends
s3      segment
        assume  cs:s3,ds:s2,ss:s3
main    proc    far
        mov     ax,s1
        mov     ss,ax
        lea     sp,top
        mov     ax,s2
        mov     ds,ax
 mov si,0
repeat: cmp si,20
 jz exit
 mov ax,score[si]
 cmp ax,100
 jnz l
 mov bx,s10[0]
 inc bx
 mov s10[0],bx
 jmp l5        ;必须跳转到si加二那里
l: cmp ax,90
 jb l2
 mov bx,s9[0]
 inc bx
 mov s9[0],bx
 jmp l5
l2: cmp ax,80
 jb l3
 mov bx,s8[0]
 inc bx
 mov s8[0],bx
 jmp l5
l3: cmp ax,70
 jb l4
 mov bx,s7[0]
 inc bx
 mov s7[0],bx
 jmp l5
l4: mov bx,s6[0]
 inc bx
 mov s6[0],bx
l5: add si,2
 jmp repeat
exit: mov ah,4ch
 int 21h
main endp
s3      ends
        end     main

有10个学生成绩;编写程序统计60-69分,70-79分,80-89分,90-99分和100分的人数,分别放到S6,S7,S8,S9,S10单元中;

成绩:76,69,84,90,73,88,99,63,100,80
手工统计:
60-69分:2
70-79分:2
80-89分:3
90-99分:2
100分:1

下面在emu8086中运行程序来验证;

程序放入emu8086;

点击 emulate;出来运行界面;在original source code 窗口,鼠标选择第54行;对应 emulator 窗口中,仿真内存窗口,自己定位到07395地址处;这是这行代码在8086内存中的位置; 

从 debug 菜单选择 run until(07395h); 

运行到07395断住;此时统计已完成; 

在 original source code 窗口,选中07行, 这是自己定义的内存单元 s6;s6到s10是四字节单元;把仿真内存窗口拉长,一次可看到五个结果;

从07316到07319,这是s6单元;07326开始是s10单元;看这五个内存单元内容,存的是 2 2 3 2 1; 和手工统计结果一样;

程序中 cmp ax,90,,,cmp ax 80,,, 这些就是判断一个成绩是否在某个段;每次bx加1来存储在此段的个数;

mov ax,score[si]

每次是把score中的数放一个到ax,然后判断;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值