Mat*_*t D 0 assembly unsigned signed msp430 texas-instruments
当有时我的代码将某个值视为已签名时,我会感到非常困惑,有时它会在比较值时将其视为无符号值.代码如何知道值是有符号还是无符号?
为什么您认为汇编代码必须"知道"某个值是已签名还是未签名?
对于大多数操作,签名和使用操作的结果是相同的:
signed int a = 5;
signed int b = -6; // 0xFFFFFFFA
signed int c;
c = a + b; // results in -1 which is 0xFFFFFFFF
Run Code Online (Sandbox Code Playgroud)
和:
unsigned int a = 5;
unsigned int b = 0xFFFFFFFA;
unsigned int c;
c = a + b; // results in 0xFFFFFFFF
Run Code Online (Sandbox Code Playgroud)
一些例外是划分和比较.在这种情况下,大多数CPU对签名和未签名操作都有不同的汇编指令.这里的例子是x86汇编程序,但msp430应该是类似的:
signed int a, b;
if(a > b) { ... }
Run Code Online (Sandbox Code Playgroud)
结果是:
mov eax, [a]
cmp eax, [b]
jle elsePart ; Note the "L" in "jle"
Run Code Online (Sandbox Code Playgroud)
和:
unsigned int a, b;
if(a > b) { ... }
Run Code Online (Sandbox Code Playgroud)
结果是:
mov eax, [a]
cmp eax, [b]
jbe elsePart ; Note the "B" in "jbe"
Run Code Online (Sandbox Code Playgroud)