Nhìn duới góc độ mã ASM đi, với dspic
một lệnh ghi hoặc đọc dữ liệu bình thường sẽ thực hiện tốt nhất là 1 chu kì lệnh nếu có tham số là thanh ghi. Cứ kể nó là 3 chu kì lệnh (để bù vào các cái râu ria đi).
Ở trường hợp này (Mình chỉ lấy ví dụ của anh Tuan để giải thích, không có ý gì khác, mong anh Tuan bỏ qua)
Code:
BYTE push(BYTE b) {
if(wrHead>1023) return 0;
fifo[wrHead] = b;
wrHead++;
return 1;
}
Vì số 1023 là một số không thể so sánh trực tiếp đuợc, nên nó phải chuyển vào một thanh ghi nào đó ==> tốn 1 lệnh di chuyển
Thực hiện so sánh 1 lần ==> một lệnh so sánh
Thực hiện lệnh rẽ nhánh, trường hợp code tốt nhất thì vẫn tốn một chu kì lệnh
==> Tốn thêm 3 chu kì lệnh.
Như vậy để thực hiện việc di chuyển 1 dữ liệu chúng ta cần
6 chu kì lệnh, 3 để di chuyển, 3 để kiểm tra
hiệu suất của quá trình này là 3/(3+3) = 50%, từ 100% xuống còn 50% là nhiều rồi