單片機(jī)兩個(gè)雙字節(jié)無(wú)符號(hào)數(shù)相乘程序舉例
掃描二維碼
隨時(shí)隨地手機(jī)看文章
本程序適用于Intel的51系統(tǒng)單片機(jī)
例 將(R2R3)和(R6R7)兩個(gè)雙字節(jié)無(wú)符號(hào)數(shù)相乘,結(jié)果送R4R5R6R7。
用移位和迭加的方式,步驟如下:
1)清部分積(高16位)R4R5=0。循環(huán)數(shù)16。
2)把R4R5R6R7右移一位,從最低位開(kāi)始檢查乘數(shù)R6R7的各個(gè)位。
3)如乘數(shù)位為1,則被乘數(shù)R2R3加到部分積R4R5中,否則不加。
4)循環(huán)數(shù)減1,不到16次再返回1)。
NMUL:MOV R4,#0
MOV R5,#0 ;積的高16位=0
MOV R0,#16 ;乘數(shù)16位二進(jìn)制
CLR C
NMLP:MOV A,R4
RRC A
MOV R4,A
MOV A,R5
RRC A
MOV R5,A
MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A ;(R4R5R6R7)右移一位
JNC NMLN
MOV A,R5 ;若移出位=1,則(R4R5)=(R4R5)+(R2R3)
ADD A,R3
MOV R5,A
MOV A,R4
ADDC A,R2
MOV R4,A
NMLN:DJNZ R0,NMLP
MOV A,R4 ;最后再移位一次
RRC A
MOV R4,A
MOV A,R5
RRC A
MOV R5,A
MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A ;(R4R5R6R7)右移一位
RET