自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(266)
  • 资源 (1)
  • 收藏
  • 关注

原创 C语言与at&t汇编 (LINUX) 二 运算符

今天将介绍加减乘除,取模运算符。

2022-06-09 12:21:30 223 1

原创 C语言与at&t汇编 (LINUX) 一 基本数据类型

汇编语言对应着机器语言,也就是0和1,汇编只是让机器语言更易读。但汇编语言就是一系列的指令,并没有相应的规范来便于人们编写代码,一般人 是想到那就写到哪,代码混乱不堪。后来有人提出了过程式编程语言,这些语言定义了流程控制语句,分为顺序,循环,分支。并用函数来使程序分成一个个模块。而C语言就是其中翘楚。每句C语言都会被翻译为相应的汇编语言。不相信吗?随我进入C和汇编的世界吧、......

2022-06-08 22:01:19 183

原创 编写第一个程序

在本章中,你不仅将学习如何编写和生成linux汇编语言程序,还将学习汇编语言程序的构造以及一些汇编语言指令。在通读本章时,你可以酌情参考附录b和附录f。刚开始学习时,本章的这些程序可能会让你不知所措。但经过勤奋学习,特别是多次阅读程序及注释,你将会为未来的学习打下扎实基础。为了增强学习效果,你可以尽你所能地改进这些程序。即使你的改进并不可行,但每一次失败无疑都会对你的学习有所助益。3.1 编程初体验我们要接触的第一个程序很简单。实际上,除了退出以外,它什么都没做!这个程序尽管很短,但却展示了汇编语言和

2022-02-17 10:50:56 316

原创 《深入理解程序设计》之计算机体系结构

在学习编程时,你首先要了解计算机如何解释程序。当然,你无需拥有电子工程学位,但需要理解一些基本概念。现代计算机的体系结构都是在冯诺依曼体系结构(因其创始人而得名)的基础上发展起来的。冯诺依曼体系结构蒋计算机划分成两个主要组成部分:CPU(中央处理单元)和内存。这种架构被用在包括个人计算机,超级计算机,大型机在内所有现代计算机,甚至手机中。2.1 内存结构为理解计算机内存的结构,可以蒋计算机内存与你家附近的邮局做个比较。邮局通常有一个摆满邮政信箱的房间,计算机内存就像邮局房间里的信箱一样,每个固定大小的

2022-02-15 11:57:43 221

原创 汇编------双向循环链表

.section .rodata .LC0:.string "%d "//struct node//{// int value;// struct node *pre;// struct node *next;//}//////struct list//{// struct node nod;// int count;//}.section .text//void init(struct list *ls);init: pushl %ebp movl %esp,.

2021-03-30 12:22:57 120

原创 汇编———循环

‘’’’’’

2021-03-17 21:48:11 88

原创 对程序员来说CPU是什么

首先让我们来看一下解释和运行程序的CPU。CPU是英文Center Processing Unit(中央处理器)的缩写,相当于计算机的大脑,它的内部由数百万至数亿个晶体管构成,这是大家所熟知的。不过,对cpu的了解如果只限于此的话,对编程是没有任何帮助的。程序员还需要理解cpu是如何运行的,特别要弄清楚负责保存指令和数据的寄存器的机制。了解寄存器,也就自然而然的理解了程序的运行机制。可能有很多读者会认为cpu的运行机制比较难,其实它非常简单。所以,不妨放松心情,跟随笔者一起往下阅读吧。1·1 CPU的内

2021-03-01 18:36:38 160 3

原创 at&t汇编-----选择

.section .rodata.section .text//int max(int a,int b);max: pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax cmpl 12(%ebp),%eax jge .L1 movl 12(%ebp),%eax.L1: movl %ebp,%esp popl %ebp ret

2021-02-13 19:45:03 77

原创 at&t汇编------循环

.section .rodata .LC0:.string "%d\n".section .textprint_7: pushl %ebp movl %esp,%ebp pushl %ebx movl $1,%ebx jmp .L1.L2: movl %ebx,%eax cltd movl $7,%ecx idivl %ecx cmpl $0,%edx jne .L3 .

