czzcz 2014-09-10 07:58
浏览 819

PC寄存器为什么会是负的?

最近在看一个叫Fiasco的微内核源码,遇到一个问题,请大神指点一下。如下是C/C++嵌入式的ARM汇编:

L4_INLINE void
l4_cache_op_arm_call(unsigned long op,
                     unsigned long start,
                     unsigned long end)
{
  register unsigned long _op    __asm__ ("r0") = op;
  register unsigned long _start __asm__ ("r1") = start;
  register unsigned long _end   __asm__ ("r2") = end;

  __asm__ __volatile__
    ("@ l4_cache_op_arm_call(start) \n\t"
     "mov     lr, pc                    \n\t"
     "mov     pc, %[sc]                    \n\t"
     "@ l4_cache_op_arm_call(end)   \n\t"
       :
        "=r" (_op),
        "=r" (_start),
        "=r" (_end)
       :
       [sc] "i" (L4_SYSCALL_MEM_OP),
        "0" (_op),
        "1" (_start),
        "2" (_end)
       :
        "cc", "memory", "lr"
       );
}

上面一段C/c++嵌入式汇编的大概意思是跳转到地址为L4_SYSCALL_MEM_OP的地方去执行,但是

#ifndef L4_SYSCALL_MAGIC_OFFSET
#  define L4_SYSCALL_MAGIC_OFFSET        8
#endif

#define L4_SYSCALL_MEM_OP        (-0x00000008-L4_SYSCALL_MAGIC_OFFSET)

L4_SYSCALL_MEM_OP是负值啊,这是什么情况?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 求帮我调试一下freefem代码
    • ¥15 matlab代码解决,怎么运行
    • ¥15 R语言Rstudio突然无法启动
    • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
    • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
    • ¥15 用windows做服务的同志有吗
    • ¥60 求一个简单的网页(标签-安全|关键词-上传)
    • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
    • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
    • ¥100 为什么这个恒流源电路不能恒流?