📄 i5_5_01_01.htm
字号:
<p ALIGN="JUSTIFY">入口条件:待平方数在R2、R3中。</p>
<p ALIGN="JUSTIFY">出口信息:结果在R2、R3、R4、R5中。</p>
<p ALIGN="JUSTIFY">影响资源:PSW、A、B、R2~R5 堆栈需求: 2字节</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">MUL2: MOV A,R3 ;计算R3平方</p>
<p ALIGN="JUSTIFY">MOV B,A</p>
<p ALIGN="JUSTIFY">MUL AB</p>
<p ALIGN="JUSTIFY">MOV R4,B ;暂存部分积</p>
<p ALIGN="JUSTIFY">MOV R5,A</p>
<p ALIGN="JUSTIFY">MOV A,R2 ;计算R2平方</p>
<p ALIGN="JUSTIFY">MOV B,A</p>
<p ALIGN="JUSTIFY">MUL AB</p>
<p ALIGN="JUSTIFY">XCH A,R3 ;暂存部分积,并换出R2和R3</p>
<p ALIGN="JUSTIFY">XCH A,B</p>
<p ALIGN="JUSTIFY">XCH A,R2</p>
<p ALIGN="JUSTIFY">MUL AB ;计算2×R2×R3</p>
<p ALIGN="JUSTIFY">CLR C</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">XCH A,B</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">JNC MU20</p>
<p ALIGN="JUSTIFY">INC R2 ;累加溢出量</p>
<p ALIGN="JUSTIFY">MU20: XCH A,B ;累加部分积</p>
<p ALIGN="JUSTIFY">ADD A,R4</p>
<p ALIGN="JUSTIFY">MOV R4,A</p>
<p ALIGN="JUSTIFY">MOV A,R3</p>
<p ALIGN="JUSTIFY">ADDC A,B</p>
<p ALIGN="JUSTIFY">MOV R3,A</p>
<p ALIGN="JUSTIFY">CLR A</p>
<p ALIGN="JUSTIFY">ADDC A,R2</p>
<p ALIGN="JUSTIFY">MOV R2,A</p>
<p ALIGN="JUSTIFY">RET</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">(7) 标号: DIVD
功能:双字节二进制无符号数除法</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。</p>
<p ALIGN="JUSTIFY">出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。</p>
<p ALIGN="JUSTIFY">影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">DIVD: CLR C ;比较被除数和除数</p>
<p ALIGN="JUSTIFY">MOV A,R3 </p>
<p ALIGN="JUSTIFY">SUBB A,R7</p>
<p ALIGN="JUSTIFY">MOV A,R2</p>
<p ALIGN="JUSTIFY">SUBB A,R6</p>
<p ALIGN="JUSTIFY">JC DVD1</p>
<p ALIGN="JUSTIFY">SETB OV ;溢出</p>
<p ALIGN="JUSTIFY">RET</p>
<p ALIGN="JUSTIFY">DVD1: MOV B,#10H ;计算双字节商</p>
<p ALIGN="JUSTIFY">DVD2: CLR C ;部分商和余数同时左移一位</p>
<p ALIGN="JUSTIFY">MOV A,R5</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">MOV R5,A</p>
<p ALIGN="JUSTIFY">MOV A,R4</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">MOV R4,A</p>
<p ALIGN="JUSTIFY">MOV A,R3</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">MOV R3,A</p>
<p ALIGN="JUSTIFY">XCH A,R2</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">XCH A,R2</p>
<p ALIGN="JUSTIFY">MOV F0,C ;保存溢出位</p>
<p ALIGN="JUSTIFY">CLR C</p>
<p ALIGN="JUSTIFY">SUBB A,R7 ;计算(R2R3-R6R7)</p>
<p ALIGN="JUSTIFY">MOV R1,A</p>
<p ALIGN="JUSTIFY">MOV A,R2</p>
<p ALIGN="JUSTIFY">SUBB A,R6</p>
<p ALIGN="JUSTIFY">ANL C,/F0 ;结果判断</p>
<p ALIGN="JUSTIFY">JC DVD3</p>
<p ALIGN="JUSTIFY">MOV R2,A ;够减,存放新的余数</p>
<p ALIGN="JUSTIFY">MOV A,R1</p>
<p ALIGN="JUSTIFY">MOV R3,A</p>
<p ALIGN="JUSTIFY">INC R5 ;商的低位置一</p>
<p ALIGN="JUSTIFY">DVD3: DJNZ B,DVD2 ;计算完十六位商(R4R5)</p>
<p ALIGN="JUSTIFY">MOV A,R4 ;将商移到R2R3中</p>
<p ALIGN="JUSTIFY">MOV R2,A</p>
<p ALIGN="JUSTIFY">MOV A,R5</p>
<p ALIGN="JUSTIFY">MOV R3,A</p>
<p ALIGN="JUSTIFY">CLR OV ;设立成功标志</p>
<p ALIGN="JUSTIFY">RET</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">(8) 标号: D457
功能:双字节二进制无符号数除以单字节二进制数</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">入口条件:被除数在R4、R5中,除数在R7中。</p>
<p ALIGN="JUSTIFY">出口信息:OV=0 时,单字节商在R3中,OV=1 时溢出。</p>
<p ALIGN="JUSTIFY">影响资源:PSW、A、R3~R7 堆栈需求: 2字节</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">D457: CLR C</p>
<p ALIGN="JUSTIFY">MOV A,R4</p>
<p ALIGN="JUSTIFY">SUBB A,R7</p>
<p ALIGN="JUSTIFY">JC DV50</p>
<p ALIGN="JUSTIFY">SETB OV ;商溢出</p>
<p ALIGN="JUSTIFY">RET</p>
<p ALIGN="JUSTIFY">DV50: MOV R6,#8 ;求平均值(R4R5/R7-→R3)</p>
<p ALIGN="JUSTIFY">DV51: MOV A,R5</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">MOV R5,A</p>
<p ALIGN="JUSTIFY">MOV A,R4</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">MOV R4,A</p>
<p ALIGN="JUSTIFY">MOV F0,C</p>
<p ALIGN="JUSTIFY">CLR C</p>
<p ALIGN="JUSTIFY">SUBB A,R7</p>
<p ALIGN="JUSTIFY">ANL C,/F0</p>
<p ALIGN="JUSTIFY">JC DV52</p>
<p ALIGN="JUSTIFY">MOV R4,A</p>
<p ALIGN="JUSTIFY">DV52: CPL C</p>
<p ALIGN="JUSTIFY">MOV A,R3</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">MOV R3,A</p>
<p ALIGN="JUSTIFY">DJNZ R6,DV51</p>
<p ALIGN="JUSTIFY">MOV A,R4 ;四舍五入</p>
<p ALIGN="JUSTIFY">ADD A,R4</p>
<p ALIGN="JUSTIFY">JC DV53</p>
<p ALIGN="JUSTIFY">SUBB A,R7</p>
<p ALIGN="JUSTIFY">JC DV54</p>
<p ALIGN="JUSTIFY">DV53: INC R3</p>
<p ALIGN="JUSTIFY">DV54: CLR OV</p>
<p ALIGN="JUSTIFY">RET</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">(9) 标号: DV31
功能:三字节二进制无符号数除以单字节二进制数</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">入口条件:被除数在R3、R4、R5中,除数在R7中。</p>
<p ALIGN="JUSTIFY">出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。</p>
<p ALIGN="JUSTIFY">影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">DV31: CLR C</p>
<p ALIGN="JUSTIFY">MOV A,R3</p>
<p ALIGN="JUSTIFY">SUBB A,R7</p>
<p ALIGN="JUSTIFY">JC DV30</p>
<p ALIGN="JUSTIFY">SETB OV ;商溢出</p>
<p ALIGN="JUSTIFY">RET</p>
<p ALIGN="JUSTIFY">DV30: MOV R2,#10H ;求R3R4R5/R7-→R4R5</p>
<p ALIGN="JUSTIFY">DM23: CLR C</p>
<p ALIGN="JUSTIFY">MOV A,R5</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">MOV R5,A</p>
<p ALIGN="JUSTIFY">MOV A,R4</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">MOV R4,A</p>
<p ALIGN="JUSTIFY">MOV A,R3</p>
<p ALIGN="JUSTIFY">RLC A</p>
<p ALIGN="JUSTIFY">MOV R3,A</p>
<p ALIGN="JUSTIFY">MOV F0,C</p>
<p ALIGN="JUSTIFY">CLR C</p>
<p ALIGN="JUSTIFY">SUBB A,R7</p>
<p ALIGN="JUSTIFY">ANL C,/F0</p>
<p ALIGN="JUSTIFY">JC DM24</p>
<p ALIGN="JUSTIFY">MOV R3,A</p>
<p ALIGN="JUSTIFY">INC R5</p>
<p ALIGN="JUSTIFY">DM24: DJNZ R2,DM23</p>
<p ALIGN="JUSTIFY">MOV A,R3 ;四舍五入</p>
<p ALIGN="JUSTIFY">ADD A,R3</p>
<p ALIGN="JUSTIFY">JC DM25</p>
<p ALIGN="JUSTIFY">SUBB A,R7</p>
<p ALIGN="JUSTIFY">JC DM26</p>
<p ALIGN="JUSTIFY">DM25: INC R5</p>
<p ALIGN="JUSTIFY">MOV A,R5</p>
<p ALIGN="JUSTIFY">JNZ DM26</p>
<p ALIGN="JUSTIFY">INC R4</p>
<p ALIGN="JUSTIFY">DM26: CLR OV</p>
<p ALIGN="JUSTIFY">RET ;商在R4R5中 </p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">(10) 标号: MULS
功能:双字节二进制有符号数乘法(补码)</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">入口条件:被乘数在R2、R3中,乘数在R6、R7中。</p>
<p ALIGN="JUSTIFY">出口信息:乘积在R2、R3、R4、R5中。</p>
<p ALIGN="JUSTIFY">影响资源:PSW、A、B、R2~R7 堆栈需求: 4字节</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">MULS: MOV R4,#0 ;清零R4R5</p>
<p ALIGN="JUSTIFY">MOV R5,#0</p>
<p ALIGN="JUSTIFY">LCALL MDS ;计算结果的符号和两个操作数的绝对值</p>
<p ALIGN="JUSTIFY">LCALL MULD ;计算两个绝对值的乘积</p>
<p ALIGN="JUSTIFY">SJMP MDSE ;用补码表示结果</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">(11) 标号: DIVS
功能:双字节二进制有符号数除法(补码)</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。</p>
<p ALIGN="JUSTIFY">出口信息:OV=0时商在R2、R3中,OV=1时溢出。</p>
<p ALIGN="JUSTIFY">影响资源:PSW、A、B、R1~R7 堆栈需求: 5字节</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">DIVS: LCALL MDS ;计算结果的符号和两个操作数的绝对值</p>
<p ALIGN="JUSTIFY">PUSH PSW ;保存结果的符号</p>
<p ALIGN="JUSTIFY">LCALL DIVD ;计算两个绝对值的商</p>
<p ALIGN="JUSTIFY">JNB OV,DVS1 ;溢出否?</p>
<p ALIGN="JUSTIFY">POP ACC ;溢出,放去结果的符号,保留溢出标志</p>
<p ALIGN="JUSTIFY">RET</p>
<p ALIGN="JUSTIFY">DVS1: POP PSW ;未溢出,取出结果的符号</p>
<p ALIGN="JUSTIFY">MOV R4,#0</p>
<p ALIGN="JUSTIFY">MOV R5,#0</p>
<p ALIGN="JUSTIFY">MDSE: JB F0,MDS2 ;用补码表示结果</p>
<p ALIGN="JUSTIFY">CLR OV ;结果为正,原码即补码,计算成功</p>
<p ALIGN="JUSTIFY">RET</p>
<p ALIGN="JUSTIFY">MDS: CLR F0 ;结果符号初始化</p>
<p ALIGN="JUSTIFY">MOV A,R6 ;判断第二操作数的符号</p>
<p ALIGN="JUSTIFY">JNB ACC.7,MDS1;为正,不必处理</p>
<p ALIGN="JUSTIFY">CPL F0 ;为负,结果符号取反</p>
<p ALIGN="JUSTIFY">XCH A,R7 ;第二操作数取补,得到其绝对值</p>
<p ALIGN="JUSTIFY">CPL A</p>
<p ALIGN="JUSTIFY">ADD A,#1</p>
<p ALIGN="JUSTIFY">XCH A,R7</p>
<p ALIGN="JUSTIFY">CPL A</p>
<p ALIGN="JUSTIFY">ADDC A,#0</p>
<p ALIGN="JUSTIFY">MOV R6,A</p>
<p ALIGN="JUSTIFY">MDS1: MOV A,R2 ;判断第一操作数或运算结果的符号</p>
<p ALIGN="JUSTIFY">JNB ACC.7,MDS3;为正,不必处理</p>
<p ALIGN="JUSTIFY">CPL F0 ;为负,结果符号取反</p>
<p ALIGN="JUSTIFY">MDS2: MOV A,R5
;求第一操作数的绝对值或运算结果的补码</p>
<p ALIGN="JUSTIFY">CPL A</p>
<p ALIGN="JUSTIFY">ADD A,#1</p>
<p ALIGN="JUSTIFY">MOV R5,A</p>
<p ALIGN="JUSTIFY">MOV A,R4</p>
<p ALIGN="JUSTIFY">CPL A</p>
<p ALIGN="JUSTIFY">ADDC A,#0</p>
<p ALIGN="JUSTIFY">MOV R4,A</p>
<p ALIGN="JUSTIFY">MOV A,R3</p>
<p ALIGN="JUSTIFY">CPL A</p>
<p ALIGN="JUSTIFY">ADDC A,#0</p>
<p ALIGN="JUSTIFY">MOV R3,A</p>
<p ALIGN="JUSTIFY">MOV A,R2</p>
<p ALIGN="JUSTIFY">CPL A</p>
<p ALIGN="JUSTIFY">ADDC A,#0</p>
<p ALIGN="JUSTIFY">MOV R2,A</p>
<p ALIGN="JUSTIFY">MDS3: CLR OV ;运算成功</p>
<p ALIGN="JUSTIFY">RET</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">(12) 标号: SH2
功能:双字节二进制无符号数开平方(快速)</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">入口条件:被开方数在R2、R3中。</p>
<p ALIGN="JUSTIFY">出口信息:平方根仍在R2、R3中,整数部分的位数为原数的一半,其余为小数。</p>
<p ALIGN="JUSTIFY">影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -