单片机判断正负数的办法

有一段10字节的数据储存在以30H为初始地址的单元内,要求从30H单元开始,把正数储存到40H单元,负数储存到50H单元,请问该怎么编程?还有JB 20H.7,LOOP什么意思?

    JB 20H.7,LOOP ;JB Jmp Bit ,就是判断单个位,JB 20H.7 就是判断 20H这个内存地址存的数据的第7为,为1则跳转,Loop是循环在这里应该是一个标记,在前面或者后面找下这个LOOP,估计能找到  LOOP:开始的一行,就是跳到那里

    判断正负首先要搞清楚你的数据类型,对于汇编是没有正负之分的,只有在C语言或者其他高级语言才有正负数。汇编中只有内存和数据、寄存器的概念,都没有数据类型的概念,所以不可能有正负之分,你说第一位为0是负数,那就是负数。

    C语言中的存储方式决定数据在内存中的存放方式,C语言中约定负数的最高位即第7位为1, char 是1字节,int是2字节,对于你这10个自己数据类型不同,处理方法就不同了。对于char,判断每个字节的第7位为1就是负数,为0就是正数


温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-13
如果是单字节的数据的话,也就是说是char型数据的话,最高位位1就是负数,为0就是正数。

GETPN:
MOV R0,#30H
MOV R1,#40H
MOV B,#0
MOV R2,#10
LOOP:
MOV A,@R0
INC R0
JB ACC.7,FS
MOV @R1,A
INC R1
SJMP LPR
FS:
PUSH ACC
PUSH 01H
MOV A,#50H
ADD A,B
MOV R1,A
POP ACC
MOV @R1,A
INC B
POP 01H
LPR:
DJNZ R2,LOOP
RET本回答被提问者采纳
相似回答