关于89C51单片机的问题,请各位大侠帮忙指点!十分感谢!
在(PC)=0100H地址单元有条“SJMPrel”指令,若rel=55H(正数),则正向转移到0102H+0055H=0157H地址上;若rel=F6H(负数)则反向转...
在(PC)=0100H地址单元有条“SJMP rel”指令,若rel=55H(正数),则正向转移到0102H+0055H=0157H地址上;若rel=F6H(负数)则反向转移到0102H+FFF6H=00F8H地址上。在用汇编语言程序是,rel可以是一个转移目的地址的标号,由汇编程序在汇编过程中自动计算偏移地址,并且填入指令代码中;在手工汇编时,我们可用转移目的地址减转移指令所在源地址,再减转移指令字节数2得到偏移字节数rel。其中FFF6H是怎么得来的!!!!帮忙写的详细一点!十分感谢!!!
展开
1个回答
展开全部
负数是补码。
指令中F6是-10的8位补码,但是在计算时,由于PC是16位,所以要扩展为16位补码,即FFF6。以下两个是等效的:
0102H+FFF6H=00F8H
0102H-10=00F8H(注意,这里的-10是10进制,相当于-aH)
指令中F6是-10的8位补码,但是在计算时,由于PC是16位,所以要扩展为16位补码,即FFF6。以下两个是等效的:
0102H+FFF6H=00F8H
0102H-10=00F8H(注意,这里的-10是10进制,相当于-aH)
追问
你好,“由于PC是16位”是什么意思啊,80C51不是8位的吗,怎么成十六位了啊,?????再有能不能告诉我一下,假如一道题中只给出了rel=一个负数时,怎么用通用的方法计算出“SJMP rel指令”跳转到哪了啊,假设当前PC=0100H。万分感谢!
追答
8位指的是数据总线8位。
寄存器理论多少位都可以,16位寄存器分两次读写即可。
跳转至:PC+2+x,负数的x为rel的16位补码。这个问题书上有的,查看指令系统章节。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询