汇编语言,设有10个无符号数(8位),试编一程序,求其中所有偶数的和,并将结果显示出来

要求是用户自己输入的数

stack segment stack
    byte 256 dup(0)
stack ends
data segment
    C1 dw 0     ;奇数个数
    C2 dw 0     ;偶数个数
    SUMEVEN dw 0
    BUFF db 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0   ;10个数据的存储缓冲,BUFF[0]存储缓冲区大小,BUFF[1]为需要处理的数据,这里是系统运行时的数据
    SHEX DB '0123456789ABCDEF$'
    MSG1 db 13,10,'odd: $'
    MSG2 db 13,10,'even: $'
    MSG3 db 13,10,'even sum: $'
data ends
code segment
    assume cs:code,ss:stack,ds:data
START:
    mov ax,data
    mov ds,ax
    mov ax,stack
    mov ss,ax
    call CountInputData;
    ;输出奇数
    mov dx, offset MSG1
    mov ax, C1
    call PrintLen
    
    ;输出偶数
    mov dx, offset MSG2
    mov ax, C2
    call PrintLen
    ;输出偶数
    mov dx, offset MSG3
    mov ax, SUMEVEN
    call PrintLen
    ; 程序退出
    mov ax,4c00h
    int 21h
    ;打印出长度,长度保存在AX里, DX里存储提示信息地址
PrintLen proc near
    push ax
    mov ah,9h
    int21h
    pop ax
    
    mov cx,4
PRINTLOOP:
    rol ax,1
    rol ax,1
    rol ax,1
    rol ax,1
    push ax
    mov dl,al
    and dl,0FH
    mov bx, offset SHEX
    add bl,dl
    mov dl, byte ptr [bx]
    mov ah,2
    int 21h
    pop ax
    loop PRINTLOOP
    ret
PrintLen endp
CountInputData proc near
    push ax
    push cx
    push si
    mov ah,0
    mov ch,0
    mov cl, byte ptr[BUFF]
    mov si, offset BUFF+1
MYLOOP:
    mov al, [si]
    inc si
    test al,1      ;识别是否为奇数
    jnz CCOUNT1
; 偶数
CCOUNT2:
    inc C2
    add SUMEVEN, ax
    jmp NEXTLOOP
; 奇数
CCOUNT1:
    inc C1
    jmp NEXTLOOP
NEXTLOOP:
    loop MYLOOP
    
    pop si
    pop cx
    pop ax
    ret
CountInputData endp    
    
code ends
end START

温馨提示:答案为网友推荐,仅供参考
相似回答