C指针原理(2)
来源:互联网 发布:商品与条形码数据库 编辑:程序博客网 时间:2024/04/29 23:58
- .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(有符号)
- C指针原理(2)
- C指针原理(2)-AT&T汇编
- C指针原理(78)-递归(2)
- C指针原理(95)-汇编基础(2)
- C指针原理(1)
- C指针原理(3)
- C指针原理(4)
- C指针原理(5)
- C指针原理(6)
- C指针原理(8)
- C指针原理(9)
- C指针原理(10)
- C指针原理(11)
- C指针原理(12)
- c二级指针原理
- C指针原理(14)-C指针基础
- C指针原理(15)-C指针基础
- C指针原理(16)-C指针基础
- 产生随机数
- cocos2d-x触摸分发器原理
- ECMAScript5数组新增方法
- STM32芯片命名
- warning: function returns address of local variable
- C指针原理(2)
- java 和javaw 的区别
- 让世界听到你的声音---------如何快速建造一个好看的个人博客
- 各种分布式文件系统简介
- LLDB vs GDB
- 【九度】题目1349:数字在排序数组中出现的次数
- dojo SplitContainer
- Exception Counter v0.1 beta使用方法
- HTML 标准模板