8086汇编语言:对一组数据进行正数、负数、零的数量进行计数

该博客详细介绍了如何使用8086汇编语言对一组数据进行正数、负数和零的计数。作者提出两种方法,一种利用CMP操作和标志位,另一种通过检查数据最高位来判断符号。文章还讨论了代码的局限性,特别是在处理补码表示的负数时可能出现的问题,强调限制数据范围的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题描述:

对一组固定数据(7,98,-98,123,18,113,-45,66,-13,-122,0,-33,0,-99,0)进行正数、负数、零个数统计

 

二、求解思路:

方法一:

关键在于利用符号标志位SF以及零标志位ZF进行判断,但是标志位的改变在运算中产生。CMP操作正好符合我们的需求,CMP操作符的本质对操作数进行减法运算不保留其结果不会改变参与运算数据的原值只会改变标志寄存器的值,而且使用CMP可以进一步利用JZ、JS操作符进行条件判断,进行模块化编程。

方法二:

关键在于判断数据最高位是否为 1 ,因为我们将待处理的数据看作了有符号数,所以最高一位我们认为是符号位;我们可以通过AND运算将除了最高位的位全变成0;然后判断AND运算之后的值是否为零来进一步判断最高位是否为 1 。

 

三、源代码:

方法一:

DATAS SEGMENT  
    CRLF DB 0AH,0DH,"$";回车换行
    string1 DB "The number of positive numbers is:","$";正数的个数输出提示
    string2 DB "The number of negative numbers is:","$";负数的个数输出提示
    string3 DB "The number of zeros is:","$"           ;零的个数输出提示
    
    table db 7,98,-98,123,18,113,-45,66,-13,-122,0,-33,0,-99,0
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
;变量初始化    
    MOV SI,OFFSET TABLE;偏移量
    mov cl,0;用于计数,总共
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值