2021-02-13 19:22:12 286

原创 at&t汇编-----数组

.section .rodata .LC0:.string "%d ".section .text//int init(int *list,int len)init: pushl %ebp movl %esp,%ebp pushl %ebx movl $0,%ebx jmp .L3.L4: movl 8(%ebp),%eax movl $0,(%eax,%ebx,4) addl $1,%ebx.L.

2021-02-13 16:20:30 207

原创 ENIAC到EDVAC到Intel的思考

ENIAC世界上第一台通用电子计算机,可以通过插拔电缆来执行程序。冯诺依曼参考ENIAC提出了存储程序的概念,将计算机分为5个部件,运算器,控制器,存储器,输入设备,输出设备。冯诺依曼依照自己的思考,和其他人合作了EDVAC。...

2020-12-23 14:14:57 513

原创 关于分支结构与循环结构的思考

C语言中有分支结构和循环结构,他们是用机器指令完成的。那么他们是怎么实现的呢?机器指令中有cmp指令,比较两个数的大小,接着用jxx指令跳转。C语言中有分支结构和循环结构,他们是用机器指令完成的。那么他们是怎么实现的呢?机器指令中有cmp指令,比较两个数的大小,接着用jxx指令跳转。je 相等则跳转jne 不相等则跳转 jg 有符号数大于则跳转jge 有符号数大于等于则跳转jl 有符号数小于则跳转jle 有符号数小于等于则跳转ja 无符号数大于则跳转jae 无符号数大于等于则

2020-12-22 15:42:58 86

原创 汇编语言:算术运算

addl两个32位数相加。有两个操作数。源操作数和目的操作数。以addl %edx,%eax为例,%eax=%eax+%edx。无符号数的加法和有符号数的加法都可以用addl指令执行。.section .rodata .LC0:.string "%d\n".section .text.global mainmain: pushl %ebp movl %esp,%ebp movl $11,%eax movl $22,%edx add

2020-12-02 13:58:37 1099

原创 汇编语言:mov指令,寄存器,寻址

冯诺依曼计算机,将计算机分为5大部件:运算器,控制器,存储器,输入设备,输出设备。运算器和控制器共同执行指令。指令和数据一样,保存为二进制数据。运算器和控制器共同组成CPU,CPU执行机器指令,也就是二进制数。机器指令难于阅读,编写。所以人们用英语单词来表示机器语言,这种方式被称为汇编语言。用汇编语言编程就是在和立即数,寄存器,内存在打交道。寄存器有8个,EAX,EBX,ECX,EDX,EDI,ESI,EBP,ESP。内存有不同的寻址方式,下面会详细说明。movb复制字节数据。..

2020-12-02 13:00:30 2247 1

原创 linux源码解读 kernel/time.c

asmlinkage long sys_time(time_t __user * tloc){ time_t i; struct timeval tv; do_gettimeofday(&tv); i = tv.tv_sec; if (tloc) { if (put_user(i,tloc)) i = -EFAULT; } return i;}time系...

2020-03-20 17:03:49 607

原创 计算机组成原理(十二)

磁表面存储设备对存储器介质的要求大容量,低成本,可靠性非电易失性磁性存储器圆柱陶瓷上涂磁粉手工穿线,水手结消磁后重写存储原理简单工艺复杂可靠性低磁表面存储设备磁颗粒的不同偏转方向来区分不同的状态主存中有效CPU要立即访问的程序和数据辅助存储器中存放CPU不立即使用的信息,在需要时再调入内存如何保存?磁颗粒的不同磁化偏转方向如何表示?磁记录方式如何组织?...

2020-03-13 10:33:22 116

原创 计算机组成原理(十一)

高速缓冲存储器Cache块:数据交换的最小单元命中:在较高层次中发现要访问的内容命中率:命中次数/访问次数命中时间:访问在较高层次中数据的时间失效:需要在较低层次中访问块失效率:命中率失效损失:替换较高层次数据块的时间+该块交付给处理器的时间命中时间<<失效时间平均访问时间=HR*命中时间+(1-HR)*失效损失参数典型数值:块大小:4-128Byte命中时间...

2020-03-12 14:37:32 1032

原创 计算机组成原理(十)

静态存储器D型触发器静态存储器存储单元写在位线上设置使(bit=1,bit~\tilde{bit}bit~=0)使字选通读使bit和bit~\tilde{bit}bit~都充为高电平Vdd使字线选通根据触发器的状态,将使其中一条位线电平 为低放大器感知bit和 bit~\tilde{bit}bit~的变化,读出存储器的值静态存储器典型组织方式随机访问...

2020-03-10 13:57:26 144

原创 计算机组成原理(九)

主存储器的作用和连接存储正处在运行中的程序和数据(或一部分)的部件,通过地址 数据 控制三类总线与CPU与其他部件联通。地址总线用于选择主存储器的一个存储单元(字或字节),其位数决定了能够访问的存储单元的最大数目。称为最大可寻址空间。例如,当按字节寻址时,20位地址也可以访问1MB的存储空间,32位的地址可以访问4GB的存储空间...

2020-03-07 16:18:22 265

原创 计算机组成原理(八)

