您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 模板/表格 > 51单片机学习05-数逻指令
作业一:(讲评)补充:如下程序段,请在指令左边写出各机器指令代码,在各操作数下方注明其寻址方式,分析每条指令执行后的结果以及最终A、B、R1、R5、(3AH)、(3BH)等单元的内容。793AMOVR1,#3AH;R1=3AH7448MOVA,#48H;A=48HA7E0MOV@R1,ACC;(3AH)=48H853AF0MOVB,3AH;B=48H753A5CMOV3AH,#5CH;(3AH)=5CH873BMOV3BH,@R1;(3BH)=5CHADF0MOVR5,0F0H;R5=48H777DMOV@R1,#7DH;(3AH)=7DH853BE0MOV0E0H,3BH;A=5CH寄存器寻址立即寻址寄存器寻址立即寻址寄存器间接寻址直接寻址直接寻址直接寻址直接寻址立即寻址直接寻址寄存器间接寻址寄存器寻址直接寻址寄存器间接寻址立即寻址直接寻址直接寻址答:执行上述程序段后A=5CH,B=48H,R1=3AH,R5=48H,(3AH)=7DH,(3BH)=5CH。3.程序状态字寄存器PSW(标志寄存器)记存CPU执行算术运算及某些操作的一些特征标志信息,以备后用SFR名+位次:PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0字节地址+位次:0D0H.70D0H.60D0H.50D0H.40D0H.30D0H.20D0H.10D0H.0位地址:D7HD6HD5HD4HD3HD2HD1HD0HSFR名字节地址位名称位次进位标志位辅助进位标志位溢出标志位奇偶标志位用户标志位工作寄存器区选择控制位加减运算时最高位向上有进/借位则置‘1’加减运算时D3位向D4位有进/借位则置‘1’BCD数运算修正用加减运算时D7、D6位向上的进/借位不同则置‘1’补码运算时表征溢出A中‘1’的个数为奇则置‘1’表征8位码的奇偶性P.14图2-3PSW的格式半进位标志位随时根据A的内容变化生成不影响标志位CACOV3.4.2算术运算类指令积FF则0V=1B=0则0V=1不影响ACOV标志结果存累加器ACyCyTM【例3-1】(A)=53H,(R0)=FCH,执行指令ADDA,R0结果:(A)=4FH,Cy=1,Ac=0,OV=0,P=1注意:运算中,由于位6和位7同时有进位,所以标志位OV=0。【例3-2】(A)=85H,(R0)=20H,(20H)=AFH,执行指令:ADDA,@R0结果:(A)=34H,Cy=1,Ac=1,OV=1,P=1注意:由于位7有进位,而位6无进位,所以标志位OV=1P.3801010011+111111001110000=01001111Cy:110000101+101011110001111=00110100Cy:1【例3-3】(A)=85H,(20H)=FFH,Cy=1,执行指令:ADDCA,20H结果为:(A)=85H,Cy=1,Ac=1,OV=0,P=1【例3-4】(A)=56H,(R5)=67H,把它们看作为两个压缩的BCD数,进行BCD数的加法。执行指令:ADDA,R5;先按二进制加,得BDHDAA;紧接着进行BCD调整,得23H且有向上进位结果为:(A)=23H,Cy=1(维持ADD后的Ac=1,OV=1),P=1。可见,56+67=123,结果是正确的。【例3-5】(A)=C9H,(R2)=54H,Cy=1,执行指令SUBBA,R2结果:(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位而位7无向上借位),P=0P.38~4010000101+1111111111111111=10000101Cy:1←原Cy11001001-01010100-1=01110100Cy:0←原Cy【例3-6】(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,执行指令DECA;(A)-1→A=0EHDECR7;(R7)-1→R7=18HDEC30H;(30H)-1→30H=FFHDEC@R1;((R1))-1→(R1)=FEH结果为(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1,不影响其他标志【例3-7】(A)=FBH,(B)=12H,执行指令DIVAB结果为(A)=0DH,(B)=11H,Cy=0,OV=0。P.41【例B3-7】编程序实现R1、R2中的双字节BCD数加上R3、R4中的双字节BCD数,三字节和值存放于R5、R6、R7中。ORG11A0H11A0EAMOVA,R2;取被加数低字节11A12CADDA,R4;加上加数低字节11A2D4DAA;十进制调整11A3FFMOVR7,A;存和值的低字节11A4E9MOVA,R1;取被加数高字节11A53BADDCA,R3;加上加数高字节及低字节的进位11A6D4DAA;十进制调整11A7FEMOVR6,A;存和值的高字节11A87400MOVA,#00H;被加数与加数无第三字节,设其为011AA3400ADDCA,#00H;加上高字节向第三字节的进位;无需进行十进制调整(其结果为00H或01H)11ACFDMOVR5,A;存和值的第三字节11AD80FESJMP$;自循环暂停11AF【练习】如果是双字节数相加结果只需双字节呢?如果是双字节二进制数相加(不是BCD数)呢?如果是双字节二进制数相减结果为双字节二进制数呢?如果是单字节二进制数相加结果为双字节呢?如果是(31H)、(30H)的双字节数加上(41H)、(40H)中的双字节数,三字节结果存放于(52H)、(51H)、(50H)中,前者为高字节,如何编程。3.4.3逻辑操作类指令跟‘0’相与的位被屏蔽(清0)跟‘1’相或的位被置1跟‘1’相异或的位被求反TM二进制数的逻辑与运算0^0=01^0=00^1=01^1=1例:逻辑与运算常用来将一个数据的某些位清零(屏蔽),而保持其他位不变。【例B3-8】将30H单元的低4位清零,高4位保持不变,可用下面指令实现。ANL30H,#0F0H【例3-9】(A)=07H,(R0)=0FDH,执行指令:ANLA,R0结果:(A)=05H10110011B^)11110000B10110000B不变清0(屏蔽)二进制数的逻辑或运算0v0=01v0=10v1=11v1=1例:逻辑或运算常用来将一个数据的某些位置1,而保持其他位不变。【例B3-9】将30H单元的低4位置1,高4位保持不变,可用下面指令实现。ORL30H,#0FH【例3-10】(P1)=05H,(A)=33H,执行指令ORLP1,A结果:(P1)=37H10100001Bv)00001111B10101111B不变置1二进制数的逻辑异或运算00=010=101=111=0例:逻辑异或运算常用来将一个数据的某些位取反,而保持其他位不变。【例B3-10】将A的奇数位取反而偶数位保持不变,可用下面指令实现。XRLA,#0AAH;(XRLA,#10101010B)【例3-11】(A)=90H,(R3)=73H执行指令:XRLA,R3结果:(A)=E3H10101001B)11110000B01011001B求反不变移位指令操作示意图D7D0D7D7D7D0D0D0【例B3-11】8位二进制码算术左移(无符号数乘2):CLRC;Cy清0RLCA;左移1位,低位补0,原最高位进到Cy中【例B3-12】8位二进制码逻辑右移(无符号数除2):CLRC;Cy清0RRCA;右移1位,高位补0,原最低位移到Cy中【思考】DPTR(DPH、DPL)中的16位二进制码算术左移(乘2)【思考】DPTR(DPH、DPL)中的16位二进制码逻辑右移(除2)【思考】指出下列非法指令违背了什么样的概念或规则?ADD20H,#10HINC@R5DECDPTRADDC#30H,ARLCADEC#60HANL4AH,R0ORLR0,#8AH作业二:P.51—7、8、9、10、15、16补充:请分析下列程序段执行后有关单元的内容。MOVA,#68HMOVR0,#40HPUSHACCADDA,#50HMOV@R0,AMOVA,R0INCR0MOV@R0,APOPBORLA,40H答:A=,R0=,B=,(40H)=,(41H)=ANLA,R5R3单条指令实现如:用一个8位二进制数表示一个有符号数:1、机器数和真值一个数在机器中的表示形式称为机器数。(机器中连同符号位一起代码化了的数)机器数所表示的数值本身,称为真值。带符号数在计算机中的表示法D7D6D5D4D3D2D1D0符号位数值位D7=0正数1负数机器数真值00011011B表示+2710011011B表示27【相关知识】D7D6D5D4D3D2D1D0符号位数值位:数的绝对值的二进制码(7位)0正数1负数[+3]原码=00000011B=03H[-3]原码=10000011B=83H[+0]原码=00000000B=00H0的表示不唯一[-0]原码=10000000B=80H[+127]原码=01111111B=7FH8位原码表示范围[127]原码=11111111B=FFH-127~+1272、原码表示法(以n=8位原码为例)│0~(2n-1-1)│n-1位最高位n位:【相关知识】n位二进制原码的表数范围:-(2n-1–1)≤S≤(2n-1-1)原码中0有两种表达方式(+0、-0)原码表示方法简单直观,但机器中原码不便于运算!真值8位原码真值16位原码+127011111117FH+327677FFFH+126011111107EH+327667FFEH......……...+20000001002H+20002H+10000000101H+10001H00000000000H00000H-01000000080H-08000H-11000000181H-18001H-21000001082H-28002H......……...-12611111110FEH-32766FFFEH-12711111111FFH-32767FFFFH-128-----------------32768-------2n-1-1-(2n-1-1)八位原码:-127~+127十六位原码:-32767~+32767【相关知识】3、补码表示法[+3]原=00000011B=03H[-3]原=10000011B=83H[+3]补=00000011B=03H[-3]补=11111101B=FDH正数的补码:与其原码相同。负数的补码:为将其原码的数值位取反加1。例1:[-46]补码=?-46=-0101110B[-46]原码=10101110B11010001B[-46]补码=11010010B=D2H例2:[-0]原码=100000001111111100000000=[+0]补码0的表示唯一8位补码表示范围:-128~+127原码与补码之间可逆转换,[[x]补]补=[x]原数值位取反末位加一数值位取反末位加一【相关知识】n位二进制补码的表数范围:(-2n-1)≤S≤(2n-1-1)(-2n-1)的补码100······000为按等效原则定义的!(无法从原码转换而来)真值8位补码真值16位补码+127011111117FH+327677FFFH+126011111107EH+327667FFEH......……...+20000001002H+20002H+10000000101H+10001H00000000000H00000H-0-0-111111111FFH-1FFFFH-211111110FEH-2FFFEH......……...-1261000001082H-327668002H-1271000000181H-327678001H-1281000000080H-327688000H-2n-12n-1-1八位补码:-128~+127十六位补码:-32768~+32767【相关知识】移码表示法•以(X+2n-1)对应的n位二进制数表示带符号数X。•则n位移码表达范围为-(
本文标题:51单片机学习05-数逻指令
链接地址:https://www.777doc.com/doc-3826461 .html