View Single Post
Old 26-11-2009, 10:36 PM   #35
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi halfblood88 View Post
Code:
  MOVLW  d’20’                       ; đưa giá trị  20 vào thanh ghi W 
  MOVWF            delay‐reg       ; delay‐reg <‐ 20 
loop  
  DECFSZ             delay‐reg,0   ; giảm giá trị trong thanh ghi delay‐reg 
                                            ; và so sánh với 0, kết quả chứa trong W
 GOTO                loop             ; nếu giá tri thanh ghi “delay_reg” khác 0 
                                            ; thì nhảy tới label “loop”
Trong bài hướng dẫn này thì tác giả có nói là thanh ghi delay_reg sẽ giảm 20+1 lần.Ứng với giá trị ban đầu của delay_reg bằng N thì sẽ giảm N+1 lần.Nhưng mình thử phân tích thì thấy thế này:
-Giả sử ban đầu nạp vào thanh ghi delay_reg giá trị là 2.Loop lần 1 sẽ giảm thanh ghi delay_reg xuống còn 1 so sánh rồi thực hiện lệnh goto.Loop lần 2 sẽ giảm thanh ghi delay_reg xuống còn 0 so sánh thì nhảy cách.Như vậy chẳng phải chỉ có 2 lần giảm thanh ghi.Trong khi trong bài hướng dẫn tác giả lại nói là N+1 tức ở đây là 3 lần
Bạn phân tích đúng, ko rõ đoạn code ví dụ bạn lấy từ đâu
Trích:
-Và như mình thấy ở trên lần giảm thanh ghi cuối cùng tức từ 1->0 thì lệnh goto loop ko được thực hiện vậy sao khi tính thời gian thực hiện lại là 3x(N+1).Có phải lúc đó lệnh Goto loop được thay bởi lệnh nop (1 chu kỳ) + decfsz lần cuối ( 2 chu kỳ) nên được gộp chung vào ko
Lệnh decfsz ở lần cuối cùng sẽ mất 2 chu kỳ máy, 1 chu kỳ để thực hiện thao tác trừ 1, 1 chu kỳ trễ do thay đổi thanh ghi PC (bỏ qua lệnh goto). Do đó công thức tính chính xác là 3N + 2
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn