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
温馨提示:答案为网友推荐,仅供参考