汇编学习
Ydoing
这个作者很懒,什么都没留下…
展开
-
汇编语言学习系列 函数实现
以下代码示范交换a和b两个整数的函数,编译环境Ubuntu14.04(32位)假如要实现以下C代码#include void swap(int *xp, int *yp){ int x = *xp; int y = *yp; *xp = y; *yp = x;}int main(){ int a = 534, b =原创 2015-03-01 14:00:01 · 1607 阅读 · 0 评论 -
(转)详解汇编系统调用过程(以printf为例)
(转)详解汇编系统调用过程(以printf为例) 本文以printf为例,详细解析一个简单的printf调用里头,系统究竟做了什么,各寄存器究竟如何变化。环境:linux + gnu as assembler + ld linker如何在汇编调用glibc的函数?其实也很简单,根据c convention call的规则,参数反向压栈,call,然后结果保存在eax里头。注意,保存的是地址。在汇编转载 2015-03-01 13:57:43 · 4409 阅读 · 0 评论 -
汇编语言学习系列 打印数组实现
假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位)。#includeint main(){ int a[] = {3, 0, 5, 1, 4, 6, 2, 9, 8, 7}; int i; for(i = 0; i10; i++) printf("%d\n", a[i]); return 0;}原创 2015-03-01 14:01:41 · 5993 阅读 · 0 评论 -
汇编语言学习系列 递归实现
假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位)。#includeint refact(int n){ if(n == 1) return 1; else return n * refact(n - 1);}int main(){ int a = 4; printf("%d\n", re原创 2015-03-01 14:04:21 · 4265 阅读 · 2 评论 -
汇编语言学习系列 冒泡排序实现
假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位)。#includevoid swap(int *p, int *q){ int tmp = *p; *p = *q; *q = tmp;}int main(){ int a[] = {3, 0, 5, 1, 4, 6, 2, 9, 8, 7}; i原创 2015-03-01 14:04:56 · 1065 阅读 · 0 评论 -
汇编语言学习系列 for循环实现
假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位)。#includeint fact_for(int n){ int i; int result = 1; for(i = 2; i ) result *= i; return result;}int main(){ printf("%d\n",原创 2015-03-01 14:03:55 · 5992 阅读 · 0 评论 -
汇编语言程序范例
这个程序主要功能是显示CPU厂商的Vendor ID源代码如下:.section .data#x是占位符output: .ascii "The processor Vendor ID is: 'xxxxxxxxxx'\n"#_start和output都是标签.section .text#如果用gcc编译的话,_start要改为main.global _start_start:原创 2015-06-01 17:52:29 · 2004 阅读 · 0 评论 -
内联汇编使用简介
用3个实例实现将变量a和变量b相乘,得到的值存在result中.简单实例asm表示使用内联汇编, volatile表示不对内联汇编进行优化,避免造成误删.#include<stdio.h>int a = 10;int b = 20;int result;int main(){ __asm__ __volatile__( "movl a, %eax\n\t"原创 2015-06-04 10:31:48 · 1765 阅读 · 0 评论