View Single Post
Old 17-02-2006, 09:59 AM   #11
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Nếu sử dụng vòng lặp như thế này với giá trị nạp vào của count1,count2,count3 là a,b,c:
------------------------------
LOOP
DECFSZ COUNT1,1
GOTO LOOP
DECFSZ COUNT2,1
GOTO LOOP
DECFSZ COUNT3,1
GOTO LOOP
RETURN
------------------------------
Khi count1 giảm đến 0,sau đó giảm count2 xuống 1 và quay về LOOP
count1 giảm thêm 1 nên sẽ là 255.Do vậy giá trị a không có ý nghĩa.
Tương tự giá trị b cũng vậy.

THỜI GIAN CHO VÒNG LẶP LOOP NÀY:

Khi con trỏ đang ở dòng DECFSZ COUNT2,1 thì count1 có giá trị 0
Khi con trỏ đang ở dòng DECFSZ COUNT3,1 thì count1,count2 đều có giá trị 0

1) DECFSZ COUNT1,1 mất 1 chu kỳ máy
GOTO LOOP mất 2 chu kỳ máy
Để count1 giảm từ 0 về 1 mất 255*3 chu kỳ máy,giảm từ 1 về 0 mất thêm 1 chu kỳ máy nữa.Bây giờ con trỏ đang ở dòng DECFSZ COUNT2,1
Vậy thời gian đã thực thi là :
(255*3 + 1)*t (t là thời gian thực thi 1 chu kỳ máy)

2) Mỗi lần count2 giảm 1 thì lại quay lại giảm count1
Thời gian giảm count2 cũng tính tương tự
Vậy khi con trỏ ở DECFSZ COUNT3,1 thì thời gian đã thực thi là:
((255*3 + 1)*t)*255 + (255*3 + 1)*t

3) Tương tự tính cho giảm count3 từ c về 0.
Vậy thời gian cho vòng lặp LOOP sẽ là:
{[(255*3 + 1)*t]*255 + (255*3 + 1)*t}*(c-1) + [(c-1)*3 + 1]*t
= {{[(255*3 + 1)]*255 + (255*3 + 1)}*(c-1) + (c-1)*3 + 1}*t
= [(766*255 + 766)*(c-1) + (c-1)*3 + 1]*t
= [196096*(c-1) + (c-1)*3 + 1]*t
= (196099*c - 196098)*t

Với c = 14 ,t = 0,4us thời gian này là (196099*14 - 196098)*0.4us = 1.02s

Chắc không khó khăn gì để tính thời gian lặp kiểu này với n biến count!
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263

thay đổi nội dung bởi: nhh, 17-02-2006 lúc 10:14 AM.
nhh vẫn chưa có mặt trong diễn đàn