加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

深入iOS系统底层之程序中的汇编代码

发布时间:2019-06-01 04:53:39 所属栏目:业界 来源:欧阳大哥2013
导读:合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。--(老子道德经 ) 对付一个闭源体系来说假如想研究某些逻辑的内部实现就必要对汇编说话举办把握和相识、对付某些必要高机能实现的逻辑来说用汇编说话实现大噶?鲱好的选择、对付某些逻辑来说也许只

体系的非凡寄存器的值输出给高级说话的变量

  1. //打印当前指令的地点以及当前列程ID 
  2. void foo() 
  3.     unsigned long pc = 0; 
  4.     unsigned long threadid = 0; 
  5.       
  6. #if __arm64__ 
  7.       //arm64限定了直接读写PC寄存器的方法,而是窜改相对偏移 
  8.       //TPIDRRO_EL0是指内核中的线程ID,用专门的指令mrs来读取 
  9.       __asm__( 
  10.               "adr x0, #0n" 
  11.               "stur x0, %0n" 
  12.               "mrs %1,TPIDRRO_EL0n" 
  13.               :"=m"(pc),"=r"(threadid) 
  14.               ); 
  15.       
  16. #elif __x86_64__ 
  17.     //x86系统的CPU没有专门的寄存器生涯线程ID 
  18.     __asm__( 
  19.             "leaq (%%rip), %%rdin" 
  20.             "movq %%rdi, %0n" 
  21.             :"=m"(pc) 
  22.             ); 
  23. #else 
  24.     NSAssert(0, @"oops!"); 
  25. #endif 
  26.       
  27.      
  28.     NSLog(@"pc=%ld, threadid=%ld",pc, threadid); 
  29.       

无锁多线程变量会见假设措施中界说了两个变量x和y,此刻A线程认真读取这两个变量的值举办处理赏罚,而B线程则认真写入这两个变量的最新值,这两个变量具有关接洽,必需同时写入和读取。假如是用高级说话来实现为了担保同步则必要在两个线程的读写两个变量的处所举办加锁处理赏罚。而在arm系统布局下则可以借助ldp,stp两个条指令来实现指令级别上的原子操纵,由于无需加锁从而到达最佳的机能。

  1. //假设x,y变量生涯在全局变量critical数组中。 
  2. long critical[2]; 
  3.  
  4. void read(long *px, long *py) 
  5. #if __arm64__ 
  6.     __asm__( 
  7.             "ldp x9, x10, %2n" 
  8.             "stur x9,%0n" 
  9.             "stur x10,%1n" 
  10.             :"=m"(*px),"=m"(*py):"m"(critical) 
  11.            );   
  12. #else 
  13.     //其他系统布局在读取时必必要加锁处理赏罚。 
  14.     *px = critical[0]; 
  15.     *py = critical[1]; 
  16. #endif 
  17.  
  18. void write(long x, long y) 
  19. #if __arm64__ 
  20.     __asm__( 
  21.             "stp %1, %2, %0":"=m"(critical):"r"(x),"r"(y) 
  22.            ); 
  23. #else 
  24.     //其他系统布局在写入两个变量时必必要加锁处理赏罚。 
  25.     critical[0] = x; 
  26.     critical[1] = y; 
  27. #endif 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读