回 帖 发 新 帖 刷新版面

主题:急!!!一道汇编题,调了半天也不行,请教.....

题目:
设有10个学生的成绩分别是(如程序)。
试编制个程序统计60~69,70~79,80~89,90~99,和100分的人数分别
存放到S6 ,S7,S8,S9,S10的内存单元中。
data    segment
    scores db 76,69,84,90,73,88,99,63,100,80
    count  equ $-scores
    s    db 6 dup(?)
data ends
;--------------------
code    segment
    assume cs:code,ds:data
main    proc    far
    push    ds
    xor    ax,ax
    push    ax
    mov    ax,data
    mov    ds,ax
start:
    mov    cx,count
    mov    ah,0
    mov    bx,0
    mov    dx,0
    mov    si,offset scores
lop:
    mov    al,[si]
    cmp    al,60
    jb    next
    cmp    al,70
    jb    bad
    cmp    al,80
    jb    soso
    cmp    al,90
    jb    good
    cmp    al,100
    jb    highly
    je    best
;---------------------------------
best:
    inc    ah
    jmp    next
highly:
    inc    bh
    jmp    next
good:
    inc    bl
    jmp    next
soso:
    inc    dh
    jmp    next
bad:
    inc    dl
;
next:
    inc    si
    loop    lop
;--------------------------
    mov    di,offset s
    mov    [di],ah
    mov    [di+1],bh
    mov    [di+2],bl
    mov    [di+3],dh
    mov    [di+4],dl
;--------------------------
print:
    mov    dl,[di]
    add    dl,30h
    mov    ah,2
    int    21h
    mov    dl,[di+1]
    add    dl,30h
    mov    ah,2
    int    21h
    mov    dl,[di+2]
    add    dl,30h
    mov    ah,2
    int    21h
    mov    dl,[di+3]
    add    dl,30h
    mov    ah,2
    int    21h
    mov    dl,[di+4]
    add    dl,30h
    mov    ah,2
    int    21h
;
    mov    ah,4ch
    int    21h
;-------------------------
main    endp
    code    ends
        end    start

不知为什么这个程序不行。
还有,要实现循环打印该怎么做?

回复列表 (共4个回复)

沙发

循环打印:(不知道对不对,高手看看吧!指点一下!)
    mov si,di
    add si,5
prnint:
    mov    dl,[di]
    add    dl,30h
    mov    ah,2
    int    21h
    inc di
    comp si,di
    jnz  print
不过你这里我是看不懂的:count  equ $-scores  然后下面你来了个mov cx,count你的意思是用来控制循环多少次,但是问题应该就是出在了这里,我建议你把它该为这样看看: cutnt equ ?   这里 不知道该怎么写,我基础有问题,现在是初级阶段学习中 '?'表示最后一个数的地址

板凳

count的值是10,指那10个分数,循环每一次检测一个数。

3 楼


解题的方法我想还是对的,但运行起来就是不行。在Debug里调试发现
DI的值好像一直没变。
好难明啊,为什么还没有人帮我改正??急.............!

4 楼

跟踪调试一遍,发现该程序除了把 start: 标号放错位置之外,其它没有任何问题,思路和结果都是正确的 (结果: 12322 反序)
 DI 值按这个程序思路来,不变是正确的
 

我来回复

您尚未登录,请登录后再回复。点此登录或注册