View Single Post
Old 16-01-2007, 04:31 PM   #2
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Chào bạn. Bạn xin thế thì không ai upload lên cho bạn đâu.

Mình nghĩ bạn nên trình bảy chủ kiến của mình trước. Thảo luận về thuật giải của bạn xem đã được chưa? Rùi xin góp ý của mọi người. Viết bằng ASM rất dài và ngại nên mọi người sẽ không viết đâu bạn ạ. Lần sau bạn chú ý nhé. Mình chỉ nêu ra thuật toán mà mình viết bên www.dientuvietnam.net thôi tại luồng sau (bài thứ 21):
http://www.dientuvietnam.net/forums/...?t=4403&page=3

To vinhsnooker: mình có cách này mình nghĩ là ổn cho việc chuyển đổi số 24bit sang số thập phân.

Mình lấy ví dụ với số 8 bit trước nhé. Ta có số cần chuyển là:
Số A: a7a6a5a4a3a2a1a0 (ai là bit thứ i của số A).

Ta cần chuyển sang số thập phân lưu trữ trong 3 byte: b2 b1 b0 (b2 là hàng trăm, b1 là hàng chục, b0 là hàng đơn vị).

Thuật giải của mình như sau:
  • Cho b2 = b1 = b0
  • Nếu a0 = 1 thì b0 = 1 và làm (*)
  • Nếu a1 = 1 thì tăng b0 thêm 2 và làm (*)
  • Nếu a2 = 1 thì tăng b0 thêm 4 và làm (*)
  • Nếu a3 = 1 thì tăng b0 thêm 8 và làm (*)
  • Nếu a4 = 1 thì tăng b0 thêm 6, tăng b1 thêm 1 và làm (*)
  • Nếu a5 = 1 thì tăng b0 thêm 2, tăng b1 thêm 3 và làm (*)
  • Nếu a6 = 1 thì tăng b0 thêm 4, tăng b1 thêm 6 và làm (*)
  • Nếu a7 = 1 thì tăng b0 thêm 8, tăng b1 thêm 2, tăng b2 thêm 1 và làm (*).

Công việc (*):
  • Nếu b0>10 thì b0 = b0 - 10 và tăng b1 thêm 1
  • Nếu b1>10 thì b1 = b1 - 10 và tăng b2 thêm 1.

Thực chất của phương pháp này chỉ là cộng dồn mà thôi.
Vì: A = a7 * 128 + a6 * 64 + a5 * 32 + a4 * 16 + a3*8 + a2*4 + a1*2 + a0

Nên việc chuyển sang số thập phân chỉ là việc cộng dồn từng số theo thứ tự từ phải sang trái mà thôi .

Các số 128, 64,32,16,8,4,2 có thể dùng cách tra bảng, do đó có thể tổng quát viết chương trình sẽ ngắn gọn hơn rất là nhiều.

Ví dụ: i là số thứ tự của bit trong A, trong vòng lặp ta sẽ tra trong ROM 3 số (c,d,e) nào đó rùi cộng tương ứng vào b2, b1, b0 và thực hiện công việc (*) là xong.

Với số 16 bit, 24bit làm cũng hoàn toàn tương tự mà thôi. Chí khác là phải xác định phạm vi biểu diễn số đó là bao nhiêu số trong số thập phân thôi.

Coi như đây là một bài để cho các bạn tự viết chương trình nhé. Mình mà viết thì còn có ý nghĩa gì nữa, cách làm đã nói hết rùi .

Chúc các bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn