- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 从C语言到汇编(三)函数实现之局部变量
以sum函数为例int sum(int a,int b){ return a+b;}它的汇编代码.text.global sumsum: pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax addl 12(%ebp),%eax leave ret然后是main函数int main(void){ int a; int b=...
2019-11-21 10:41:29 239
原创 从C语言到汇编(三)函数实现之参数传递和函数返回值
以sum函数为例int sum(int a,int b){ return a+b;}它的汇编代码.text.global sumsum: pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax addl 12(%ebp),%eax leave ret然后是main函数int main(void){ int a; int b=...
2019-11-21 10:27:40 892
原创 从C语言到汇编(三)函数实现之栈帧
X86下C语言函数使用栈帧来实现传入参数和处理局部变量的。每个函数开始前都将执行pushl %ebpmovl %esp,%ebp结束时都将执行leaveret以sum函数为例int sum(int a,int b){ return a+b;}它的汇编代码.text.global sumsum: pushl %ebp movl %esp,%ebp movl ...
2019-11-21 09:57:41 159
原创 从C语言到汇编(三)循环语句
while语句是3种循环语句的一种。如果条件满足则不断执行。看代码。#include <stdio.h>int main(void){ int x=0; while(x*x<1000) { printf("%d\n",x*x); x++; } return 0;}看汇编代码。.section .rodata .LC0:.string "%d\n...
2019-11-20 13:33:45 244
原创 从C语言到汇编(三)if语句
if从最简单的if语句开始。#include <stdio.h>int main(void){ int a; scanf("%d",&a); if((a&1)==0) { printf("is even!"); } return 0;}最简单的if语句如上。我们将其转化为汇编。.section .rodata .LC0:.strin...
2019-11-20 12:46:49 773
原创 从C语言到汇编(二)输入输出函数
日常运行程序时,我们经常要用到输入输出函数。输入经常来自于键盘,输出经常用于屏幕。而C语言标准库提供了相应的函数scanf和printf。scanf函数和printf函数的函数原型是:int scanf(const char *format, ...);int printf(const char *format, ...);可以看出它们都是参数可变的函数。举个例子。#include ...
2019-11-19 16:56:55 399
原创 从C语言到汇编(二)类型装换
在C语言中,很多情况会进行隐式的算术类型转换。一般来说,如果二元运算符的两个操作数具有不同的类型,那么在进行运算之前先要把“较低”的类型提升为“较高”的类型。运算的结果为较高的类型。转换规则:首先,如果任何一个操作数为long double类型,则将另一个操作数转换为long double 类型。否则,如果任何一个操作数为double类型,则将另一个操作数转换为double类型。否则,如果任...
2019-11-16 10:47:07 194
原创 从C语言到汇编(二)表达式
C语言变量,常量,运算符组成表达式。在这里我写上几个重要的表达式以及其汇编代码。数字交换int main(void){ int a=1; int b=0; int tmp; tmp=a; a=b; b=tmp; return 0;}汇编代码.text.global mainmain: pushl %ebp movl %esp,%ebp subl $...
2019-11-15 17:30:02 121
原创 从C语言到汇编(二)++/--运算
相信C语言的使用者对++/–运算符不会陌生吧。又是前缀,又是后缀的++/–一定让你感到困惑吧!其实以前我也是这样的,不过在学习了汇编以后,我看了C语言生成的汇编代码,这才彻底的理解了++/–运算符。先从最简单的++运算符开始吧。int main(void){ int a=0; a++; ++a; return 0;}汇编代码.text.global mainmain...
2019-11-15 17:10:32 149
原创 从C语言到汇编(二)位运算
从C语言到汇编(二)算术运算存储程序式计算机以二进制来表示数据和指令。所以,我们可以对二进制位进行一些操作。这些操作包括了与(&),或(|),异或(^),取反(~),算术左移(<<),逻辑左移(<<),算术右移(>>),逻辑右移(>>)。与与运算01000101可以用与操作来屏蔽某些位。#i...
2019-11-14 16:41:04 261
原创 从C语言到汇编(二)算术运算
变量,常量,运算符可以构成表达式,表达式也可以构成语句。本文将详细介绍加(+),减(-),乘(*),除(/),取余(%)运算符。加#include <stdio.h>int main(void){ int a=10; int b=20; int c; c=a+b; printf("sum=%d\n",c); return 0;}sum=30c语言代码...
2019-11-14 11:45:03 211 1
原创 从C语言到汇编(一)变量
变量和常量是程序处理的两种基本数据对象。声明语句说明变量的名字及类型,也可以指定变量的初始值。变量占用了内存的一块区域,不同数据类型的变量占用的字节大小各不相同。类型字节大小char1short2int4long4char *4float4double8以上是C语言基本数据类型占用字节大小。在32位环境下。声明变量需...
2019-11-13 12:06:46 417 1
原创 EDVAC
EDVACEDVAC------第一台存储式计算机,由冯诺依曼主持建造。EDVAC满足了冯诺依曼式计算机的特点,由5大部件组成------运算器,控制器,存储器,输入设备,输出设备。物理上EDVAC有:一个分发单元,用于从控制器和内存接受指令,并分发到其他单元(控制器)一个运算单元 (运算器)使用汞延迟线的存储器单元(存储器)一个磁带记录仪(外部存储器)一个连接示波器的控制单元(输...
2019-11-08 11:11:00 3260
原创 通用计算机
通用计算机又称为存储程序式计算机。什么是程序,程序是一个由许多指令构成的东西。那么存储程序式计算机也可以认为是存储指令式计算机。什么是指令呢?指令是我们人类定义的计算机操作行为。在定义指令时需要先定义具体指令的行为。一般可以将指令分为数据传输指令,算术/逻辑操作指令,比较指令,跳转指令,函数调用/返回指令。在定义计算机需要的每条指令后,就要为每条指令编码。用0/1串编码指令。有了计算机的指令后...
2019-11-07 17:07:22 233
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人