分别将正数负数输出 并输出各有多少个正负数
代码:
;目的是判断有多少个正数并输出且输出正数有多少个
负数输出 且输出有多少个
datasegment
ARRAY db 1,2,3,4,5,-1,-2,-3
PDATA db 7 dup('$')
NDATA db 8 dup('$')
data ends
codesegment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bp,-1 ;正数计数器
mov si,-1 ;计数器负数
mov cx,8
mov di,-1
lk:
inc di
mov ah,ARRAY[di] ;将array中的值对应的8位二进制数移到ah中
rol ax,1
rol ax,1
rol ax,1 ;用4次逻辑左移将高四位放到al中
rol ax,1
test al,08H ;如果zf=0则证明该数为负数数值不等一 如果zf=1则证明该数为正数
jz zhengshu ;如果zf=1则跳转
inc si
mov bl,ARRAY[di]
neg bl ;求补使负数变成正数
mov al,2DH
mov NDATA[si],al ;把负号放到字符串中
inc si
add bl,30H
mov NDATA[si],bl
jmp zxc
zhengshu:
inc bp
mov bl,ARRAY[di]
add bl,30H
mov PDATA[bp],bl
jmp zxc
zxc:
loop lk
exit:
mov ax,si
mov dl,2 ;将负数的值进行处理使其变成字符以便输出
div dl
add ax,1
add ax,30H
mov bx,bp ;将正数的值进行处理使其变成字符以便输出
add bx,1
add bx,30H
inc si
inc bp ;si bp 自加的是由于要将 负数正数的总数分别存放
mov NDATA[si],al
mov PDATA[bp],bl
lea dx,NDATA
mov ah,09H
int 21H
mov dl,20H
mov ah,02H
int 21h
lea dx,PDATA
mov ah,09H
int 21H
mov ah,4ch
int 21H
code ends
end start