存储器系统计算机硬件系统存储器作用计算机用来存放程序和数据的部件,是Von Neumam结构计算机的重要组成,是计算机的中心。存储程序是计算机走向通用程序和数据的特点源程序,汇编程序,机器语言程序各种类型的数据共同点:二进制数据对存储介质的基本要求能够有两个稳定状态来表示二进制的“0”和“1”容易识别两个状态能方便的进行转换几种常见的存储方式磁颗粒,半导体(电平...

2020-03-06 16:50:11 251

原创 计算机组成原理(七)

算术运算及电路实现运算器的基本功能完成算术,逻辑运算+,-,*,/,%,&,|,~得到运算结果的状态C,Z,V,S输出,存放运算结果寄存器组,数据总线运算器的基础逻辑电路逻辑门电路完成逻辑运算加法器完成加法运算触发器保存数据多路选择器,移位器选择,联通数据通路ALU功能设计功能对操作数A,B完成算术逻辑运算ADD,AND,OR设计算...

2020-03-04 17:04:23 304

原创 计算机组成原理(六)

数据表示数据编码与表示需要在计算机中表示的对象程序,整数,浮点数,字符(串),逻辑值通过编码表示表示方式用数字电路的两个状态表示由上一层抽象计算机来识别不同的内容编码原则少量简单的基本符号一定的规则表示大量复杂的信息方便使用编码表示基本元素0,1两个基本符号字符26个字母->5位大/小写+其他符号=7bits(in 8)世界上其他语言的文字=16b...

2020-03-04 12:39:42 127

原创 计算机组成原理(五)

MIPS指令系统MIPSMicroprocessor without interlocked piped stages无内部互锁流水线的微处理器RISC芯片由John L. Hennessy设计MIPS指令格式寄存器型例如: add $1,$2,$3 R1<----R2+R3立即数型例如: lw $1,$2,100 ...

2020-03-03 12:12:16 162

原创 计算机组成原理(四)

指令和指令系统计算机系统由硬件和软件两大部分组成。硬件指由中央处理器,存储器以及外围设备等组成的实际装置。软件是为了使用计算机而编写的各种系统的和用户的程序。程序由一个序列的计算机指令组成。指令是计算机运行的最小的功能单元,是指挥计算机硬件运行的命令,是由多个二进制位组成的位串,是计算机硬件可以直接识别和执行的信息体。指令中应指明指令所完成的操作,并明确操作对象。一台计算机提供的全部指令构成...

2020-03-02 19:30:34 191

原创 计算机组成原理(三)

计算机程序及分类计算机程序程序员和计算机硬件之间交互的语言计算机程序分类高级语言汇编语言机器语言程序示例//c语言程序int main(){ int fibo[10]; int i; fibo[0]=1; fifo[1]=1; for(i=2;i<10;i++) fibo[i]=fifo[i-1]+fibo[i-2];}//机器语言6901:01...

2020-03-02 19:10:57 143

原创 计算机组成原理(二)

计算机是什么?一种高速运行的电子设备用于进行数据的算术或逻辑运算可接受输入信息根据用户要求对信息进行加工 (存储程序)输出结果(电子设备,完成算术或逻辑运算,通过存储程序式方式使它成为通用计算机)计算机的基础理论已经超过50年了。Turingshannonvon Nemumann组成计算机的关键部件也没有大的改变。CPUData PathControlerM...

2020-03-02 14:33:26 159

原创 计算机组成原理(一)

学习目的与方法先修课程数字逻辑高级语言程序设计,汇编语言程序设计后续课程操作系统,系统结构,计算机接口技术,计算机网络…编译联合课程汇编语言程序设计,编译,操作系统,计算机组成。计算机系统综合实验学习目标了解计算机的硬件组成五大组成部件掌握计算机的运行原理计算机怎样执行机器语言程序理解现代计算机中的一些核心技术流水,并行,cache,缓存提...

2020-03-02 13:28:17 151

原创 语法树

int a,b,c,d;d=(a+b)*c

2019-12-03 13:20:15 187

原创 怎样高效写汇编代码

C语言中有变量的概念,而汇编里没有。变量指定了内存中占用的字节数,对它的读写可以通过其地址来引用 ,所以我们可以像C语言一样定义数据类型,并将变量名写入汇编代码中。之后在将变量名替换为地址。举例.section .rodata .LC0:.string "%d,%d\n".text.global mainmain: pushl %ebp movl %esp,%ebp sub...

2019-12-02 11:04:55 126

原创 从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 194

原创 从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 853

原创 从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 141

原创 从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 194

原创 从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 715

原创 从C语言到汇编(二)输入输出函数

日常运行程序时,我们经常要用到输入输出函数。输入经常来自于键盘,输出经常用于屏幕。而C语言标准库提供了相应的函数scanf和printf。scanf函数和printf函数的函数原型是:int scanf(const char *format, ...);int printf(const char *format, ...);可以看出它们都是参数可变的函数。举个例子。#include ...

2019-11-19 16:56:55 375

原创 从C语言到汇编(二)类型装换

在C语言中,很多情况会进行隐式的算术类型转换。一般来说,如果二元运算符的两个操作数具有不同的类型,那么在进行运算之前先要把“较低”的类型提升为“较高”的类型。运算的结果为较高的类型。转换规则:首先,如果任何一个操作数为long double类型,则将另一个操作数转换为long double 类型。否则,如果任何一个操作数为double类型,则将另一个操作数转换为double类型。否则,如果任...

2019-11-16 10:47:07 180

原创 从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 106

原创 从C语言到汇编(二)++/--运算

相信C语言的使用者对++/–运算符不会陌生吧。又是前缀,又是后缀的++/–一定让你感到困惑吧!其实以前我也是这样的,不过在学习了汇编以后,我看了C语言生成的汇编代码,这才彻底的理解了++/–运算符。先从最简单的++运算符开始吧。int main(void){ int a=0; a++; ++a; return 0;}汇编代码.text.global mainmain...

2019-11-15 17:10:32 133

原创 从C语言到汇编(二)位运算

从C语言到汇编(二)算术运算存储程序式计算机以二进制来表示数据和指令。所以,我们可以对二进制位进行一些操作。这些操作包括了与(&),或(|),异或(^),取反(~),算术左移(<<),逻辑左移(<<),算术右移(>>),逻辑右移(>>)。与与运算01000101可以用与操作来屏蔽某些位。#i...

2019-11-14 16:41:04 243

原创 从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 194 1

linux系统调用

介绍linux系统调用,主要是0.01内核的代码

2015-10-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除