keil汇编:100个有符号数统计正数、负数、零的个数

  • 本程序用excel生成100个有符号数(-127~127),包括46个负数、5个0、49个正数
  • 使用软件keil5

一、数据生成

(一)生成随机数       

        在excel中用=RANDBETWEEN(-127,127)生成100个随机数,然后将随机数只保留数字粘贴一遍,这样可以避免随机数一直变动。

(二)统计正负零

        在excel中使用COUNTIF(A1:A100,">0")、COUNTIF(A1:A100,"<0")、COUNTIF(A1:A100,0)分别统计正数、负数、零的个数。

(三)生成可用数据

        在另外一列用智能填充填入逗号,把数据和逗号用智能填充合并成一列,再转置粘贴。

二、代码

负数、0、正数分别存在R0,R1,R2。

ORG	0000h
	
	Table1: DB	18,	27,	68,	71,	127,-14,0,-100,	-30,28,	-100,-109,58,24,-93,50,38,70,-113,-113,-76,-23,	100,	-57,	37,	30,	37,	-96,	31,	99,	127,	46,	0,	57,	-94,	-11,	-47,	0,	-65,	-9,	-64,	4,	-114,	60,	125,	-109,	-33,	11,	4,	32
	Table2:	DB	64,	118,-66,-79,79,	-86,-36,-20,-42,-123,28,-114,16,-14,-43,-9,72,-109,55,21,121,0,-113,	13,	-34,	112,	-16,	-125,	68,	-111,	64,	127,	-94,	64,	7,-109,-69,-88,57,	-89,67,119,97,	-47,111,82,	74,	0,-40,-109
	ORG	1B44h
		MOV R3,#00h
		MOV R2,#00h	;Positive num
		MOV R1,#00h	;zero
		MOV R0,#00h	;negative num
		MOV	DPTR,#Table1
		MOV R3,#99
		
		LOOP1:	;negative num
		MOV	A,R3
		MOVC	A,@A+DPTR
		ANL A,#80h
		CJNE	A,#80h,LOOP2	;R3 first bit is 1,no jump,go next
		INC	R0
		DEC	R3
		CJNE	R3,#-1,LOOP1
		
		LOOP2:	;zero
		MOV	A,R3
		MOVC	A,@A+DPTR
		CJNE	A,#00h,LOOP3
		INC	R1
		DEC	R3
		CJNE	R3,#-1,LOOP1
		
		LOOP3:
		INC	R2
		DEC	R3
		CJNE	R3,#-1,LOOP1
		
END

三、运行结果

四、注意

1.分开存100个数:这一百个数是存在程序存储器ROM里面的,经过我的尝试,100个数一次性存储会导致无法编译。

2.ORG 1B44h:这个地址不是随便的,在运行完两个DB时,程序执行的位置会跳到这里,为了保证后面的语句能运行,只能让后面的语句从此处开始。

 如有错误或者更优的方法,欢迎指正。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值