注册 登录
编程论坛 汇编论坛

刚学汇编,请高手帮忙~急

hiwwr 发布于 2010-04-14 20:10, 529 次点击
我刚刚学汇编语言,现在有个问题请教各位~
某科室共9人,统计其工资在800——900之间的人数,并用十进制显示出来。
我编的代码如下:
程序代码:
.486
DATAS SEGMENT USE16
    GRADE DW 1000,1200,840,880,750,770,890,900,600,840;此处输入数据段代码
DATAS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
BEG:
    MOV AX,DATAS
    MOV DS,AX
    MOV CL,0
    MOV CH,9
    MOV SI,OFFSET GRADE
AGAIN:
    MOV BX,[SI]
    CMP BX,800
    JNB LAST
    CMP BX,900
    JNA LAST
    INC CL
    INT 21H
    JMP LAST
LAST:
    INC SI
    DEC CH
    JNZ AGAIN   
    MOV AH,4CH
    INT 21H
CODES ENDS
   END BEG


执行结果是错误的:
Write fault error writing device PRN
Abort,Retry,Ignore,Fail?
请高手指教!O(∩_∩)O谢谢~
顺便问一下怎么把统计的人数以十进制显示出来?
还有我是用MASMPlus编译的,怎么解决窗口执行后立刻消失的问题?
新手,问的问题也许有点幼稚,让各位大侠见笑~
 
1 回复
#2
codewriter2010-04-15 20:53
DATAS SEGMENT USE16
    GRADE DW 1000,1200,840,880,750,770,890,900,600,840
DATAS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
BEG:
    MOV AX,DATAS
    MOV DS,AX
    MOV CL,00H
    MOV CH,09H
    mov al,00H
    MOV SI,OFFSET GRADE
AGAIN:
    MOV BX,[SI]
    CMP BX,800
    call  LAST
    loop AGAIN
    mov ax,4c00H
    mov al,cl
    int 10H
    mov ax,4c00H
    INT 21H
   
LAST:   
    cmp bx,900
    inc  cl  
    ret
CODES ENDS
   END BEG


我的思路不知你明白了没有,我大体说一下,是在主代码段判断某一人工资是否大于800,如果是大于800就调用子程序判断是否小于900,如果小于900那就是cl寄存器加1,然后返回到主代码段继续循环判断其他的工资是否大于800且小于900,如此循环就能够得到所要的人数,俺说的不知楼主是否清楚了,俺也没有调试,你自己调试吧,祝你顺利。
1