51单片机 用汇编语言怎么编程:几个有符号数的比较大小
发布网友
发布时间:2022-04-29 07:57
我来回答
共3个回答
热心网友
时间:2023-10-13 08:13
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
热心网友
时间:2023-10-13 08:13
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
热心网友
时间:2023-10-13 08:14
设内部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
热心网友
时间:2023-10-13 08:14
设内部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
热心网友
时间:2023-10-13 08:14
SUBB A,B
JNB CY ,D0 ;D0是A>B
热心网友
时间:2023-10-13 08:14
SUBB A,B
JNB CY ,D0 ;D0是A>B