51单片机 用汇编语言怎么编程:几个有符号数的比较大小

下面2个人的 都是无符号的 我要 有符号的比较 程序

51单片机中,没有专门的有符号数比较指令,只能通过一些变通的方法来实现,比如:
比较30H和40H中有符号数的大小,结果放在R2中,大于则为1,等于为0,小于为128:
CMPDAT:
MOV A,30H
JB ACC.7,CMPF1
MOV B,A
MOV A,40H
JB ACC.7,CMPZ2 ;30H正,40H负所以30H>40H
CJNE A,B,CMPZ1 ;均为正,比较大小
MOV R2,#0
RET
CMPZ1:
JC,CMPZ2
CMPZ11:
MOV R2,#128
RET
CMPZ2:
MOV R2,#1
RET
CMPF1:
ANL A,#7FH
MOV B,A
MOV A,40H
JNB ACC.7,CMPF3 ;30H负,40H负
SJMP CMPZ11 ;30负,40H正,所以30H<40H
CMPF3:
ANL A,#7FH
CJNE A,B,CMPF10 ;两个均为负数
MOV R2,#0
RET
CMPF10:
JC CMPZ2 ;30H<40H(负数小者大)
SJMP CMPZ11 ;30H>40H
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-20
设内部RAM中的30H和31H单元中有两个带符号数,求其中的大数,放在32H单元中。
;
MOV 32H, 30H ;先取一个放好.
MOV A, 30H
CLR C
SUBB A, 31H ;(30H)-(31H)
JNB ACC.7, ZZZ ;差为正数则转移.
JB OV, _END ;负、且溢出转至结尾.
SJMP XXX ;否则去存31H
ZZZ:
JNB OV, _END ;差为正、且无溢出转至结尾.
XXX:
MOV 32H, 31H
_END:
SJMP $

END本回答被提问者采纳
第2个回答  2010-12-03
SUBB A,B
JNB CY ,D0 ;D0是A>B本回答被网友采纳
第3个回答  2010-12-03
SUBB A,B
JNB CY ,D0 ;D0是A>B
相似回答