- .section .text
- data:
- .byte 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01#8字節
- .globl main
- main:
- movl $0x12345678,%edx
- bswap %edx#反轉字符順序 ,結果爲0x87654321
- movl %edx,%eax
- movl $1,%ebx
- xadd %ebx,%eax#交換%eax和%ebx的值,並相加,結果放在目標位置%eax
- cmpxchg %edx,%ebx#如果目標操作數%ebx等於%eax、16位是ax,8位是al,則把源操作數%edx的值加載到%eax中、16位
- #是ax,8位是al,如果不等,則把目標操作數%ebx加到源操作數%edx加載到%eax中、16位是ax,8位是al
- movl $2,%edx#高位
- movl $3,%eax#低位
- cmpxchg8b data#如果%edx:%eax組成的8字節值與目標值data匹配,則把%edx:%eax組成的8字節值傳送到目標內存位置
- #,否則將目標值data加載到%edx:%eax
- pushad
- popad
- #pusha/popa 壓入彈出所有16位通用寄存器
- #pushad/popad 壓入彈出所有32位通用寄存器
- #pushf/popf 壓入彈出EFLAGS寄存器的低16位
- #pushf/popf 壓入彈出EFLAGS寄存器的全部32位
AT&T彙編關於地址和取地址操作的示例代碼如下:
- .section .data
- mynum:
- .int 8
- mygs:
- .asciz "%x----%x----%x\n"
- .section .text
- .globl main
- main:
- leal mynum,%eax #將mynum地址複製到%eax
- movl (%eax),%ebx#將%eax內地址所指內容複製到%ebx
- movl mynum,%ecx#將mynum內容複製到%ecx中
- push %ecx
- push %ebx
- push %eax
- push $mygs
- call printf
- push $0
- call exit
乘法和除法操作如下:
- .section .data
- .section .text
- .globl main
- main:
- movl $2,%eax
- movl $5,%ebx
- mul %ebx#%eax*%ebx->%eax,無符號乘法
- movl $-2,%eax
- movl $5,%ebx
- imul %ebx#%eax*%ebx->%eax,有符號乘法
- #除法使用dev和idev(有符號)