数据寄存器

如何在Linux下写汇编

对着背影说爱祢 提交于 2020-01-26 03:37:40
本文为翻译文章,原文参见: http://docs.cs.up.ac.za/programming/asm/derick_tut/ 1.NASM编译器 目前Linux下的汇编器主要有:as、as86和gas,但是本文使用的是NASM(The Netwide Assembler)。它使用Intel形式的汇编格式,和Intel形式相对的是AT&T形式的汇编格式。 2.Linux下汇编介绍 2.1DOS和Linux下汇编的主要不同 (1)DOS下的汇编,主要通过 int 21h 中断来实现各种DOS功能调用,而BIOS调用则是主要通过 int 10h 和 int 16h 中断来实现。但是在Linux中, 所有以上的功能调用都是通过内核来实现的。因此所有的功能都是通过“系统调用”来实现,而我们可以通过使用 int 80h 中断来实现系统调用。其中,Linux大约有190个左右的系统调用,比DOS下的要少。 (2)Linux是一个真正32位保护模式的操作系统,因此我们使用的是32为的汇编程序。32位汇编程序运行我们使用全部的内存(4G),这意味着我们不用在考虑段基址了,也不用在修改和操作段寄存器了,从某种程度上来说,变的更容易了。 (3)在32为汇编程序中,我们可以使用32位的寄存器 EAX、EBX、ECX等代替传统的16位寄存器 AX、BX、CX等寄存器。 2.2Linux下汇编的编写

一步步学习汇编系列(7)

夙愿已清 提交于 2020-01-24 21:45:29
寄存器(内存访问) 从访问内存的角度继续学习几个寄存器 首先理解几个要点: 1. 内存中字的存储 n 在 0 地址处开始存放 20000 : n 0 号单元是低地址单元, 1 号单元是高地址单元。 备注:任何两个地址连续的内存单元, N 号单元和 N+1 号单元,可以将它们看成两个内存单元 ,也可以看成一个地址为 N 的字单元中的高位字节单元和低位字节单元。 2. DS 和 [address] n CPU 要读取一个内存单元的时候,必须先给出这个内存单元的地址; n 在 8086PC 中,内存地址由段地址和偏移地址组成。 n 8086CPU 中有一个 DS 寄存器,通常用来存放要访问的数据的段地址。 n 例如:我们要读取 10000H 单元的内容可以用如下程序段进行: mov bx,1000H mov ds,bx mov al,[0] n 上面三条指令将 10000H ( 1000:0 )中的数据读到 al 中。 mov 指令的格式: mov 寄存器名,内存单元地址 “[…]” 表示一个内存单元, “[…]” 中的 0 表示内存单元的偏移地址。 那么内存单元的段地址是多少呢?就是上面的 ds 备注: 8086CPU 不支持将数据直接送入段寄存器的操作, ds 是一个段寄存器。 (硬件设计的问题) mov ds,1000H 是非法的。 数据-一般的寄存器-段寄存器 明白了以上原理

计算机系统之一计算机系统漫游

ぐ巨炮叔叔 提交于 2020-01-24 14:47:40
作为一个程序员,如果深入了解这些组件是如何工作的,以及这些组件是如何影响程序的正确性和性能的,以此来提高自己的技能,可以推荐<深入理解计算机系统>这本书,本系列也是作者在参读了这本书后的一些个人理解和对概念的认识,也可以当做我的个人笔记,希望对你有所帮助 代码无国界 计算机系统是由硬件和软件组成的 ,他们共同工作来运行应用程序.虽然系统的具体实现方式随着时间的变化而变化,但是系统内在的概念却没有改变.所有的计算机系统否有类似的硬件和软件组件,而且都执行这相似的功能. 1 #include <stdio.h> 2 int main () { 3 printf("hello world"); 4 } 这是一段c语言的源程序(源文件),在这里命名为hello.c 源程序实际上就是由值0和1组成的位(bit)序列,8个位被组织成一组,成为字节. 而每个字节表示程序中某个文本字符 大部分的现代系统都使用 ASCII 标准来表示文本字符,这中方式实际上就是用一个唯一的单字节大小的整数值来表示每个字符, 作为一个Java程序员每天接触最多的就是UTF-8 ,一开始也会迷糊,为了更好的理解他们之间的关系,推荐几篇博客: ASCII、Unicode、GBK和UTF-8字符编码的区别联系 ASCII,Unicode和UTF-8 hello.c程序以字节的方式存储在文件中.每个字节都有一个整数值

x86对抗栈回溯检测

