微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.1
第7章 綜合程式設計
轉換十六進制數字為七段顯示碼
a b d c e f g
(a) 七段LED顯示器 (b) 顯示器數碼編碼格式 7 6 5 4 3 2 1 0 位元 0 g f e d c b a 數碼
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.2
第7章 綜合程式設計
轉換十六進制數字為七段顯示碼
輸入 g f e d c b a 十六進制 輸入 g f e d c b a 十六進制
0 0 1 1 1 1 1 1 3F 8 1 1 1 1 1 1 1 7F
1 0 0 0 0 1 1 0 06 9 1 1 0 1 1 1 1 6F
2 1 0 1 1 0 1 1 5B A 1 1 1 0 1 1 1 77
3 1 0 0 1 1 1 1 4F B 1 1 1 1 1 0 0 7C
4 1 1 0 0 1 1 0 66 C 0 1 1 1 0 0 1 39
5 1 1 0 1 1 0 1 6D D 1 0 1 1 1 1 0 5E
6 1 1 1 1 1 0 1 7D E 1 1 1 1 0 0 1 79
7 0 0 0 0 1 1 1 07 F 1 1 1 0 0 0 1 71
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.3
第7章 綜合程式設計
MCS-51表格轉換指令
指令 動作 CY AC OV P
MOVC A,@A+DPTR A ← (A+DPTR) - - - *
MOVC A,@A+PC A ← (A+PC) - - - *
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.4
第7章 綜合程式設計
十六進制數字對七段顯示器數碼轉換程式
1 ;ex7.1-1.a51 ---- 2 DSEG AT 30H
0030 3 CDATA: DS 1 ;data to be converted 4 ;table translation
---- 5 CSEG AT 0000H
0000 E530 6 TBLCVT: MOV A,LOW CDATA ;get cdata 0002 900009 7 MOV DPTR,#TABLE ;load table base 0005 93 8 MOVC A,@A+DPTR ;address and 0006 F530 9 MOV LOW CDATA,A ;convert it 0008 22 10 RET
11 ;define convertion table
0009 3F06 12 TABLE: DB 3FH,06H ;hexadecimal to 000B 5B4F 13 DB 5BH,4FH ;seven segment 000D 666D 14 DB 66H,6DH ;LED display 000F 7D07 15 DB 7DH,07H ;conversion table
....
0017 7971 19 DB 79H,71H 20 END
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.5
第7章 綜合程式設計
十六進制數字對七段顯示器數碼轉換程式
1 ;ex7.1-2.a51 ---- 2 DSEG AT 30H
0030 3 CDATA: DS 1 ;data to be converted 4 ;table translation
---- 5 CSEG AT 0000H
0000 E530 6 TBLCVT: MOV A,LOW CDATA ;get cdata 0002 3100 7 ACALL TABLECVT
0004 F530 8 MOV LOW CDATA,A ;convert it 0006 22 9 RET
10 ;define convertion table and associated 11 ;subroutine
0100 12 ORG 0100H
0100 04 13 TABLECVT: INC A ;bypass RET instruction 0101 83 14 MOVC A,@A+PC
0102 22 15 RET
0103 3F06 16 DB 3FH,06H ;hexadecimal to 0105 5B4F 17 DB 5BH,4FH ;seven segment
....
0111 7971 23 DB 79H,71H 24 END
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.6
第7章 綜合程式設計
二進制對BCD轉換
BCDNO =b7×27+b6×26+b5×25+b4×24+b3×23
+b2×22+b1×21+b0×20
=[[[[[[[0+b7]×2+b6]×2+b5]×2+b4]×2+b3]×
2 +b2]×2+b1]×2+b0
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.7
第7章 綜合程式設計
二進制對BCD轉換
演算法:二進制對 BCD 轉換 輸
輸 輸
輸入入入入::::待轉換的二進制數目 BINNO 輸
輸 輸
輸出出出出:::: BCD 數目 BCDNO BEGIN::::
1.清除 BCDNO 為 0 ,並設定 COUNT 為 BINNO 的位元數目;
2. REPEAT
2.1左移 BINNO 一個位元位置,使其 MSB 進入進位旗號位元 CY
內;
2.2以十進制(BCD)的算術運算計算:
BCDNO = BCDNO × 2 + CY 2.3計數器 COUNT 減 1 UNTIL COUNT == 0 END {二進制對 BCD 轉換演算法}
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.8
第7章 綜合程式設計
二進制對BCD轉換
1 ;ex7.1-3.a51 ---- 2 DSEG AT 30H
0010 3 COUNT EQU 16 ;# of BINNO bits 0003 4 NBCD EQU 3 ;# of BCDNO bytes
5 ;define BCDNO, low byte in low adddress.
0030 6 BCDNO: DS NBCD ;BCD number 7 ;define BINNO, low byte in low address 0033 8 BINNO: DS COUNT/8 ;binary number
9 ;
10 ;BINARY to BCD conversion 11 ;
---- 12 CSEG AT 0000H 0000 E4 13 BINBCD: CLR A ;clear A 0001 7830 14 MOV R0,#LOW BCDNO 0003 7903 15 MOV R1,#NBCD ;set loop count 0005 F6 16 CLRBCD: MOV @R0,A ;clear BCDNO 0006 08 17 INC R0
0007 D9FC 18 DJNZ R1,CLRBCD 19 ;convert binary to bcd.
0009 7A10 20 MOV R2,#COUNT;set loop count 000B C3 21 LOOPN: CLR C ;clear carry
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.9
第7章 綜合程式設計
二進制對BCD轉換
22 ;shift binno msb into carry 000C 7833 23 MOV R0,#LOW BINNO 000E 7902 24 MOV R1,# COUNT/8 0010 E6 25 SFTBIN: MOV A,@R0 ;multiple precision 0011 33 26 RLC A ;rotation left 0012 F6 27 MOV @R0,A ;with carry 0013 08 28 INC R0 ;point to next byte 0014 D9FA 29 DJNZ R1,SFTBIN
30 ;multiple precision BCD addition 0016 7903 31 MOV R1,#NBCD ;get bcd digit no 0018 7830 32 MOV R0,#LOW BCDNO;setup pointer 001A E6 33 BCDADD: MOV A,@R0 ;carry out conversion 001B 35E0 34 ADDC A,ACC ;a <- a * 2 + C 001D D4 35 DA A ;decimal adjust 001E F6 36 MOV @R0,A ;save the result 001F 08 37 INC R0 ;point to the next byte 0020 D9F8 38 DJNZ R1,BCDADD
0022 DAE7 39 DJNZ R2,LOOPN;repeat COUNT times 0024 22 40 RET
41 END
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.10
第7章 綜合程式設計
BCD對二進制轉換
0
3876 0 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1
0 0 1 1 0 0 1 1
- -
0 0 0 1 1 0 0 1 0 0 1 1 1 0 0 0 1938
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.11
第7章 綜合程式設計
BCD對二進制轉換
演算法: BCD 對二進制轉換 輸輸
輸輸入入入入::::待轉換的 BCD 數目 BCDNO 輸
輸 輸
輸出出出出::::二進制數目 BINNO BEGIN::::
1. 清除 BINNO 為 0 ,並設定 COUNT 為 BINNO 的位元數目;
2. REPEAT
2.1 右移 BCDNO 一個位元位置,使其 LSB 進入進位旗號位元
CY 內,然後調整 BCDNO 使其維持除以 2 的特性;
2.2 將進位旗號位元 CY 移入 BINNO 的 MSB 內;
2.3 計數器 COUNT 減 1 UNTIL COUNT == 0 END {BCD 對二進制轉換演算法}
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.12
第7章 綜合程式設計
BCD對二進制轉換
1 ;ex7.1-5.a51 ---- 2 DSEG AT 30H
0010 3 COUNT EQU 16 ;# of BINNO bits 0003 4 NBCD EQU 3 ;# of BCDNO bytes 5 ;define BCDNO, low byte in low address 0030 6 BCDNO: DS NBCD ;BCD number 7 ;define BINNO, low byte in low address 0033 8 BINNO: DS COUNT/8 ;binary number
9 ;
10 ;BCD to BINARY conversion 11 ;
---- 12 CSEG AT 0000H
0000 7A10 13 BINBCD: MOV R2,#COUNT ;set loop count 0002 7903 14 LOOPN: MOV R1,#NBCD ;get bcd digit no 0004 C3 15 CLR C ;clear carry
16 ;point to BCDNO
0005 7832 17 MOV R0,#BCDNO+NBCD-1 0007 E6 18 SFTBCD: MOV A,@R0 0008 13 19 RRC A ;divide by 2 0009 C0D0 20 PUSH PSW ;save carry
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.13
第7章 綜合程式設計
BCD對二進制轉換
000B 30E303 21 JNB ACC.3,CONT ;adjust 000E C3 22 CLR C ;if > 08 000F 9403 23 SUBB A,#03H ;subtract 03H 0011 30E703 24 CONT: JNB ACC.7,NEXT ;adjust 0014 C3 25 CLR C ;if > 80H 0015 9430 26 SUBB A,#30H ;subtract 30H 0017 F6 27 NEXT: MOV @R0,A 0018 18 28 DEC R0
0019 D0D0 29 POP PSW ;restore carry 001B D9EA 30 DJNZ R1,SFTBCD ;repeat NBCD times
31 ;shift CY into BINNO
001D 7834 32 MOV R0,#BINNO+COUNT/8-1 001F 7902 33 MOV R1,#COUNT/8 0021 E6 34 SFTBIN: MOV A,@R0 ;shift CY 0022 13 35 RRC A ;into BINNO 0023 F6 36 MOV @R0,A 0024 18 37 DEC R0 0025 D9FA 38 DJNZ R1,SFTBIN
0027 DAD9 39 DJNZ R2,LOOPN ;repeat count times 0029 22 40 RET
41 END
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.14
第7章 綜合程式設計
浮昇排序演算法
例題 7.2-1 (浮昇排序演算法數值例)
依上述方法將下列資料項排列成遞增次序:23H , 02H , 14H , 78H , 15H , 52H , 40H , 80H 解
解 解
解::::(a) 02H , 14H , 23H , 15H , 52H , 40H , 78H , 80H (b) 02H , 14H , 15H , 23H , 40H , 52H , 78H , 80H (c) 02H , 14H , 15H , 23H , 40H , 52H , 78H , 80H 在第二次迴路後資料已經排序完成。
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.15
第7章 綜合程式設計
浮昇排序演算法
演算法:浮昇排序 輸輸
輸輸入入入入:::待排序的資料陣列 TDATA: 輸輸
輸輸出出出出:::排序完成的資料陣列 TDATA: BEGIN::::
1.設定交換旗號 XCHG 為 ON ; 2. WHILE (交換旗號 XCHG 為 ON) DO
2.1 設定 COUNT 為 N,並設定資料陣列指標 i 為 0 而交換旗號 XCHG 為 OFF ;
2.2 REPEAT
2.2.1 IF TDATA(i) > TDATA(i + 1) THEN TDATA(i)與 TDATA(i + 1)交換,並設定交換旗號 XCHG 為 ON
2.2.2 陣列指標 i 加 1 ,計數器 COUNT 減 1 UNTIL COUNT == 0
END {WHILE}
END {浮昇排序演算法}
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.16
第7章 綜合程式設計
浮昇排序演算法
1 ;ex7.2-2.a51 ---- 2 DSEG AT 30H
0008 3 DSIZE EQU 08H ;array size 0030 4 TDATA: DS DSIZE ;testing data
5 ;
6 ;BUBBLE sorting algorithm 7 ;
---- 8 CSEG AT 0000H
0000 7830 9 BUBSORT: MOV R0,#LOW TDATA;point to TDATA 0002 7931 10 MOV R1,#LOW TDATA+1
0004 7A08 11 MOV R2,#DSIZE ;set loop count 0006 75F000 12 MOV B,#00H ;clear exchange flag 0009 E6 13 CMPXCHG: MOV A,@R0 ;get test data 000A C3 14 CLR C ;clear carry flag 000B 97 15 SUBB A,@R1 ;compare 000C 4006 16 JC NEXT ;if larger 000E E6 17 MOV A,@R0 ;restore A 000F C7 18 XCH A,@R1 ;exchange 0010 F6 19 MOV @R0,A 0011 43F001 20 ORL B,#01H ;set flag
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.17
第7章 綜合程式設計
浮昇排序演算法
0014 08 21 NEXT: INC R0 ;point to the next 0015 09 22 INC R1 ;two items
0016 DAF1 23 DJNZ R2,CMPXCHG;repeat DSIZE times 0018 E5F0 24 MOV A,B ;if exchange in the last 001A 70E4 25 JNZ BUBSORT;iteration, continue 001C 22 26 RET
27 END
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.18
第7章 綜合程式設計
二分搜尋演算法
例題 7.2-3 (二分搜尋演算法)
使用下列資料項,並以尋找資料項 52H 為例,說明搜尋演算法的動作。
02H , 14H , 15H , 23H , 40H , 52H , 78H , 80H 解解解
解::::在二分搜尋演算法中,必須計算中間的資料項的指標值,即 mid = (low +
high)/2 ,然後比較資料項 TDATA(mid)與欲找尋的資料項 KEY ,比較的結果有 下列三種可能:
1. 若 KEY = TDATA(mid),則欲找尋的資料項已經找到;
2. 若 KEY > TDATA(mid),則設定 low ← mid + 1(即 KEY 必在表格下半部);
3. 若 KEY < TDATA(mid),則設定 high ← mid - 1(即 KEY 必在表格上半部)。
依此方式進行,在第二次比較時, TDATA(mid) = 52H(KEY),因此結束。
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.19
第7章 綜合程式設計
二分搜尋演算法
演算法:二分搜尋 輸輸
輸輸入入入入::::欲搜尋的資料陣列 TDATA 與資料項 KEY 輸
輸 輸
輸出出出出::::資料項 KEY 在資料陣列 TDATA 中的指標(index) BEGIN::::
1. 設定搜尋範圍的下限 low 為 0 ,上限 high 為 N - 1(N 為 TDATA 所包含 的資料項數目),並設定指標 search 為-1(先假設找不到);
2. WHILE (low ≤ high) DO 2.1 計算 mid = (high + low)/2 ;
2.2 IF KEY = TDATA(mid) THEN 設定 search = mid 並結束。
2.3 IF KEY < TDATA(mid) THEN 設定 high = mid - 1 ELSE 設定 low = mid + 1
END {WHILE}
END {浮昇排序演算法}
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.20
第7章 綜合程式設計
二分搜尋演算法
1 ;ex7.2-4.a51 ---- 2 DSEG AT 30H
0008 3 ARRAYS EQU 08H ;size of tdata 0030 4 KEY: DS 1 ;key value 0031 5 KINDEX: DS 1 ;index of key 0032 6 LOPTR: DS 1 ;low bound 0033 7 HIPTR: DS 1 ;high bound 0034 8 TDATA: DS ARRAYS ;testing data
9 ;
10 ;BINARY search algorithm 11 ;
---- 12 CSEG AT 0000H 13 ;setup both low and high pointers
0000 753234 14 BSEARCH: MOV LOW LOPTR,#TDATA 0003 75333B 15 MOV LOW HIPTR,#TDATA+ARRAYS-1 0006 E533 16 CONT: MOV A,LOW HIPTR ;get lower bound 0008 C3 17 CLR C ;clear carry flag 0009 9532 18 SUBB A,LOW LOPTR ;if low <= high 000B 401B 19 JC NOTFOUND ;no, has done 000D E533 20 MOV A,LOW HIPTR ;compute mid 000F 2532 21 ADD A,LOW LOPTR ; <- (low +high)/2
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.21
第7章 綜合程式設計
二分搜尋演算法
0011 C3 22 CLR C ;clear carry 0012 13 23 RRC A ;divide by two 0013 F9 24 MOV R1,A ;R1 = mid 0014 C3 25 CLR C ;clear carry 0015 E530 26 MOV A,LOW KEY 0017 97 27 SUBB A,@R1 ;compare key with the 0018 4008 28 JC BELOW ;middle item 001A 6010 29 JZ FOUND0
001C 8932 30 MOV LOW LOPTR,R1;if key1>array[R1]
001E 0532 31 INC LOW LOPTR ;then low <- mid + 1 0020 80E4 32 SJMP CONT
0022 8933 33 BELOW: MOV LOW HIPTR,R1;if key1<array[R1]
0024 1533 34 DEC LOW HIPTR ;high <- mid - 1 0026 80DE 35 SJMP CONT
0028 74FF 36 NOTFOUND: MOV A,#-1;if fnot found,KINDEX=-1 002A 8004 37 SJMP FOUND
002C C3 38 FOUND0: CLR C ;else adjust the KINDEX 002D E9 39 MOV A,R1
002E 9434 40 SUBB A,#TDATA 0030 F531 41 FOUND: MOV LOW KINDEX,A 0032 22 42 RET
43 END
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.22
第7章 綜合程式設計
基本乘法運算方法
1. 連續相加的方式 2. 使用乘法指令 3. 移位相加的方式
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.23
第7章 綜合程式設計
移位相加乘法運算
乘數 1 0 1 0
1 1 0 1
+ 被乘數
Y X
0 0 0 0 0 0 0 0
1 0 1 0 1 0 1 0 0 0 0 0
0 0 0 0 +
1 0 1 0 0 0 0 0
+ 1 0 1 0 0 0 1 0 0 0 1 1 + 1 0 1 0
0 0 1 0 1 0 0 0
P0
= 0 (部分積)
P1
= P
0+ X
0YP2
= P
1+ 2X
1YP3
= P
2+ 2
2X2YP4
= P
3+ 2
3X3Y = (乘積)微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.24
第7章 綜合程式設計
移位相加乘法運算
演算法:移位相加乘法運算 輸
輸 輸
輸入入入:入:::待相乘的兩個 n 位元數目(乘數與被乘數) 輸
輸 輸 輸出出出:出:::乘積 BEGIN::::
1. 載入被乘數於暫存器 Q 內,乘數於暫存器 M 中,清除暫存器 A 為 0 ,
並設定 COUNT 為 n ; 2. REPEAT
2.1右移暫存器 A:Q 一個位元位置,使其 LSB 進入進位旗號位元 CY
內;
2.2 IF 進位旗號位元 CY == 1 THEN 執行 A = A + M ; 2.3計數器 COUNT 減 1
UNTIL COUNT ==0
3. 右移暫存器 A:Q 一個位元位置
END {移位相加乘法運算演算法}
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.25
第7章 綜合程式設計
使用乘法運算指令MUL
MULTER+1 MULTER
MULTEND+1 MULTEND
a b
c d
B A
RESULT+3 RESULT+2 RESULT+1 RESULT a*c
b*c a*d
b*d
×
+
B A
B A
B A
X
×
Y= a( × 2
8+
b) × (
c× 2
8+
d)
= ac × 2
16+ (
ad+
bc) × 2
8+
bd微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.26
第7章 綜合程式設計
乘法運算---Booth演算法
演算法: Booth 2 補數乘法運算 輸輸
輸輸入入入:入::待相乘的兩個 n 位元 2 補數數目(乘數與被乘數): 輸
輸 輸 輸出出出:出::乘積: BEGIN::::
1. 載入被乘數於暫存器 Q 內,乘數於暫存器 M 中,清除暫存器 A 與進位
旗號位元 CY 為 0 ,並設定 COUNT 為 n ; 2. REPEAT
2.1 IF Q(0): CY == 01 THEN 執行 A = A + M ; 2.2 IF Q(0): CY == 10 THEN 執行 A = A - M ;
2.3 右移暫存器 A:Q 一個位元位置,使其 LSB 進入進位旗號位元
CY內;
2.4 計數器 COUNT 減 1 UNTIL COUNT == 0 END { Booth 2補數乘法運算演算法}
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.27
第7章 綜合程式設計
乘法運算---Booth演算法
M = 23H
Q = 47H 0 0 0 00 0 0 0 0 1 0 00 1 1 1
A Q Q(0)CF
0 COUNT
8 A A- M
0 0 1 1 0 0 1 0 -
1 1 0 1 1 1 0 1
1 1 0 1 1 1 0 1
1 0 1 0 00 1 1 1 7 右移A:Q
1 1 0 1 1 1 0 1
1 0 1 1
1 0 1 0 0 6 右移A:Q
1 1 0 1 1 1 0 1
1 0 1
1 1 0 1 0 0 5 右移A:Q
0 0 1 1 0 0 1 0 +
1 1 1 0 0 0 0 1
A A+ M
1 1 1 0 0 0 0 1 1 0 1
0 0 1 0 0 0 4 右移A:Q
右移A:Q 右移A:Q 3 2
A A- M 1 1 1 0
0 0 0 1 1 0 1 0
0 0 1 0 0
1 1 1 0 0 0 0 1 1 0 1 0
0 0 1 0
0 0 0 1 1 0 0 1 0 -
0 0 0 0 1 1 1 0
0 0 0 0 1 1 1 0 1 1 0 1 0 1 0 1
1 1 右移A:Q
A A+ M 0 0 1 1
0 0 1 0 +
0 1 1 0 0 1 0 0
0 右移A:Q
0 1 1 0 0 1 0
0 0 1 1 0 1 0 1 0
0 09B5H
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.28
第7章 綜合程式設計
除法運算-恢復式除法
M 除數
A Q
部分積 被除數
(商)
(餘數) 結果
計算過程 除數
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.29
第7章 綜合程式設計
除法運算-恢復式除法
演算法:恢復式除法運算 輸
輸輸
輸入入入:入:::待相除的兩個 n 位元數目(除數與被除數) 輸
輸輸 輸出出出:出:::商數與餘數 BEGIN::::
1. 載入被除數於暫存器 Q 內,除數於暫存器 M 中,清除暫存器 A 為 0 ,
並設定 COUNT 為 n ; 2. REPEAT
2.1 左移暫存器 A:Q 一個位元位置;
2.2 計算 A = A - M ;
2.3 IF A < 0 THEN 執行 A = A + M 並清除 Q(0)為 0 ELSE 設定 Q(0)為 1 ;
2.4 計數器 COUNT 減 1 UNTIL COUNT == 0 END {恢復式除法運算演算法}
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.30
第7章 綜合程式設計
除法運算-恢復式除法
0 0 0 0 0 0 0 0 0 0 1 00 1 1 0
A 被除數(Q) COUNT
8
A A- M 0 0 0 0
0 0 0 0 -0 0 0 00 1 0 1
0 1 1 1 1 1 1 1
7 左移A:Q
A A+ M 除數(M)
00000101
0 1 1 0
0 1 0 0
0 1 1 0
0 1 0 0
A < 0,恢復除數 +0 0 0 00 1 0 1
0 0 0 0 0 0 0 0
-0 0 0 00 1 0 1
0
A A- M 左移A:Q
A A+ M A < 0,恢復除數 0 0 0 0
0 0 0 0
0 1 1 1 1 1 1 1
0 1 1 0
1 0 0 0
0 1 1 0
1 0 0
+0 0 0 00 1 0 1 0 0 0 0
0 0 0 0 0
0 6
左移A:Q A < 0,恢復除數 0 1 1 0
1 0 0
0 0 0 0 0
0 0 0 0
A A- M -0 0 0 00 1 0 1
1 0 0 1 1 1 1 1 +0 0 0 00 1 0 1
0 0 1 1 0
1 0 0
0 0 0 0 0
0 0 0 0
A A+ M 5
左移A:Q A A- M 0 1 1 0
1 0 0
0 0 0 0 0
0 0 0 0
-0 0 0 00 1 0 1
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.31
第7章 綜合程式設計
除法運算-恢復式除法
A < 0,恢復除數 A A+ M 1 0 1
1 1 1 1 1 +0 0 0 00 1 0 1
0 0 0 0 1 0 0 0
0 0 1 1 0 0000 4
0 左移A:Q
A < 0,恢復除數 A A- M
A A+ M 0 1 1 0
1 0 0
0 0 0 0 0 0
0 0 0
-0 0 0 00 1 0 1 1 1 1 1 1 1 1 1 +0 0 0 00 1 0 1
0 0 0 1 0
0 0 0 1 1 0 00000 3 左移A:Q A > 0 A A- M 0 1 1 0
1 0 0
0 0 0 0 0000 0
-0 0 0 00 1 0 1 1 0 0 0 0 0 0
0 1 0 00000 1
1 0
2 1 0 0
0 0 0 0 1 0 00000 10
1 1
左移A:Q -0 0 0 00 1 0 1
1 0 0 0 0 0 0
0 0 00000 10 A > 0 A A- M
左移A:Q 1 0 0
0 0 0 0 0 0 00001 10 -0 0 0 00 1 0 1
0 1 1 0 0 0 0
0 0 00001 10 0
A A- M A > 0 商數 1
餘數
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.32
第7章 綜合程式設計
除法運算-非恢復式除法
演算法:非恢復式除法運算 輸
輸輸
輸入入入入::::待相除的兩個 n 位元數目(除數與被除數) 輸
輸輸 輸出出出出::::商數與餘數 BEGIN::::
1. 載入被除數於暫存器 Q 內,除數於暫存器 M 中,清除暫存器 A 為 0 ,
並設定 COUNT 為 n - 1 ;
2. 左移暫存器 A:Q 一個位元位置;
3. 計算 A = A - M ; 4. REPEAT
4.1 IF A < 0 THEN 執行下列三個動作:
清除 Q(0)為 0 ; 左移暫存器 A:Q 一個位元位置;
A = A + M;
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.33
第7章 綜合程式設計
除法運算-非恢復式除法
ELSE 執行下列三個動作:
設定 Q(0)為 1 ;
左移暫存器 A:Q 一個位元位置;
A = A - M ; 4.2 計數器 COUNT 減 1 UNTIL COUNT ==0
5. IF A < 0 THEN 清除 Q(0)為 0 並計算 A = A + M ; ELSE 設定 Q(0)為 1 ;
END {非恢復式除法運算演算法}
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.34
第7章 綜合程式設計
除法運算-非恢復式除法
0 0 0 0
0 0 0 0 0 0 1 0 0 1 1 0
A
被除數(Q) COUNT
8
A A
- M 0 0 0 0
0 0 0 0 - 0 0 0 0 0 1 0 1
0 1 1 1 1 1 1
1 7
左移A:Q 除數(M)
00000101
0 1 1 0
0 1 0 0
0 1 1 0
0 1 0 0
A < 0+ 0 0 0 0 0 1 0 1
0
A A
+ M 左移A:Q
A < 0
0 1 1
1 1 1 1 1
0 1 1 0
1 0 0 0
0 1 1 0
1 0 0 0
0 6
左移A:Q
A < 0
0 1 1 0
1 0 0
1 0 1 1 0
1 1 1 0
A A
+ M + 0 0 0 0 0 1 0 1
1 0 0 1 1 1 1 1
0 0 1 1 0
0 0 0 0 5
左移A:Q
A A+ M 0 1 1 0
0 0 0
1 1 1 0 0
1 1 0 0
+ 0 0 0 0 0 1 0 1 1 1 0 1 1 1 0 1
微算機基本原理與應用
林銘波編著 --- 全華科技圖書公司 7.35
第7章 綜合程式設計
除法運算-非恢復式除法
A < 0 1 0 1
1 1 1 1 1
0 0 1 1 0 0000 4
0 左移A:Q
A < 0 0 1 1 0
0 1 0
1 1 1 1 0 0
1 0 0
+0 0 0 00 1 0 1 1 1 1 1 1 1 1
1 1 1 0 00000 3
左移A:Q
A > 0
A A+ M
1 1 1 0
1 1 0
1 1 1 1 0000 0
+0 0 0 00 1 0 1 1 0 0 0 0 0 0
0 1 0 00000 1
1 0
2 1 0 0
0 0 0 0 1 0 00000 10
1 1
左移A:Q -0 0 0 00 1 0 1
1 0 0 0 0 0 0
0 0 00000 10 A > 0 A A- M
左移A:Q 1 0 0
0 0 0 0 0 0 00001 10 -0 0 0 00 1 0 1
0 1 1 0 0 0 0
0 0 00001 10 0
A A- M A > 0 商數 1
餘數
A A+ M