AT&T 汇编控制执行流程及与高级语言的转换
注:以下内容为学习笔记,多数是从书本、资料中得来,只为加深印象,及日后参考。然而本人表达能力较差,写的不好。因非翻译、非转载,只好选原创,但多数乃摘抄,实为惭愧。但若能帮助一二访客,幸甚!
一.指令指针指令指针确定程序中的哪条指令是应该执行的下一条指令。它按顺序的方式处理应用程序中的指令码。
当指令指针在程序指令中移动时,EIP寄存器会递增。
程序不能直接修改指令指针。但是可以利用能够改动指令指针的指令。这些指令称为分支(branch)。
其他都使用近跳转。
软件中断是操作系统提供的,使应用程序可以使用操作系统内的函数,并且,在某些情况下,甚至可以接触底层的BIOS系统。
xx是一到三个字符的条件代码,address是要跳到的地址。
-----------------------------------------------
指令 描述
-------------------------------------
JA 大于
JAE 大于等于
JB 小于
JBE 小于等于
JE 相等
JO 溢出
JZ 为0
-----------------------------------------------
for (init-expr; test-expr; update-expr)body-statement转换成while循环:init-expr;while (test-expr) {body-statement;update-expr;}转换成do-while循环:init-expr;if (!test-expr)goto done;do {body-statement;update-expr;} while (test-expr);done:转换成go-to:init-expr;t = test-expr;if (!t)goto done;loop:body-statement;update-expr;t = test-expr;if (t)goto loop;done:示例:C语言:int fact_for(int n){int i;int result = 1;for (i = 2; i <= n; i++)result *= i;return result;}goto版:int fact_for_goto(int n){int i = 2;int result = 1;if (! (i <= n))goto done;loop:result *= i;i++;if (i <= n)goto loop;done:return result;}汇编版:# Argument: n at %ebp+8# Register: n in %ecx, i in %edx, result in %eaxmovl8(%ebp),%ecxmovl$2,%edxmovl$1,%eaxcmpl$1,%ecxjle.L14.L17:imull%edx,%eaxaddl$1,%edxcmpl%edx,%ecxjge.L17.L14: