C指針原理(2)

  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彙編關於地址和取地址操作的示例代碼如下:

  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.         


乘法和除法操作如下:

  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
發佈了15 篇原創文章 · 獲贊 22 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章