專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

用移位減法做4位16進(jìn)制數(shù)除以4位16進(jìn)制數(shù)運(yùn)算

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年03月20日   【字體:

 ;只能整數(shù)運(yùn)算及非0運(yùn)算
ORG 0000H
 JMP A1
 ORG 002BH
A1: MOV R0,#0FFH;被除數(shù)
 MOV R1,#0FFH;被除數(shù)
 MOV R2,#0;余數(shù)
 MOV R3,#0;余數(shù)
 MOV R4,#0;商
 MOV R5,#0;商
 MOV R6,#03H;除數(shù)
 MOV R7,#0E8H;除數(shù)
 MOV 30H,#16
A2: MOV A,R1;先把移低字節(jié)移到高字節(jié)位
 RLC A;
 MOV R1,A;
 MOV A,R0;先處理高字節(jié)和接收低字節(jié)傳上來(lái)的位字節(jié)
 RLC A;
 MOV R0,A;
 MOV A,R3;把移出來(lái)的數(shù)處理
 RLC A;
 MOV R3,A;
 MOV A,R2;把移出來(lái)的數(shù)處理
 RLC A;
 MOV R2,A;
A4:
 MOV A,R3;先減低字節(jié)8位
 CLR C;清C
 SUBB A,R7;A=A-C-R7
 MOV 32H,A;臨時(shí)保存余數(shù)
 MOV A,R2;再減高8位
 SUBB A,R6;不能清C低八位可能有借位
 JC A3;判斷大小大則保存余數(shù)到R2,R3
 MOV R3,32H;保存低八位余數(shù)
 MOV R2,A;保存高八位余數(shù)
      ;由于除數(shù)為4位16進(jìn)制數(shù)所以余數(shù)有可能超過(guò)2位16進(jìn)制數(shù)要用2個(gè)寄存器
A3: CPL C;商處理
 MOV A,R5;先把存到低字節(jié)位
 RLC A;
 MOV R5,A;
 MOV A,R4;通過(guò)低字節(jié)存到高字節(jié)
 RLC A;
 MOV R4,A;
 DJNZ 30H,A2;判斷是否完成
 JMP $
 END
;思路--除數(shù)為4位16進(jìn)制數(shù)就得要用2個(gè)寄存器

;       R2       R3       R6      R7                   R4        R5
;1、 00000000>00000001-00000011>11101000小于0,商值為00000000>00000000B
;2、 00000000>00000011-00000011>11101000小于0,商值為00000000>00000000B
;3、 00000000>00000111-00000011>11101000小于0,商值為00000000>00000000B
;4、 00000000>00001111-00000011>11101000小于0,商值為00000000>00000000B
;5、 00000000>00011111-00000011>11101000小于0,商值為00000000>00000000B
;6、 00000000>00111111-00000011>11101000小于0,商值為00000000>00000000B
;7、 00000000>01111111-00000011>11101000小于0,商值為00000000>00000000B
;8、 00000000>11111111-00000011>11101000小于0,商值為00000000>00000000B
;9、 00000001>11111111-00000011>11101000小于0,商值為00000000>00000000B
;10、00000011>11111111-00000011>11101000大于0,商值為00000000>00000001B;余數(shù)00010111B賦值給R3,00000000B賦值給R2
;11、00000000>00101111-00000011>11101000小于0,商值為00000000>00000010B
;12、00000000>01011111-00000011>11101000小于0,商值為00000000>00000100B
;13、00000000>10111111-00000011>11101000小于0,商值為00000000>00001000B
;14、00000001>01111111-00000011>11101000小于0,商值為00000000>00010000B
;15、00000010>11111111-00000011>11101000小于0,商值為00000000>00100000B
;16、00000100>11111111-00000011>11101000大于0,商值為00000000>01000001B,余數(shù)00010111B賦值給R3,00000010B賦值給R2
;至此算法完成

關(guān)閉窗口

相關(guān)文章