社会主义新天地 提交于 2020-01-24 05:40:27
1.原理 函数调用 CALL 指令可拆分为两步操作: 1)、 将调用者的下一条指令( EIP )的地址压栈 2)、 跳转至将要调用的函数地址中(相对偏移或绝对地址) 那么在执行到子函数首地址位置时,返回地址(即调用函数中调用位置下一条指令的地址)就已经存在于堆栈中了,并且是 ESP 指向地址的值。下面通过栈帧的概念,了解编译器在接下来对堆栈进行的操作。 简言之,栈帧就是利用 EBP (栈帧指针,请注意不是 ESP )寄存器访问栈内部局部变量、参数、函数返回地址等的手段。程序运行中, ESP 寄存器的值随时变化,访问栈中函数的局部变量、参数时,若以 ESP 值为基准编写程序会十分困难,并且也很难使 CPU 引用到正确的地址。 所以,调用某函数时,先要把用作基准点(函数起始地址)的 ESP 值保存到 EBP ,并维持在函数内部。这样,无论 ESP 的值如何变化,以 EBP 的值为基准能够安全访问到相关函数的局部变量、参数、返回地址,这就是 EBP 寄存器作为栈帧指针的作用。 在函数体代码的任何位置,EBP 寄存器指向的地址始终存储属于它的调用函数的 EBP 的值,根据这个原理可逐级向调用函数、调用函数的调用函数进行遍历,向上回溯。 这样有什么用呢? 在将属于调用函数的 EBP 的值压栈之前, ESP 指向的地址存储的是由 CALL 指令压栈的调用函数中调用位置的下一条指令的地址(原

十一、S3C2440 裸机 — GPIO

跟風遠走 提交于 2020-01-24 05:37:22
11.1 GPIO 介绍 11.1.1 GPIO 管脚 GPIO 即是输入输出端口,S3C2440A 包含了 130 个多功能输入/输出口引脚并且它们为如下显示的八个端口: 端口 A(GPA):25 位输出端口 端口 B(GPB):11 位输入/输出端口 端口 C(GPC):16 位输入/输出端口 端口 D(GPD):16 位输入/输出端口 端口 E(GPE):16 位输入/输出端口 端口 F(GPF):8 位输入/输出端口 端口 G(GPG):16 位输入/输出端口 端口 H(GPH):9 位输入/输出端口 端口 J(GPJ):13 位输入/输出端口 GPIO 的功能即是用于 CPU 采集外设信号(INPUT),CPU 输出控制信号(OUTPUT),还有一种功能称为管脚复用功能,即是 GPIO 用于其他信号功能,比如地址,串口等共呢个,GPIO 属于 SOC 的内部外设。 GPIO 的使用需要寄存器配置。 11.1.2 GPIO 寄存器 端口配置寄存器:GPACON --- GPJCON,即配置输入或是输出,还是配置为第三功能 端口数据寄存器:GPADAT---GPJDAT,用于数据的写入或读取 端口上拉寄存器:GPBUP---GPJUP,端口上拉寄存器控制每个端口组的使能/禁止上拉电阻。 当相应位为 0 时使能引脚的上拉电阻。当为 1 时禁止上拉电阻。 如果使能了上拉电阻

Linux源码学习三、vmlinux.lds.S、MRC/MCR协处理器寄存器指令和head.S文件分析

微笑、不失礼 提交于 2020-01-24 02:59:01
①vmlinux.lds.S文件在目录arch/arm/kernel/vmlinux.lds.S下 分析VMLINUX_SYMBOL(__proc_info_begin) = .; vmlinux.lds.S文件 的内容为: #include <asm-generic/vmlinux.lds.h> #include <asm/thread_info.h> #include <asm/memory.h> #include <asm/page.h> 分别表示include文件夹里的<>目录下的内容。 #define PROC_INFO \ VMLINUX_SYMBOL(__proc_info_begin) = .; \ *(.proc.info.init) \ VMLINUX_SYMBOL(__proc_info_end) = .; \表示连接符,一个句子太长分开连接的意思,相当于: 相当于 PROC_INFO 代表后面一长串,包含后面的分号。 VMLINUX_SYMBOL(__proc_info_begin) = .; 因为 vmlinux.lds.S文件 引入: #include <asm-generic/vmlinux.lds.h> ,在 目录include/asm-generic/vmlinux.lds.h头 文件中有部分内容为: #ifndef SYMBOL_PREFIX

计算机组成原理学习1笔记1

别等时光非礼了梦想. 提交于 2020-01-22 23:52:36
计算机系统简介 硬件体系 讲授内容:计算机、组织(组成:计算机硬件系统的逻辑实现 ——数字电路、数字逻辑)、原理(不依托机器) 基本内容 基本部件的结构与组织方式 基本运算的操作原理 基本部件与基本单元的设计思想,如何将部件连接起来 特色 计算机组成的一般原理,不易具体机型为依托 采用自顶而下的方式、层层细化 教材:唐硕飞 - 计算机组成原理(第二版),学习指导与习题解答 参考教材: Patterson\Hennessy- 计算机组成与设计:硬 / 软件接口;数字设计和计算机体系结构(共有两部分,实现处理器) 计算机组成原理是连接软硬件的中间层 课程组织 1、概论 2、 计算机系统硬件结构 存储器、 IO 、 CPU 、系统总线 3、CPU ( ALU 、 CU 、寄存器) 4、CU (排队逻辑、寄存器解码器、控制存储器) 第一章 计算机系统概论 物联网:将传感器嵌入到各设备之中,并且被普遍连接,即 “物联网”, + “互联网” = 人类社会与物理系统的整合。 超算:HPC(higher performance computer) TF(千万亿次) 1.1计算机软硬件概念     计算机系统:硬件(实体)、软件(具有各类特殊功能的信息组成)   层次结构——软件:系统软件(管理整个计算机系统;语言处理程序,操作系统,服务性程序(数学库),数据库管理系统)、应用软件

操作系统导论读书笔记—虚拟化CPU之调度

那年仲夏 提交于 2020-01-22 16:11:09
虚拟化CPU之调度 1. 底层机制 1.1 用户模式与内核模式 1.1.1 系统调用 1.1.2 用户态与内核态切换过程 1.2 进程间切换 1.2.1 协作方式:等待系统调用 1.2.2 非协作方式:操作系统控制 1.2.3 保存和恢复上下文 1.2.4 时间中断进程切换 2. 调度策略 2.1 进程调度的相关概念 2.1.1 调度的性能指标 2.1.2 IO消耗型和CPU消耗型进程 2.1.3 进程优先级 2.1.4 时间片 2.2 几种基本调度算法 2.2.1 先入先出FIFO 2.2.2 最短任务优先SJF 2.2.3 最短完成时间优先STCF 2.2.4 轮转调度RR 2.2.5 总结对比 2.3 经典调度算法 2.3.1 多级反馈队列MLFQ 2.3.2 比例份额调度 2.4 多处理器调度 2.4.1 多处理器的特性 2.4.2 单队列调度 2.4.3 多队列调度 2.4.4 linux多处理器调度 1. 底层机制 操作采用时分共享CPU的方式实现虚拟化CPU。在实现虚拟化的同时,我们要保证整体性能且不失去CPU的控制权。 1.1 用户模式与内核模式 为了防止某个任务抢夺所有资源或者影响其它任务的运行,我们需要限制进程的操作,保证操作系统的控制权。 在用户模式下,应用程序不能完全访问硬件资源。在内核模式下,操作系统可以访问机器的全部资源。并提供了内核态与用户态的切换方式

主存管理

送分小仙女□ 提交于 2020-01-22 08:38:51
1 概念 存储器 storage, memmory 能接收数据和保存数据、而且能根据命令提供这些数据的装置。 存储器分成两类: 内存储器(简称内存、主存、物理存储器) 处理机能直接访问的存储器。用来存放系统和用户的程序和数据,其特点是存取速度快,存储方式是以新换旧,断电信息丢失。 外存储器(简称外存、辅助存储器) 处理机不能直接访问的存储器。用来存放用户的各种信息,存取速度相对内存而言要慢得多,但它可用来长期保存用户信息。在文件系统中介绍。 1.内存的物理组织 物理地址: 把内存分成若干个大小相等的存储单元,每个单元给一个编号,这个编号称为内存地址(物理地址、绝对地址、实地址),存储单元占8位,称作字节(byte)。 物理地址空间: 物理地址的集合称为物理地址空间(主存地址空间),它是一个一维的线性空间。 2.程序的逻辑结构 程序地址:用户编程序时所用的地址(或称逻辑地址 、虚地址 ),基本单位可与内存的基本单位相同,也可以不相同。 程序地址空间(逻辑地址空间、虚地址空间):用户的程序地址的集合称为逻辑地址空间,它的编址总是从0开始的,可以是一维线性空间,也可以是多维空间。 2存储管理的功能 1.存储管理功能 地址映射 将程序地址空间中使用的逻辑地址变换成主存中的地址的过程 (2) 主存分配 按照一定的算法把某一空闲的主存区分配给作业或进程。 (3) 存储保护 保证用户程序

程序执行的过程 - 一文看懂计算机执行程序的过程

旧街凉风 提交于 2020-01-20 13:15:53
程序就是指令的集合,为使计算机按预定要求工作,首先要编制程序。程序是一个特定的指令序列,它告诉计算机要做哪些事,按什么步骤去做。指令是一组二进制信息的代码,用来表示计算机所能完成的基本操作。   1、程序   程序是为求解某个特定问题而设计的指令序列。程序中的每条指令规定机器完成一组基本操作。如果把计算机完成一次任务的过程比作乐队的一次演奏,那么控制器就好比是一位指挥,计算机的其它功能部件就好比是各种乐器与演员,而程序就好像是乐谱。计算机的工作过程就是执行程序的过程,或者说,控制器是根据程序的规定对计算机实施控制的。例如,对于算式      计算机的解题步骤可作如下安排:   步骤1:取a ;   步骤2:取b ;   步骤3:判断 ;   若 b≥0,执行步骤4   若b<0,执行步骤6   步骤4:执行a+b;   步骤5:转步骤7;   步骤6:执行a-b;   步骤7:结束。   计算机的工作过程可归结为:取指令→分析指令→执行指令→再取下一条指令,直到程序结束的反复循环过程。通常把其中的一次循环称为计算机的一个指令周期。总之,我们可把程序对计算机的控制归结为每个指令周期中指令对计算机的控制。   2、指令   程序是由指令组成的。指令是机器所能识别的一组编制成特定格式的代码串,它要求机器在一个规定的时间段(指令周期)内,完成一组特定的操作