📄 osal.s51
字号:
ARGFRAME XSTACK, 52, STACK
FUNCALL _ltoa, strlen
LOCFRAME XSTACK, 52, STACK
ARGFRAME XSTACK, 52, STACK
FUNCALL _ltoa, strcat
LOCFRAME XSTACK, 52, STACK
ARGFRAME XSTACK, 52, STACK
MOV A,#-0x10
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 16)
; Saved register size: 16
; Auto size: 36
MOV A,#-0x24
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 52)
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R4
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
// 237 #if defined( __GNUC__ )
// 238 return ( (char*)ltoa( l, buf, radix ) );
// 239 #else
// 240 unsigned char tmp1[10] = "", tmp2[10] = "", tmp3[10] = "";
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV DPH,#((`?<Constant "">` >> 8) & 0xff)
MOV DPL,#(`?<Constant "">` & 0xff)
MOV A,#0xa
LCALL ?MOVE_LONG8_XDATA_XDATA
MOV DPH,#((`?<Constant "">_1` >> 8) & 0xff)
MOV DPL,#(`?<Constant "">_1` & 0xff)
MOV A,#0xa
LCALL ?MOVE_LONG8_XDATA_XDATA
MOV DPH,#((`?<Constant "">_2` >> 8) & 0xff)
MOV DPL,#(`?<Constant "">_2` & 0xff)
MOV A,#0xa
LCALL ?MOVE_LONG8_XDATA_XDATA
// 241 unsigned short num1, num2, num3;
// 242 unsigned char i;
// 243
// 244 buf[0] = '\0';
MOV A,#0x34
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
CLR A
MOVX @DPTR,A
// 245
// 246 if ( radix == 10 )
MOV A,#0xa
XRL A,R1
JZ $+5
LJMP ??_ltoa_0 & 0xFFFF
// 247 {
// 248 num1 = l % 10000;
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV R0,#?V0 + 4
LCALL ?L_MOV_X
MOV DPTR,#__Constant_2710
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV R0,#?V0 + 4
MOV R1,#?V0 + 0
LCALL ?UL_DIV_MOD
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV A,?V0 + 0
MOVX @DPTR,A
INC DPTR
MOV A,?V0 + 1
MOVX @DPTR,A
// 249 num2 = (l / 10000) % 10000;
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV R0,#?V0 + 4
LCALL ?L_MOV_X
MOV DPTR,#__Constant_2710
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV R0,#?V0 + 4
MOV R1,#?V0 + 0
LCALL ?UL_DIV_MOD
MOV DPTR,#__Constant_2710
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV R0,#?V0 + 4
MOV R1,#?V0 + 0
LCALL ?UL_DIV_MOD
MOV R6,?V0 + 0
MOV R7,?V0 + 1
// 250 num3 = (unsigned short)(l / 100000000);
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV R0,#?V0 + 4
LCALL ?L_MOV_X
MOV DPTR,#__Constant_5f5e100
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV R0,#?V0 + 4
MOV R1,#?V0 + 0
LCALL ?UL_DIV_MOD
MOV ?V0 + 6,?V0 + 4
MOV ?V0 + 7,?V0 + 5
// 251
// 252 if (num3) _itoa(num3, tmp3, 10);
MOV A,?V0 + 6
JNZ ??_ltoa_1
MOV A,?V0 + 7
??_ltoa_1:
JZ ??_ltoa_2
; Setup parameters for call to function _itoa
MOV R1,#0xa
MOV A,#0x1a
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV R2,?V0 + 6
MOV R3,?V0 + 7
MOV DPTR,#(_itoa & 0xffff)
MOV A,#((_itoa >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 253 if (num2) _itoa(num2, tmp2, 10);
??_ltoa_2:
MOV A,R6
JNZ ??_ltoa_3
MOV A,R7
??_ltoa_3:
JZ ??_ltoa_4
; Setup parameters for call to function _itoa
MOV R1,#0xa
MOV A,#0x10
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
MOV DPTR,#(_itoa & 0xffff)
MOV A,#((_itoa >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 254 if (num1) _itoa(num1, tmp1, 10);
??_ltoa_4:
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
JNZ ??_ltoa_5
INC DPTR
MOVX A,@DPTR
??_ltoa_5:
JZ ??_ltoa_6
; Setup parameters for call to function _itoa
MOV R1,#0xa
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine6 & 0xFFFF
??CrossCallReturnLabel_22:
LCALL ?BCALL ; Banked call to: DPTR()
// 255
// 256 if (num3)
??_ltoa_6:
MOV A,?V0 + 6
JNZ ??_ltoa_7
MOV A,?V0 + 7
??_ltoa_7:
JZ ??_ltoa_8
// 257 {
// 258 strcpy((char*)buf, (char const*)tmp3);
; Setup parameters for call to function strcpy
MOV A,#0x1a
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV A,#0x34
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine2 & 0xFFFF
??CrossCallReturnLabel_8:
LCALL ?BCALL ; Banked call to: DPTR()
// 259 for (i = 0; i < 4 - strlen((char const*)tmp2); i++)
MOV ?V0 + 0,#0x0
SJMP ??_ltoa_9
// 260 strcat((char*)buf, "0");
??_ltoa_10:
; Setup parameters for call to function strcat
MOV R4,#(`?<Constant "0">` & 0xff)
MOV R5,#((`?<Constant "0">` >> 8) & 0xff)
MOV A,#0x34
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine0 & 0xFFFF
??CrossCallReturnLabel_0:
LCALL ?BCALL ; Banked call to: DPTR()
INC ?V0 + 0
??_ltoa_9:
MOV ?V0 + 2,?V0 + 0
; Setup parameters for call to function strlen
MOV A,#0x10
LCALL ?XSTACK_DISP0_8
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#(strlen & 0xffff)
MOV A,#((strlen >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
LCALL ?Subroutine9 & 0xFFFF
??CrossCallReturnLabel_28:
JC ??_ltoa_10
// 261 }
// 262 strcat((char*)buf, (char const*)tmp2);
??_ltoa_8:
; Setup parameters for call to function strcat
MOV A,#0x10
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV A,#0x34
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine0 & 0xFFFF
??CrossCallReturnLabel_1:
LCALL ?BCALL ; Banked call to: DPTR()
// 263 if (num3 || num2)
MOV A,?V0 + 6
JNZ ??_ltoa_11
MOV A,?V0 + 7
??_ltoa_11:
JNZ ??_ltoa_12
MOV A,R6
JNZ ??_ltoa_13
MOV A,R7
??_ltoa_13:
JZ ??_ltoa_14
// 264 {
// 265 for (i = 0; i < 4 - strlen((char const*)tmp1); i++)
??_ltoa_12:
MOV ?V0 + 0,#0x0
SJMP ??_ltoa_15
// 266 strcat((char*)buf, "0");
??_ltoa_16:
; Setup parameters for call to function strcat
MOV R4,#(`?<Constant "0">` & 0xff)
MOV R5,#((`?<Constant "0">` >> 8) & 0xff)
MOV A,#0x34
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine0 & 0xFFFF
??CrossCallReturnLabel_2:
LCALL ?BCALL ; Banked call to: DPTR()
INC ?V0 + 0
??_ltoa_15:
MOV ?V0 + 2,?V0 + 0
; Setup parameters for call to function strlen
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#(strlen & 0xffff)
MOV A,#((strlen >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
LCALL ?Subroutine9 & 0xFFFF
??CrossCallReturnLabel_29:
JC ??_ltoa_16
// 267 }
// 268 strcat((char*)buf, (char const*)tmp1);
??_ltoa_14:
; Setup parameters for call to function strcat
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV A,#0x34
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine0 & 0xFFFF
??CrossCallReturnLabel_3:
LCALL ?BCALL ; Banked call to: DPTR()
// 269 if (!num3 && !num2 && !num1)
MOV A,?V0 + 6
JNZ ??_ltoa_17
MOV A,?V0 + 7
??_ltoa_17:
JNZ ??_ltoa_18
??_ltoa_19:
MOV A,R6
JNZ ??_ltoa_20
MOV A,R7
??_ltoa_20:
JNZ ??_ltoa_18
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
JNZ ??_ltoa_21
INC DPTR
MOVX A,@DPTR
??_ltoa_21:
JNZ ??_ltoa_18
// 270 strcpy((char*)buf, "0");
; Setup parameters for call to function strcpy
MOV R4,#(`?<Constant "0">` & 0xff)
MOV R5,#((`?<Constant "0">` >> 8) & 0xff)
MOV A,#0x34
LCALL ?XSTACK_DISP0_8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -