片机学习05-数逻指令.ppt_第1页
片机学习05-数逻指令.ppt_第2页
片机学习05-数逻指令.ppt_第3页
片机学习05-数逻指令.ppt_第4页
片机学习05-数逻指令.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,作业一 :(讲评) 补充:如下程序段,请在指令左边写出各机器指令代码,在各操作数下方注明其寻址方式,分析每条指令执行后的结果以及最终A、B、R1、R5、(3AH)、(3BH)等单元的内容。 79 3A MOV R1 , #3AH ;R1=3AH 74 48 MOV A , #48H ;A = 48H A7 E0 MOV R1 , ACC ;(3AH)=48H 85 3A F0 MOV B , 3AH ; B = 48H 75 3A 5C MOV 3AH , #5CH ;(3AH)=5CH 87 3B MOV 3BH , R1 ;(3BH)=5CH AD F0 MOV R5 , 0F0H ; R5 = 48H 77 7D MOV R1 , #7DH ;(3AH)=7DH 85 3B E0 MOV 0E0H , 3BH ; A = 5CH,寄存器寻址 立即寻址 寄存器寻址 立即寻址 寄存器间接寻址 直接寻址 直接寻址 直接寻址 直接寻址 立即寻址 直接寻址 寄存器间接寻址 寄存器寻址 直接寻址 寄存器间接寻址 立即寻址 直接寻址 直接寻址,答:执行上述程序段后 A=5CH,B=48H,R1=3AH,R5=48H,(3AH)=7DH,(3BH)=5CH。,3程序状态字寄存器PSW (标志寄存器) 记存CPU执行算术运算及某些操作的一些特征标志信息,以备后用,SFR名+位次:PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0,字节地址+位次:0D0H.7 0D0H.6 0D0H.5 0D0H.4 0D0H.3 0D0H.2 0D0H.1 0D0H.0,位地址: D7H D6H D5H D4H D3H D2H D1H D0H,SFR名,字节地址,位名称,位次,进 位 标 志 位,辅 助 进 位 标 志 位,溢 出 标 志 位,奇 偶 标 志 位,用 户 标 志 位,工作寄存器区 选择控制位,加减运算时 最高位向上 有进/借位 则置1,加减运算时 D3位向D4位 有进/借位 则置1 BCD数运算修正用,加减运算时 D7、D6位向上的 进/借位不同 则置1 补码运算时表征溢出,A中1的个数 为奇则置1 表征8位码的奇偶性,P.14,图2-3 PSW的格式,半 进 位 标 志 位,随时根据A的内容变化生成,不影响 标志位 C AC OV,3.4.2 算术运算类指令,积FF则0V=1,B=0则0V=1,不影响AC OV标志,结果存累加器A,Cy,Cy,TM,【例3-1】 (A)=53H,(R0)=FCH,执行指令 ADD A,R0 结果: (A)=4FH,Cy=1,Ac=0,OV=0,P=1 注意:运算中,由于位6和位7同时有进位,所以标志位OV=0。 【例3-2】 (A)= 85H,(R0)=20H,(20H)=AFH,执行指令: ADD A,R0 结果:(A)=34H,Cy=1,Ac=1,OV=1,P=1 注意:由于位7有进位,而位6无进位,所以标志位OV=1,P.38,【例3-3】 (A)=85H,(20H)=FFH,Cy=1,执行指令: ADDC A,20H 结果为:(A)=85H,Cy=1,Ac=1,OV=0,P=1 【例3-4】 (A)=56H,(R5)=67H,把它们看作为两个压缩的BCD数,进行BCD数的加法。执行指令: ADD A,R5 ;先按二进制加,得BDH DA A ;紧接着进行BCD调整,得23H且有向上进位 结果为:(A)=23H,Cy=1 (维持ADD后的Ac=1,OV=1),P=1。 可见,56+67=123,结果是正确的。 【例3-5】(A)=C9H,(R2)=54H,Cy=1,执行指令 SUBB A,R2 结果:(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位而位7无 向上借位) ,P=0,P.3840,原Cy,【例3-6】 (A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,执行指令 DEC A ;(A)-1A = 0EH DEC R7 ;(R7)-1R7 =18H DEC 30H ;(30H)-130H = FFH DEC R1 ;(R1)-1(R1) = FEH 结果为 (A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1, 不影响其他标志 【例3-7】 (A)=FBH,(B)=12H,执行指令 DIV AB 结果为 (A)=0DH,(B)=11H,Cy=0,OV=0。,P.41,【例B3-7】编程序实现R1、R2中的双字节BCD数加上R3、R4中的双字节BCD数,三字节和值存放于R5、R6、R7中。 ORG 11A0H 11A0 EA MOV A,R2 ;取被加数低字节 11A1 2C ADD A,R4 ;加上加数低字节 11A2 D4 DA A ;十进制调整 11A3 FF MOV R7,A ;存和值的低字节 11A4 E9 MOV A,R1 ;取被加数高字节 11A5 3B ADDC A,R3 ;加上加数高字节及低字节的进位 11A6 D4 DA A ;十进制调整 11A7 FE MOV R6,A ;存和值的高字节 11A8 74 00 MOV A,#00H ;被加数与加数无第三字节,设其为0 11AA 34 00 ADDC A,#00H ;加上高字节向第三字节的进位 ;无需进行十进制调整(其结果为00H或01H) 11AC FD MOV R5,A ;存和值的第三字节 11AD 80 FE SJMP $ ;自循环暂停 11AF 【练习】如果是双字节数相加结果只需双字节呢? 如果是双字节二进制数相加(不是BCD数)呢? 如果是双字节二进制数相减结果为双字节二进制数呢? 如果是单字节二进制数相加结果为双字节呢? 如果是(31H)、(30H)的双字节数加上(41H)、(40H)中的双字节数,三字节结果存放于(52H)、(51H)、(50H)中,前者为高字节,如何编程。,3.4.3 逻辑操作类指令,跟0相与的位被屏蔽(清0),跟1相或的位被置1,跟1相异或的位被求反,TM,二进制数的逻辑与运算 00=0 10=0 01=0 11=1 例: 逻辑与运算常用来将一个数据的某些位清零(屏蔽),而保持其他位不变。 【例B3-8】将30H单元的低4位清零,高4位保持不变,可用下面指令实现。 ANL 30H,#0F0H 【例3-9 】 (A)=07H,(R0)=0FDH,执行指令: ANL A,R0 结果:(A)=05H,1 0 1 1 0 0 1 1 B ) 1 1 1 1 0 0 0 0 B 1 0 1 1 0 0 0 0 B,不 变,清0(屏蔽),二进制数的逻辑或运算 0v0=0 1v0=1 0v1=1 1v1=1 例: 逻辑或运算常用来将一个数据的某些位置1,而保持其他位不变。 【例B3-9】将30H单元的低4位置1,高4位保持不变,可用下面指令实现。 ORL 30H,#0FH 【例3-10】 (P1)=05H,(A)=33H,执行指令 ORL P1,A 结果:(P1)=37H,1 0 1 0 0 0 0 1 B v) 0 0 0 0 1 1 1 1 B 1 0 1 0 1 1 1 1 B,不 变,置 1,二进制数的逻辑异或运算 0 0=0 1 0=1 0 1=1 1 1=0 例: 逻辑异或运算常用来将一个数据的某些位取反,而保持其他位不变。 【例B3-10】将A的奇数位取反而偶数位保持不变,可用下面指令实现。 XRL A,#0AAH ;(XRL A,#1010 1010B) 【例3-11】(A)=90H,(R3)=73H 执行指令: XRL A,R3 结果:(A)=E3H,1 0 1 0 1 0 0 1 B ) 1 1 1 1 0 0 0 0 B 0 1 0 1 1 0 0 1 B,求 反,不 变,移位指令操作示意图,【例B3-11】 8位二进制码算术左移(无符号数乘2): CLR C ;Cy清0 RLCA ;左移1位,低位补0,原最高位进到Cy中 【例B3-12】 8位二进制码逻辑右移(无符号数除2): CLR C ;Cy清0 RRCA ;右移1位,高位补0,原最低位移到Cy中 【思考】 DPTR(DPH、DPL)中的16位二进制码算术左移(乘2) 【思考】 DPTR(DPH、DPL)中的16位二进制码逻辑右移(除2),【思考】指出下列非法指令违背了什么样的概念或规则? ADD 20H, #10H INC R5 DEC DPTR ADDC #30H,A RLCA DEC #60H ANL 4AH, R0 ORL R0, #8AH,作业二 : P.517、8、9、10、15、16 补充:请分析下列程序段执行后有关单元的内容。 MOV A,#68H MOV R0,#40H PUSH ACC ADD A,#50H MOV R0,A MOV A,R0 INC R0 MOV R0,A POP B ORL A,40H 答:A= , R0= , B= , (40H)= , (41H)=,ANL A,R5 R3,单条指令实现,如:用一个8位二进制数表示一个有符号数:,1、机器数和真值,一个数在机器中的表示形式称为机器数。 (机器中连同符号位一起代码化了的数) 机器数所表示的数值本身,称为真值。,带符号数在计算机中的表示法,D7 D6 D5 D4 D3 D2 D1 D0,符号位,数值位,D7=,0 正数,1 负数,机器数,真值,0001 1011B,表示,+27,1001 1011B,表示,27,【相关知识】,D7 D6 D5 D4 D3 D2 D1 D0,符号位,数值位:数的绝对值的二进制码(7位),0 正数,1 负数,+3原码 = 0 000 0011B = 03H - 3原码 = 1 000 0011B = 83H +0原码 = 0 000 0000B = 00H 0的表示不唯一 - 0原码 = 1 000 0000B = 80H +127原码 = 0 111 1111B = 7FH 8位原码表示范围 127原码 = 1 111 1111B = FFH -127+127,2、原码表示法 (以 n=8 位原码为例),0( 2n-1-1),n-1位,最高位,n位:,【相关知识】,n位二进制原码的表数范围: - (2n-1 1 ) S ( 2n-1-1),原码中 0 有两种表达方式 (+0、-0) 原码表示方法简单直观,但机器中原码不便于运算!,2n-1-1,-(2n-1-1),八位原码:-127 +127,十六位原码:-32767 +32767,【相关知识】,3、补码表示法,+3原= 0000 0011B = 03H - 3原= 1000 0011B = 83H +3补= 0000 0011B = 03H - 3补= 1111 1101B = FDH,正数的补码:与其原码相同。,负数的补码:为将其原码的数值位取反加1。,例1: - 46补码 = ? - 46 = - 0 1 0 1 1 1 0 B - 46原码 = 1 0 1 0 1 1 1 0 B 1 1 0 1 0 0 0 1 B - 46补码 = 1 1 0 1 0 0 1 0 B = D2H 例2: -0原码 = 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 = + 0补码 0 的表示唯一 8位补码表示范围:-128+127 原码与补码之间可逆转换, x补 补= x原,数值位取反,末位加一,数值位取反,末位加一,【相关知识】,n位二进制补码的表数范围:( - 2n-1 ) S ( 2n-1-1),(- 2n-1)的补码 100000 为按等效原则定义的! (无法从原码转换而来),- 2n-1,2n-1-1,八位补码:-128 +127,十六位补码:-32768 +32767,【相关知识】,移码表示法,以 ( X + 2n-1 ) 对应的n位二进制数表示带符号数X。 则n位移码表达范围为 -( 2n-1 ) X +( 2n-1-1) 反之把 X移对应的二进制数减 2n-1 即得真值 移码便于比较大小(按无符号数相比较即可) 移码例1:已知 X =113 求 X 移 = 解:X + 27= 113+128=15 , 而15=0000 1111B X 移=0000 1111 移码例2: 已知 X 移 = 10100010 求X = 解: 10100010 B=162 , 而 162- 27 =162-128=34 X = +34,8位移码表示范围:-128+127,八位: X=-128 +127,0 255 (00H-FFH),128,【相关知识】,真值 8位原码 +127 0111 1111 7FH +126 0111 1110 7EH . . +2 0000 0010 02H +1 0000 0001 01H 0 0000 0000 00H -0 1000 0000 80H -1 1000 0001 81H -2 1000 0010 82H . . -126 1111 1110 FEH -127 1111 1111 FFH -128 - -,8位补码 0111 1111 7FH 0111 1110 7EH . 0000 0010 02H 0000 0001 01H 0000 0000 00H 1111 1111 FFH 1111 1110 FEH . 1000 0010 82H 1000 0001 81H 1000 0000 80H,8位移码 1111 1111 FFH 1111 1110 FEH . 1000 0010 82H 1000 0001 81H 1000 0000 80H 0111 1111 7FH 0111 1110 7EH . 0000 0010 02H 0000 0001 01H 0000 0000 00H,原码、补码、移码表示法对比 (以8位码为例),(八位移码用x+128的二进制码表示),【相关知识】,补码的数学定义: n位补码,数值位n-1位,X (X0) X补= 2n+X (X0),可用符号位为1,数值位“求反加一”实现,符号位为0,数值位不变。即与原码相同,例1: - 46补码 = ? - 46 = - 0 1 0 1 1 1 0 B - 46原码 = 1 0 1 0 1 1 1 0 B 1 1 0 1 0 0 0 1 B - 46补码 = 1 1 0 1 0 0 1 0 B = D2H,数值位取反,末位加一,1 0 0 0 0 0 0 0 0 B = 28 + - 0 0 1 0 1 1 1 0 B = - 46 1 1 0 1 0 0 1 0 B = D2H,+ 1 B = +1 1 1 1 1 1 1 1 1 B = 28-1 + - 0 0 1 0 1 1 1 0 B = - 46 1 1 0 1 0 0 1 0 B = D2H,末位加一,数值位取反,补码的加法和减法运算,加法规则:X+Y 补码 = X补码 + Y补码 减法规则:X -Y 补码 = X补码 - Y补码 = X补码 + -Y补码 补码加/减运算:不论正负、不论大小 ,连同符号位按二进制进行加/减运算,得到正确的和/差的补码。 可将减法运算用加法实现 -Y补码 为将Y补码连同符号位全部取反加1而得 原码与补码之间可逆转换, x补 补= x原 溢出:运算结果超出了允许表示的范围 补码加减运算的溢出可用 OF Cn-1Cn-2来

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论