Em có một hàm như này
Cái dở của nó là em phải dùng phép chia 2 lần. Đã mất thời gian lại tốn ROM.
Thế là em viết thêm 1 lệnh như này
rồi cho biên dịch. Kết quả là CCS sinh đoạn mã asm như này
Em định nghĩa thêm một biến như này
ở phần định nghĩa biến chung của chương trình (biến global).
Thế là em có thể viết lại hàm như này
Đây là đoạn mã asm quan trọng nhất được sinh ra
Các bác thử xem sao
Code:
Void LCDwr(int32 num) { do{ LCDput('0'+num%10); num/=10; } while(num); }
Thế là em viết thêm 1 lệnh như này
Code:
num/=10;
Code:
.................... num/=10; 01B4: BCF FD8.1 01B6: MOVFF 21,2F 01BA: MOVFF 20,2E 01BE: MOVFF 1F,2D 01C2: MOVFF 1E,2C 01C6: CLRF 33 01C8: CLRF 32 01CA: CLRF 31 01CC: MOVLW 0A 01CE: MOVWF 30 01D0: RCALL 0010 01D2: MOVFF 03,21 01D6: MOVFF 02,20 01DA: MOVFF 01,1F 01DE: MOVFF 00,1E
Em định nghĩa thêm một biến như này
Code:
int32 inte32; #byte inte32=0x00
Thế là em có thể viết lại hàm như này
Code:
Void LCDwrite(int32 num) { int8 d; // do{ d=num%10; num=inte32; LCDput('0'+d); } while(num); }
Đây là đoạn mã asm quan trọng nhất được sinh ra
Code:
.................... d=num%10; 0162: BSF FD8.1 0164: CLRF FEA 0166: MOVLW 23 0168: MOVWF FE9 016A: MOVFF 21,2F 016E: MOVFF 20,2E 0172: MOVFF 1F,2D 0176: MOVFF 1E,2C 017A: CLRF 33 017C: CLRF 32 017E: CLRF 31 0180: MOVLW 0A 0182: MOVWF 30 0184: RCALL 0010 0186: MOVFF 23,22 .................... num=inte32; 018A: MOVFF 03,21 018E: MOVFF 02,20 0192: MOVFF 01,1F 0196: MOVFF 00,1E
Comment