回 帖 发 新 帖 刷新版面

主题:高手帮我看看

这个是个求平均数的问题,程序如下.我读了半天,有点想不明白调用的子程序ADECXB是干什么用的,感觉上是累加器,可是又有点看不懂,恕在下不才,而且编译的时候也是这里出现的错误,哪位高人能帮我详细分析一下,站内信也好,回帖也好,加我qq给我详细讲讲也好,谢谢了~~~
DATA     SEGMENT 
    INPUT     DB 4 
                  DB ? 
                  DB 4 DUP (?) 
                   DB '$' 
    NUM     DW 20 DUP(?) 
    AVE      DB ? 
    OUTPUT1 DB 'INPUT A NUMBER',0DH,0AH,'$' 
    OUTPUT2 DB 'INPUT AGAIN(END WITH #)',0DH,0AH,'$' 
    OUTPUT3 DB 'AVERAGE IS:','$' 
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 DX,OFFSET OUTPUT1 
    MOV AH,9 
    INT 21H  ;显示输入信息
    
    MOV BL, 0  
    MOV DI,OFFSET NUM  
    MOV DX,OFFSET INPUT  
    MOV AH,0AH 
    INT 21H   ;输入并存入Input+2

    MOV DX,OFFSET INPUT+2  
    MOV AH,9 
    INT 21H ;显示输入的数字
    
    MOV SI,OFFSET INPUT+1 
    MOV CL,[SI] 
    INC SI 
    MOV CH,0  ;CX=实际输入的字符数
    CALL ADECXB  ;转移到累加程序
    MOV [DI],AX 
    INC BL 
    INC DI 
    INC DI 
INN:    
    MOV DX,OFFSET OUTPUT2 
    MOV AH,9 
    INT 21H 

    MOV DX,OFFSET INPUT 
    MOV AH,0AH 
    INT 21H 

    MOV SI,OFFSET INPUT+1 
    MOV CL,[SI] 
    INC SI 
    CMP BYTE PTR [SI],'#' 
    JZ DONE 
    MOV CH, 0 
    CALL ADECXB 
    MOV [DI],AX 
    INC BL 
    INC DI 
    INC DI 
    JMP INN 
DONE: 
    MOV DX, 0 
    PUSH BX 
    MOV DI,OFFSET NUM 
R: 
    MOV AX,[DI] 
    ADD DX,AX 
    INC DI 
    INC DI 
    DEC BL 
    CMP BL,0 
    JNZ R 
    MOV AX,DX 
    MOV DX,OFFSET OUTPUT3 
    PUSH AX 
    MOV AH,9 
    INT 21H 

    POP AX 
    POP BX 
    DIV BL 
    MOV AH,0 
    MOV BL,100 
    DIV BL 
    MOV BH,AL 
    ADD BH,30H 
    MOV DL,BH 
    PUSH AX 
    MOV AH,2 
    INT 21H 

    POP AX 
    MOV AL,AH 
    MOV AH,0 
    MOV BL,10 
    DIV BL 
    ADD AL,30H 
    MOV DL,AL 
    PUSH AX 
    MOV AH,2 
    INT 21H 

    POP AX 
    ADD AH,30H 
    MOV DL,AH 
    MOV AH,2 
    INT 21H 
    RET 
MAIN ENDP 

;------------- 

ADECXB PROC 
    PUSH BX 
    PUSH CX 
    PUSH DX 
    PUSH SI  
    MOV BH,0 ;BX=0
    XOR AX,AX ;AX=0
AGAIN:
    ADD AX,AX 
    mov DX,AX 
    ADD AX,AX 
    ADD AX,AX 
    ADD AX,DX 
    MOV BL,AX
    AND BL,0FH 
    ADD AX,BX 
    INC SI 
    LOOP AGAIN 
    POP SI 
    POP DX 
    POP CX 
    POP BX 
    RET 
ADECXB ENDP 
CODE ENDS 
END MAIN

回复列表 (共1个回复)

沙发

忘记说了,我的qq是48297513

我来回复

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