- 本程序用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时,程序执行的位置会跳到这里,为了保证后面的语句能运行,只能让后面的语句从此处开始。