A. 單片機乘法指令計算步驟求解
……4Eh×5Dh = 1C56h 啊,你在草稿紙手算一下,或者直接計算器按就行。
十六進制乘法你不熟的話,可以先都轉成十進制,用十進制乘法得出乘積,再轉成十六進制。
4Eh = 78d,5Dh = 93d
78×93 = 7254d
7254d = 1C56h
好好學習天天向上
B. 如何用51單片機實現一段乘法功能的指令
org 0000h
jmp start
start:
MOV SP,#60H
mov r2,#20h
mov r3,#34h
mov a,#99h
lcall bhd
lcall hbd
NOP
NOP
;三位元組除以單位元組子程序
;入口條件:被除數在R3、R4、R5中,除數在R7中。
;出口信息:OV=0 時,雙位元組商在R4、R5中,OV=1 時溢出。
;影響資源:PSW、A、B、R2~R7 堆棧需求: 2位元組
C. 51單片機中執行一條乘法指令或者除法指令需要多少個機器周期
一條乘法指令或者一條除法指令都需要 4 個機器周期。
指令周期是不確定的,因為她和該條指令所包含的機器周期有關。一個指令周期=1個(或2個或3個或4個)機器周期,像乘法或除法就含有4個機器周期,單指令就只含有1個機器周期。對於大多說的51單片機來說,1個機器周期=12個時鍾周期(或振盪周期)。也有部分單片機時鍾周期和振盪周期不相等,例如,1個時鍾周期=2個振盪周期。
51單片機的功能:8位CPU·4kbytes程序存儲器(ROM) (52為8K),128bytes的數據存儲器(RAM) (52有256bytes的RAM),32條I/O口線·111條指令,大部分為單位元組指令,21個專用寄存器,2個可編程定時/計數器·5個中斷源,2個優先順序(52有6個)。
D. 單片機乘法指令
乘法指令當結果大於0FFH時,A就裝不下了,所以「溢出」了,大於部分裝入到B裡面。
E. 一個單片機的乘法指令
單片機乘法指令是MUL AB,只能是累加器A和寄存器B相乘,結果低八位存入A,高八位存入B。
比如題中,A=4EH,B=5DH,A*B=1C56H,所以A=56H,B=1CH
F. 單片機乘法和除法指令及匯編語言程序舉例
1.乘法:
MUL AB ;(A)×(B),積的低8位在A中,積的高8位在B中;
C總為0。
2.除法:
DIV AB ;(A)÷(B),商在A中,余數在B中。
若(B)= 0 ,則結果不定,(OV)= 1,(C)= 0。
例、試將A中的二進制數轉換為3位BCD碼,其中,百位數存放於31H單
元,十位數和個位數壓縮後存於30H單元中。
解;MOV B,#100
DIV AB
MOV 31H,A
MOV A,#10
XCH A,B
DIV AB
SWAP A
ADD A,B
MOV 30H,A
G. 單片機算術運算類指令那個乘法是怎麼乘的
MUL
AB
BA=A*B
不用管機內是怎麼處理的。。。反正算的是正確的~~~呵呵
就當它是先化為十進制乘完在化成十六進制的吧!!!
H. 單片機乘法指令:假定(A)=50H (B)=0A0H.執行指令 MUL AB 後...
50H*0A0H
=
320H
你可以把十六進制都換成十進制來計算!即80*10=800
換成十六進制就是320H
執行指令之後,A=20H,B=03H,(結果高八位放在寄存器B,低八位放在A)因為結果超過了255,溢出,則ov=1,cy=0(這個是規定!)
I. 51單片機乘法指令MUL,求大蝦!!!
A就是累加器,B是一個專用寄存器,通常用來存儲運算結果的溢出值如加法、乘法的高八位,除法的余數等。
J. 單片機乘法的實現
org 0000h
jmp start
start:
MOV SP,#60H
mov r2,#20h
mov r3,#34h
mov a,#99h
lcall bhd
lcall hbd
NOP
NOP
;三位元組除以單位元組子程序
;入口條件:被除數在R3、R4、R5中,除數在R7中。
;出口信息:OV=0 時,雙位元組商在R4、R5中,OV=1 時溢出。
;影響資源:PSW、A、B、R2~R7 堆棧需求: 2位元組
DV31:
CLR C
MOV A,R3
SUBB A,R7
JC DV30
SETB OV ;商溢出
RET
DV30:
MOV R2,#10H;求R3R4R5/R7-→R4R5
DM23:
CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DM24
MOV R3,A
INC R5
DM24:
DJNZ R2,DM23
MOV A,R3 ;四捨五入
ADD A,R3
JC DM25
SUBB A,R7
JC DM26
DM25:
INC R5
MOV A,R5
JNZ DM26
INC R4
DM26:
CLR OV
RET ;商在R4R5中
;兩位元組除以單位元組子程序
;入口條件:被除數在R4、R5中,除數在R7中。
;出口信息:OV=0 時,單位元組商在R3中,OV=1 時溢出。
; 余數在r4中
;影響資源:PSW、A、R3~R7 堆棧需求: 2位元組
D457:
CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV;商溢出
RET
DV50:
MOV R6,#8 ;求平均值(R4R5/R7-→R3)
DV51:
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52:
CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4 ;四捨五入
ADD A,R4
JC DV53
SUBB A,R7
JC DV54
DV53:
INC R3
DV54:
CLR OV
RET
;四位元組除以單位元組子程序
;入口條件:被除數在R2、R3、R4、R5中,除數在R7中。
;出口信息:a<ff 時三位元組商在R3、r4、r5中,a=ff 時溢出。
; 余數在r2中
;影響資源:PSW、A、R2~R7 堆棧需求:2位元組
;input dat1,dat2,dat3,r5 ;r0(h),:divisor dat2(h) dat3() r5(l):quotient
;dat1(h)dat2(l):resie
F_DIV:
clr c
mov a,r7
jz fd_over
fd_begin:
mov a,r2
subb a,r7
jc no_overflow
mov a,#0ffh
ret
no_overflow:
clr a
mov r6,#18h
fdiv0:
lcall rlc4
jc goushang
mov a,r2
subb a,r7
jc fdnext
inc r5
mov r2,a
fdnext:
djnz r6,fdiv0
jmp fdone
goushang:
mov a,r2
subb a,r7
inc a
inc r5
mov r2,a
jmp fdnext
fdone:
clr a
clr ov
ret
fd_over:
mov a,#0ffh
ret
rlc4:
clr c
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
mov a,r2
rlc a
mov r2,a
ret
;DIVD功能:雙位元組二進制無符號數除法
;入口條件:被除數在R2、R3、R4、R5中,除數在R6、R7中。
;出口信息:OV=0 時,雙位元組商在R4、R5中,OV=1 時溢出。
; 余數在r2 r3中
;影響資源:PSW、A、B、R1~R7 堆棧需求: 2位元組
DIVD:
CLR C ;比較被除數和除數
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV ;溢出
RET
DVD1:
MOV B,#10H ;計算雙位元組商
DVD2:
CLR C ;部分商和余數同時左移一位
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C ;保存溢出位
CLR C
SUBB A,R7 ;計算(R2R3-R6R7)
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0 ;結果判斷
JC DVD3
MOV R2,A ;夠減,存放新的余數
MOV A,R1
MOV R3,A
INC R5 ;商的低位置一
DVD3:
DJNZ B,DVD2;計算完十六位商(R4R5)
; MOV A,R4 ;商移到R2R3中
; MOV R2,A
; MOV A,R5
; MOV R3,A
CLR OV ;設立成功標志
RET
;雙位元組乘以雙位元組乘法
;入口條件:被乘數在R2、R3中,乘數在R6、R7中。
;出口信息:乘積在R2、R3、R4、R5中。
;影響資源:PSW、A、B、R2~R7 堆棧需求: 2位元組
MULD:
MOV A,R3 ;計算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ;暫存部分積
MOV R5,A
MOV A,R3 ;計算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;累加部分積
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;計算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;累加部分積
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;計算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;累加部分積
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
;雙位元組乘以單位元組乘法
;入口條件:被乘數在R2、R3中,乘數在R7中。
;出口信息:乘積在R2、R3、R4中。
;影響資源:PSW、A、B、R2~R7 堆棧需求: 2位元組
mul21:
mov a,r3
mov b,r7
mul ab
mov r4,a
mov r5,b
mov a,r2
mov b,r7
mul ab
add a,r5
mov r3,a
mov a,b
addc a,#00h
mov r2,a
ret
;功能:雙位元組十六進制整數轉換成雙位元組BCD碼整數
;入口條件:待轉換的雙位元組十六進制整數在R6、R7中。
;出口信息:轉換後的三位元組BCD碼整數在R3、R4、R5中。
;影響資源:PSW、A、R2~R7 堆棧需求: 2位元組
HB2:
CLR A ;BCD碼初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;轉換雙位元組十六進制整數
HB3:
MOV A,R7 ;從高端移出待轉換數的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD碼帶進位自身相加,相當於乘2
ADDC A,R5
DA A ;十進制調整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;雙位元組十六進制數的萬位數不超過6,不用調整
DJNZ R2,HB3 ;處理完16bit
RET
;入口條件:待轉換的單位元組BCD碼整數在累加器A中。
;出口信息:轉換後的單位元組十六進制整數仍在累加器A中。
;影響資源:PSW、A、B、R4 堆棧需求: 2位元組
BCDH:
MOV B,#10H ;分離十位和個位
DIV AB
MOV R4,B ;暫存個位
MOV B,#10 ;將十位轉換成十六進制
MUL AB
ADD A,R4 ;按十六進制加上個位
RET
;雙位元組BCD碼整數轉換成雙位元組十六進制整數
;入口條件:待轉換的雙位元組BCD碼整數在R2、R3中。
;出口信息:轉換後的雙位元組十六進制整數仍在R2、R3中。
;影響資源:PSW、A、B、R2、R3、R4 堆棧需求:4位元組
BH2:
MOV A,R3 ;將低位元組轉換成十六進制
LCALL BCDH
MOV R3,A
MOV A,R2 ;將高位元組轉換成十六進制
LCALL BCDH
MOV B,#100 ;擴大一百倍
MUL AB
ADD A,R3 ;和低位元組按十六進制相加
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
RET
;標號: BHD功能:單位元組BCD碼小數轉換成單位元組十六進制小數
;入口條件:待轉換的單位元組BCD碼數在累加器A中。
;出口信息:轉換後的單位元組十六進制小數仍在累加器A中。
;影響資源:PSW、A、R2、R3 堆棧需求: 2位元組
BHD:
MOV R2,#8 ;准備計算一個位元組小數
BHD0: ADD A,ACC ;按十進制倍增
DA A
XCH A,R3
RLC A ;將進位標志移入結果中
XCH A,R3
DJNZ R2,BHD0 ;共計算8bit小數
ADD A,#0B0H ;剩餘部分達到0.50否?
JNC BHD1 ;四舍
INC R3 ;五入
BHD1:
MOV A,R3 ;取結果
RET
; 標號: HBD功能:單位元組十六進制小數轉換成單位元組BCD碼小數
;入口條件:待轉換的單位元組十六進制小數在累加器A中。
;出口信息:CY=0時轉換後的BCD碼小數仍在A中。CY=1時原小數接近整數1。
;影響資源:PSW、A、B 堆棧需求: 2位元組
HBD:
MOV B,#100 ;原小數擴大一百倍
MUL AB
RLC A ;余數部分四捨五入
CLR A
ADDC A,B
MOV B,#10 ;分離出十分位和百分位
DIV AB
SWAP A
ADD A,B ;拼裝成單位元組BCD碼小數
DA A ;調整後若有進位,原小數接近整數1
RET
jmp $
end