请教这段代码的含义
MOV A,@R0JB ACC.7,multiple
CJNEA,#0CH,Jump1000
Jump1000: JC multiple
MOV R2,#75H
MOV R3,#30H
LJMPGetRusl
;===========================================
multiple: MOV R6,#00H
MOV R7,#0AH
LCALL Multi_Routine //@R0@R0+1 * R6R7
MOV R6,#00H
MOV R7,#01H
LCALL Div_routine //@R0@R0+1 /R6R7
GetRusl: MOV A,R2
MOV @R0,A
INC R0
MOV A,R3
MOV @R0,A
RET
------------------------------------------------------------------------------------------------------------------
请教各位高手:这段条件判断有何作用?JB ACC.7,multiple是判断@R0@R0+1是否是负数。就是不明白CJNEA,#0CH,Jump1000的作用。
MOV A,@R0
JB ACC.7,multiple
CJNEA,#0CH,Jump1000
Jump1000: JC multiple
晕,汇编啊,爱莫能助哈 就是A不等于#0CH的时候跳转到Jump1000呗 还能有啥意思。。。 对C的影响:按无符号数减法。前数减后数,有借位C = 1,否则C = 0。
下面就有 JC multiple 来判断被减数与减数的大小以决定去哪个分支 CJNEA,#0CH,Jump1000
Jump1000: JC multiple
MOV R2,#75H
好像这程序不完整,就是这句没意义啊CJNEA,#0CH,Jump1000,不管A等不等于#0CH,都要执行下一句Jump1000: JB ACC.7,multiple是判断@R0是否是负数。
如果是负数,跳到multiple,
否则是非负数,继续执行
【CJNEA,#0CH,Jump1000】:
【JC multiple】:
比较该数据(@R0),是否小于12(#0CH)
如果小于12,就执行multiple
否则,执行:
MOV R2,#75H
MOV R3,#30H
LJMPGetRusl
///////////////////////////////////////////////////////
关键是要把【CJNEA,#0CH,Jump1000】:
【JC multiple】:
这两条指令,组合起来判断
wjwjwjwj98 发表于 2013-5-19 22:18 static/image/common/back.gif
CJNEA,#0CH,Jump1000
Jump1000: JC multiple
...
对啊,这里逻辑有问题! 哎呦,汇编啊! 同意楼上的
楼主的程序可以简化为
MOV A,@R0 //把R0所指的地址的值赋给A
JB ACC.7,multiple//如果A的最高位为1(代表负数)则跳转到multiple
// CJNEA,#0CH,Jump1000 如果A不等于0xC,跳转到Jump1000(也就是下一行),否则执行下一行
Jump1000: JC multiple //如果CY等于一,就跳转到multiple
MOV R2,#75H //R2载入立即数75
MOV R3,#30H //R3载入立即数30
LJMPGetRusl //跳转到GetRusl
;===========================================
multiple: MOV R6,#00H //R6清零
MOV R7,#0AH //R7载入立即数A(00001010)
LCALL Multi_Routine //@R0@R0+1 * R6R7
MOV R6,#00H
MOV R7,#01H
LCALL Div_routine //@R0@R0+1 /R6R7
GetRusl: MOV A,R2 //R2赋值给A
MOV @R0,A //A的值载入到R0所指地址中(数据存储器中)
INC R0 //R0(地址)自增一
MOV A,R3 //R3赋值给A
MOV @R0,A //A的值载入到R0所指地址中(数据存储器中)
RET //返回断点,继续执行LJMP GetRusl下面的语句 非常多谢各位的解析。
这段代码的作用是@R0@R0+1是负数或者@R0<#0cH则(@R0@R0+1)*10.我不明白的是@R0<#0cH这个条件比较是一个上限比较,但是@R0@R0+1是作为一个整形数,为什么@R0+1不参与比较?
页:
[1]