unsigned char num; type=0x01; num=0x02; adrret=getadr(type,num); }汇编后的代码:{ ; source line # 2; unsigned char xdata *padr;; if (type==0x02) padr=0x1000+typenum; ; source line # 4 cjne r7,#02h,?c0001 mov a,r5 add a,#00h mov r7,a clr a addc a,#010h sjmp ?c0005?c0001:; else padr=0x2000+typenum; ; source line # 5 clr a add a,r5 mov r7,a clr
006 fe mov r6,a ; 如果r7最动高位为1(负数?)则0ff=>r6, ; 否则r7最高位为0(非负数)00=>r60007 ef mov a,r70008 f4 cpl a0009 4e orl a,r6 ; 如果r6=0ff(r7为负数),则0ff=>a<>0 ; 否则r6=00时,则(cpl r7)=>a,a<>0(最高位为1)000a 7002 jnz ?c0001 ; 永远不会发生跳转。
ne # 6 mov dlyh?040+03h,r7 ;把从寄存器r4—r7传来的第一个参数 mov dlyh?040+02h,r6 ;存入固定地址。 mov dlyh?040+01h,r5 ;(有时真觉得这动作啥冒) mov dlyh?040,r4; { ; source line # 7?c0001:; while(dlyh--); ; source line # 8 mov r0,#low (dlyh?040) mov a,#0ffh lcall ?c?lldiidata8 mov a,r4 orl a,r5 orl a,r6 orl a,r7