一、问题描述:
对一组固定数据(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;用于计数,总共