全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1183
推到 Plurk!
推到 Facebook!

如何寫一個副程式來做乘數????

缺席
cyw1984
一般會員


發表:45
回覆:67
積分:22
註冊:2005-06-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-24 00:45:50 IP:210.6.xxx.xxx 未訂閱
如何呢?? thx

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-24 01:24:51 IP:203.203.xxx.xxx 未訂閱
請具體說明問題. 謝謝! 請修改配合, 謝謝!
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
cyw1984
一般會員


發表:45
回覆:67
積分:22
註冊:2005-06-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-24 01:59:30 IP:210.6.xxx.xxx 未訂閱
還有..除數的副程式又要那樣去寫 THX 發表人 - cyw1984 於 2005/09/24 02:01:03

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-24 02:40:00 IP:203.203.xxx.xxx 未訂閱
給你個觀念: (以10進制為例)假設你要做2222*21, 你可以把它拆成220*210 22*21 或 2200*21 22*21 16進制一樣的觀念, 看你體會多少囉~~ 至於要怎麼寫~~就看你的MCU那顆幾bit, 乘法怎麼寫囉. 演算法是一樣的. 除法也是一樣的.
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
cyw1984
一般會員


發表:45
回覆:67
積分:22
註冊:2005-06-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-24 02:42:53 IP:210.6.xxx.xxx 未訂閱
引言: 給你個觀念: (以10進制為例)假設你要做2222*21, 你可以把它拆成220*210 22*21 或 2200*21 22*21 16進制一樣的觀念, 看你體會多少囉~~ 至於要怎麼寫~~就看你的MCU那顆幾bit, 乘法怎麼寫囉. 演算法是一樣的. 除法也是一樣的.
我用的是89C52 8BIT 的 不明白220*210 22*21 或 2200*21 22*21 16進制一樣的觀念是怎樣= =

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-24 09:23:13 IP:203.203.xxx.xxx 未訂閱
以8bit而言, 假設你要做123H*21H, 可設兩個變數Hibyte & Lobyte. 先做23H*21H, 把商分別存入Hibyte 與Lobyte. 再做1H*21H, 然後把商直接加到Hibyte 裡. 這兩個變數的組合就是(123H*21H)
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
src
高階會員


發表:1
回覆:94
積分:154
註冊:2005-08-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-24 12:35:40 IP:220.139.xxx.xxx 未訂閱
引言: 以8bit而言, 假設你要做123H*21H, 可設兩個變數Hibyte & Lobyte. 先做23H*21H, 把商分別存入Hibyte 與Lobyte. 再做1H*21H, 然後把商直接加到Hibyte 裡. 這兩個變數的組合就是(123H*21H)
;要乘的數分別存在r6,r7
;計算的結果存在buf1,buf2
;================================
buf1        equ     30h                ;
buf2        equ     31h                ;
;==================================
        org     0h                        ;程式起始位址
        jmp     start                        ;
;==================================
        org     30h
start:
        mov     sp,#70h                        ;設定堆疊指標
        mov        r6,#0b8h
        mov        r7,#0bh
        call        mul_loop                ;
        jmp     $                        ;
;=================================
mul_loop:
        mov        b,#21
        mov        a,r7
        mul         ab
        mov        buf2,a
        mov        b,#21
        mov        a,r6
        mul         ab
        mov        buf1,a
        mov        a,b
        add        a,buf2
        jnc        mul_ret
        inc        a
mul_ret:
        mov        buf2,a
        ret
;=================================
        end
 
cyw1984
一般會員


發表:45
回覆:67
積分:22
註冊:2005-06-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-24 14:05:30 IP:219.79.xxx.xxx 未訂閱
引言:
引言: 以8bit而言, 假設你要做123H*21H, 可設兩個變數Hibyte & Lobyte. 先做23H*21H, 把商分別存入Hibyte 與Lobyte. 再做1H*21H, 然後把商直接加到Hibyte 裡. 這兩個變數的組合就是(123H*21H)
;要乘的數分別存在r6,r7
;計算的結果存在buf1,buf2
;================================
buf1        equ     30h                ;
buf2        equ     31h                ;
;==================================
        org     0h                        ;程式起始位址
        jmp     start                        ;
;==================================
        org     30h
start:
        mov     sp,#70h                        ;設定堆疊指標
        mov        r6,#0b8h
        mov        r7,#0bh
        call        mul_loop                ;
        jmp     $                        ;
;=================================
mul_loop:
        mov        b,#21
        mov        a,r7
        mul         ab
        mov        buf2,a
        mov        b,#21
        mov        a,r6
        mul         ab
        mov        buf1,a
        mov        a,b
        add        a,buf2
        jnc        mul_ret
        inc        a
mul_ret:
        mov        buf2,a
        ret
;=================================
        end
 
要乘的數分別存在r6,r7 是12bit 要用2個byte 我應該要怎樣放??? 90 假設我要乘的數是1000 (1111101000) 3E8H THX
src
高階會員


發表:1
回覆:94
積分:154
註冊:2005-08-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-09-24 15:59:03 IP:220.139.xxx.xxx 未訂閱
    要乘的數分別存在r6,r7 是12bit 要用2個byte 我應該要怎樣放??? 90 假設我要乘的數是1000 (1111101000)  3E8H THX          
;要乘的數分別存在r6,r7
;計算的結果存在buf1,buf2
;================================
buf1        equ     30h                ;
buf2        equ     31h                ;
;==================================
        org     0h                        ;程式起始位址
        jmp     start                        ;
;==================================
        org     30h
start:
        mov     sp,#70h                        ;設定堆疊指標
        mov        r6,#0E8h
        mov        r7,#03h
        call        mul_loop                ;
        jmp     $                        ;
;=================================
mul_loop:
        mov        b,#21
        mov        a,r7
        mul         ab
        mov        buf2,a
        mov        b,#21
        mov        a,r6
        mul         ab
        mov        buf1,a
        mov        a,b
        add        a,buf2
        jnc        mul_ret
        inc        a
mul_ret:
        mov        buf2,a
        ret
;=================================
        end
 
發表人 - src 於 2005/09/24 16:03:44
mymj
版主


發表:132
回覆:486
積分:608
註冊:2002-10-25

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-09-24 19:55:47 IP:203.67.xxx.xxx 未訂閱
到這兒下載8051數學程式庫http://delphi.ktop.com.tw/topic.php?TOPIC_ID=78821 mymj
cyw1984
一般會員


發表:45
回覆:67
積分:22
註冊:2005-06-25

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-09-25 00:34:39 IP:210.6.xxx.xxx 未訂閱
引言: 到這兒下載8051數學程式庫http://delphi.ktop.com.tw/topic.php?TOPIC_ID=78821 mymj
謝~~已下載了~~thx
系統時間:2024-05-03 22:43:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!