![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
汇编语言
文章平均质量分 62
河里一只虾
这个作者很懒,什么都没留下…
展开
-
汇编语言跳转翻译为c语言if else语句
将条件表达式和语句从c语言翻译成机器代码,最常用的方式是结合有条件和无条件跳转(这里只讨论有条件跳转)对于大多数情况 汇编代码就是c语言的直接翻译先看一个例子 c语言的if else 语句由goto完成原创 2017-09-03 00:52:02 · 1598 阅读 · 0 评论 -
汇编语言——访问条件码
条件码的三种使用方法条件码通常不会直接读取,有三种使用方法:(1)根据条件码的某个有意义的组合或者逻辑操作后的结果将某个字节设置为0或者1(2)跳转指令可以以条件码为条件进行跳转(3)可以有条件的传送数据第一种情况有一类指令为set指令:这类指令的区别在于条件码的逻辑操作的不同指令 同义名 效果 设置条件sete D setzD 相等/零se原创 2017-08-31 17:49:48 · 2750 阅读 · 0 评论 -
转移控制
过程调用和返回指令AT&T指令描述call label过程调用call *operand过程调用leave为返回准备栈ret从过程调用中返回call指令语法类似jmp指令分为直接调用和间接调用直接调用使用标号间接调用*后加操作指示符翻译 2017-09-10 00:25:16 · 427 阅读 · 0 评论 -
帧栈结构——32位汇编
在汇编中数据传递,局部变量的分配和释放通过操纵程序栈来实现IA32程序用程序栈来支持过程调用。也就是说将过程的各种数据以栈的形式保存 数据的取用单独放在数据栈 机器用栈来传递过程参数、存储返回信息(返回值)、保存寄存器用于以后恢复(调用过程在调用被调过程前各个寄存器的状态)以及本地存储为单个 过程分配的那部分称为栈帧,下面是帧栈的通用结构翻译 2017-09-09 22:09:23 · 1911 阅读 · 0 评论 -
汇编语言——条件码 CF ZF SF OF
除整数寄存器外,CPU还维护着一组单个位的条件码寄存器这些寄存器保存着最近算术或者逻辑操作所产生的一些效果 列如:逻辑操作的1 或者0 有符号数的结果是否溢出 等CF(carry flag):进位标志 描述了最近操作是否发生了进位(可以检查无符号操作是否溢出)ZF(zero flag):零标志 最近操作结果为0(列如 逻辑操作 等)SF(sign flag):符号标原创 2017-08-31 17:44:50 · 15777 阅读 · 0 评论 -
条件传送指令
实现条件操作的一般逻辑思维应是利用控制的条件转移,即c语言中三目操作符类似 (x>y?x:y)当条件满足时选择一条路径执行 当条件不满足时则选择另一条路径执行但是计算机的思维同人类不同也就是说若使用控制的条件转移在现代处理器上,它可能会非常低数据的条件的转移 是一种替代的策略,条件传送指令 虽然它的使用充满了限制这些指令会根据条件码的值,选择要么什么都不做要么将原创 2017-09-08 22:15:22 · 3319 阅读 · 0 评论 -
数据对齐
计算机系统对基本数据类型合法地址做出了一些限制,要求某种类型对象的地址必须是某个值K(2, 4, 8)的倍数。这种对齐限制简化了处理器和存储器系统之间的接口的硬件设计处理器一次从内存中读取2或4或8个字节的数据,而如果地址并不是k的倍数则处理器可能需要执行两次访问操作其实无论数据是否对齐都能正常工作,但是数据对齐可以提高存储器性能扩展:有些多媒体操作指令要求存储器地址必须对齐,因此原创 2017-09-15 23:08:32 · 204 阅读 · 0 评论 -
32b汇编——数组分配和访问
c语言中对数组的声明方式如下:数据类型L、整型常数NT A[N];表示在内存中分配N*L字节的连续区域,L是数据类型T的大小,表示起止位置,范围为0—N-1:数组元素索引i的位置为+L*i IA32的存储器引用指令可以简化对数组的访问:%edx表示为,%ecx表示为iMovl (%edx, %ecx, 4), %eaxc语言允许对指针进行运算,计算出来的值会根据该指针翻译 2017-09-14 22:36:42 · 2204 阅读 · 0 评论 -
32位汇编——c语言循环do——while
c语言中提供多种循环结构,即do-while while for,汇编中没有响应指令提供这三种循环但是可以使用条件测试和跳转进行组合起来 以实现上述三种循环效果,大多数汇编会根据一个循环的do-while来产生代码,但是实际c代码中相对较少用到这种循环,这时其它的循环会转化为do-while形式,然后在编译为机器代码dobody-statementwhile (test-原创 2017-09-03 22:16:57 · 955 阅读 · 0 评论 -
跳转指令及其编码
程序按照顺序执行指令 而c语言中控制流程有顺序,分支,循环三种汇编中跳转指令会导致执行切换到程序中一个全新的位置,也就是说跳转可以产生c语言的分支和循环两种 一个 为跳转后一部分不在执行 或者再跳转回去再次执行在汇编代码中,这些跳转的目的地通常用一个标号指明movl $0,%eaxjmp .L1movl (%eax), %edx.L1popl %edx原创 2017-09-02 01:03:56 · 2906 阅读 · 0 评论