学习汇编语言的笔记(一)

计算机执行的是二进制的机器语言,所以最初的程序代码,都是些二进制数字,为解决编程的低效,产生了汇编语言和更高级的语言。汇编语言需要程序员写出,按照计算机执行顺序的每一条指令,这就要求程序员像计算机一样思考。这也是为什么汇编语言和某些高级语言会被称为“面向过程”编程语言的原因。这相当低效。


通常高级语言通过编译程序编译成汇编语言,然后汇编语言在编译成二进制的可执行文件;当然很多编译器可以直接生成二进制文件,这样就省掉了生成汇编语言这一步。最终,计算机就可以读取这些二进制文件,并最终执行。这里需要注意的是,不同处理器的机器二进制机器语言是不同的,比如分别采用CISC指令集和RISC指令集的两台机器,它们的二进制执行程序的二进制码就是不同的。操作系统(OS)会封装I/O操作,内存分配和其它低级的系统功能,从而使应用程序无需在这些细节上分心。架构(architecure)会为应用程序和操作系统的基本指令集(二进制),提供面对硬件的接口,称为二进制接口(ABI application binary interface)。整个计算机体系,从硬件到软件,都是通过这样不断为上层提供接口,并对下层实现抽象封装来实现。

某个程序执行需要的时钟周期数可以这样计算:总CPU时钟周期数=程序的指令数 X 每条指令的平均时钟周期数。CPI(clock cycles per instrution)表示在使用相同指令集时,执行每条指令所需的时钟周期数的平均值。程序的CPU时间=指令数 X CPI X时钟周期时间,以此来考察程序的性能高低,要注意的是,执行指令数最少的程序其执行速度未必最快,因为可能它的CPI也更高


计算机硬件不管有多少,最终是要实现如下功能:输入数据、存储数据、处理数据、输出数据。组成计算机的五个典型部件是:输入/输出(I/O)、存储器(内、外存)、运算器和控制器(CPU)。一个典型的计算机处理流程:处理器从存储器(内存)中得到指令和数据,通过控制器向运算器、存储器、输入和输出部件发出命令,输入部件将数据写入存储器,输出部件则从内存中读出数据。

主存储器(main memory)主要指内存DRAM,属于易失性存储器,相对的,非易失性存储器有两种:次存储器(secondary memory)主要指硬盘等;闪存(flash memory)的读写速度比内存低,但比磁盘快许多;闪存唯一的缺点是写寿命太短,只能写几百万次就报废了。内存(memory)属于DRAM,动态随机访问存储器,其内容不能长期保存,需要不断加电,以维持其保存的内容,所以每次关机后,内存中的内容就丢失了;处理器内部的高速缓存(cache memory)属于SRAM,静态随机访问存储器,其内容可以长期保存。


一个数的补码被定义为该数的反码+1。为什么正数的补码=它的负数;而负数的补码=它的绝对值呢?因为X+反X==111111111(假设x为一个字节);而11111111在有符号数中=-1,这样X+反X+1==0,所以反X+1=-X。因为补码被定义为反X+1结论就是:正数的补码=它的负数;而负数的补码=它的绝对值


既然存在嵌套调用,那么不存在对其它过程调用的过程就被称为叶子过程(leaf procedure),这大概是引用了树的概念






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值