汇编:分别将正数负数输出 并输出各有多少个正负数 代码: ;目的是判断有多少个正数并输出 且输出正数有多少个 负数输出 且输出有多少个

分别将正数负数输出 并输出各有多少个正负数

代码:

;目的是判断有多少个正数并输出且输出正数有多少个

负数输出  且输出有多少个


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StriveZs

用爱发电

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值