- 打卡等级:以坛为家I
- 打卡总天数:312
- 最近打卡:2025-03-11 13:20:13
荣誉版主
- 积分
- 5395
|
本帖最后由 LAOXU 于 2023-12-14 03:48 编辑
R4~R7寄存器,保存1~4字节右对齐内容,现将其移至左对齐。
入口条件: R2 (保存flags域,应用于 51可重入 printf函数),
出口:将 R4~R7寄存器内容左移后,末位填0, 不改变 ACC内容
执行如下汇编代码:
#define LEFT 0x04 // '-'对指定的域宽度 左对齐输出
sbit bitLEFT = ACC.2
#define PLUS 0x08 // '+'如果输出是一个带符号类型,用+/-符号为输出
sbit bitPLUS = ACC.3
#define SPACE 0x10 // ' '输出值的前缀是空格(为0时), 否则, 前缀加 0 (为1时),
sbit bitSPACE = ACC.4
#define SPECIAL 0x20 // '#'当用 o, x 和 X 域类型时,对非零输出值分别用 0, 0x, 或 0X 为前缀
sbit bitSPECIAL= ACC.5 // 当用 e, E, f, g, 和 G 域类型时, '#'标记强迫输出值包含一个小数点
#define DOT 0x40 // '.'小数点
sbit bitDOT = ACC.6
#define CHAR_B 0x01 // 数据类型 char
sbit bitCHAR_B = ACC.0
#define LONG_L 0x02 // 数据类型 long
sbit bitLONG_L = ACC.1
#define POSNEG 0x80 // 有符号数 0: '+'号, 1: '-'号
sbit bitPOSNEG = ACC.7
LONG_RRN: XCH A,R2
JB bitLONG_L,SWAP_L // 数据类型 long
JNB bitCHAR_B,SWAP_I // 数据类型 char
LCALL LONG_RR
SWAP_I: LCALL LONG_RR
LCALL LONG_RR
SWAP_L: XCH A,R2
RET
LONG_RR: XCH A,R4
XCH A,R5
XCH A,R6
XCH A,R7
CLR A
XCH A,R4
RET
|
|