C指针原理(2)

来源:互联网 发布:商品与条形码数据库 编辑:程序博客网 时间:2024/04/29 23:58
[plain] view plaincopyprint?
  1. .section .text  
  2.   data:  
  3.    .byte 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01#8字节  
  4. .globl main  
  5. main:  
  6.   movl $0x12345678,%edx  
  7.   bswap %edx#反转字符顺序 ,结果为0x87654321   
  8.   movl %edx,%eax  
  9.   movl $1,%ebx  
  10.   xadd %ebx,%eax#交换%eax和%ebx的值,并相加,结果放在目标位置%eax  
  11.   cmpxchg %edx,%ebx#如果目标操作数%ebx等于%eax、16位是ax,8位是al,则把源操作数%edx的值加载到%eax中、16位  
  12.   #是ax,8位是al,如果不等,则把目标操作数%ebx加到源操作数%edx加载到%eax中、16位是ax,8位是al  
  13.     
  14.     
  15.   movl $2,%edx#高位  
  16.   movl $3,%eax#低位  
  17.   cmpxchg8b data#如果%edx:%eax组成的8字节值与目标值data匹配,则把%edx:%eax组成的8字节值传送到目标内存位置  
  18.   #,否则将目标值data加载到%edx:%eax  
  19. pushad   
  20. popad  
  21. #pusha/popa 压入弹出所有16位通用寄存器  
  22. #pushad/popad 压入弹出所有32位通用寄存器   
  23. #pushf/popf 压入弹出EFLAGS寄存器的低16位  
  24. #pushf/popf 压入弹出EFLAGS寄存器的全部32位  
  25.     

AT&T汇编关于地址和取地址操作的示例代码如下:

[plain] view plaincopyprint?
  1. .section .data  
  2.    mynum:  
  3.    .int 8  
  4.    mygs:  
  5.    .asciz "%x----%x----%x\n"  
  6. .section .text  
  7.    .globl main  
  8.    main:  
  9.       leal mynum,%eax #将mynum地址复制到%eax    
  10.       movl (%eax),%ebx#将%eax内地址所指内容复制到%ebx  
  11.       movl mynum,%ecx#将mynum内容复制到%ecx中  
  12.         
  13.       push %ecx  
  14.       push %ebx  
  15.       push %eax  
  16.       push $mygs  
  17.       call printf  
  18.         
  19.       push $0  
  20.       call exit  
  21.         


乘法和除法操作如下:

[plain] view plaincopyprint?
  1. .section .data  
  2.   
  3. .section .text  
  4.   
  5.   .globl main  
  6.   
  7.   main:  
  8.   
  9.     movl $2,%eax  
  10.   
  11.     movl $5,%ebx  
  12.   
  13.     mul  %ebx#%eax*%ebx->%eax,无符号乘法  
  14.   
  15.     movl $-2,%eax  
  16.   
  17.     movl  $5,%ebx  
  18.   
  19.     imul  %ebx#%eax*%ebx->%eax,有符号乘法   
  20.   
  21.  #除法使用dev和idev(有符号)  
转自:http://blog.csdn.net/myhaspl/article/details/14139591