我正在写微控制器msp430的模拟器。我不能理解我应该什么时候设置进位。例如在add
指令中: 1+0x7FFF
设置进位或者1+0xFFFF
?msp430中的进位位
1
A
回答
0
对于ADD
指令,进位位设置为无符号溢出。
你可以从TI documents的例子中推断出来。特别地,ADD
指令(page 3-22)的文档中的第二个例子说,如果结果大于0xff
(以及ADD
和ADDA
极限分别为0xffff
和0xfffff
- 8,16和20位)上发生ADD.B
进位:
ADD.B #10,R5 ; Add 10 to Lowbyte of R5
JC TONI ; Carry occurred, if (R5) ≥ 246 [0Ah+0F6h]
...... ; No carry
除了进位位之外,msp430状态寄存器中还有一个NEGATIVE位确认了这一事实。
至少有一些现有的开源MSP430仿真器,即mspsim
和Avrora。我建议将它们用作参考实现。
+0
这很有道理。我认为,如果我们有负位,那么为16位数字签名的范围是-32768到32767,当我们越过这个范围时,我们设置进位位,但这是错误的。 – user3191398
0
有两条不同的指令可以实现<
,JL(如果小于则跳转)和JLO(如果低于跳转)。
JL的文件说,它
允许有符号整数的比较。
JLO的文件说,它
用于无符号数的比较。
JLO和JNC一样,因此C是无符号的进位。
相关问题
- 1. 64位OS/32位进程
- 2. 位运算,移动进位
- 3. 32位进程无法访问64位进程中的模块
- 4. 进位值
- 5. 进位值
- 6. 如何在c#中进行3位数和4位数的中位数?
- 7. Python中的分位数/中位数/二进制分组
- 8. TI MSP430中断源
- 9. 检测32位dword + dword进位/ C++
- 10. 对32位系统中的64位字进行操作
- 11. 64位进程中的AnyCPU C#DLL加载32位DLL
- 12. 进位旗问题!
- 13. PHP可变进位
- 14. 3位编码=八进制; 4位编码=十六进制; 5位编码=?
- 15. 如何从32位或64位进程启动64位PowerShell进程?
- 16. C中的逐位移位
- 17. C中的位图,二进制运算
- 18. Linux中的进程命令行64位
- 19. C中BigInteger的二进制/位操作#
- 20. 4位十进制到16位二进制转换代码
- 21. 如何使用32位进程查找64位进程信息
- 22. javascript十进制(16位低位)到十进制
- 23. GetModuleFileNameEx对32位进程从Windows 64位进程10
- 24. 如何从32位进程启动64位进程
- 25. MSP430 SPI到M25P64
- 26. MSP430 With VisualGDB _system_pre_init
- 27. 64位十进制如何存储在32位地址中?
- 28. 在64位环境中加载32位进程
- 29. 如何在32位进程中引用64位变量?
- 30. 通过COM在64位进程中使用32位DLL
17位不是16位0x7FFF + 1表示N位置位但不是进位。与0x8000 + 0x8000一样,0xFFFF + 1设置进位位。进位位是msbit的执行位。真正的问题是你在减法上做了什么,你倒置第二个操作数并进行1,但是你是否反转了执行?一些架构,你做了一些你没有。最简单的方法就是获得10美元的msp430并尝试一下。如果msbit进位和执行不同,通常会设置V标志。而n只是15位。 –
哦,对了(看我的模拟器)如果是字节操作,那么0xFF + 1,第9位出来的alu基本上是进位位,第7位是n位等等,如果是的话是一个字操作,它就像上面的0xFFFF + 1是0x0000,进位位设置为0x8000 + 0x8000。 –