汇编指令

多么痛的领悟——计算机组成原理第一讲

十年热恋 提交于 2020-02-07 11:01:53
多么痛的领悟——计算机组成原理第一讲 前言 大家好,我是 泰斗贤若如 ,我又开始更新文章了,本次更新的内容是 计算机组成原理 ,是大学计算机相关专业必须学的,我是大三上学期学的,刚开始学的时候感觉很难,get不到重点,直到学了一遍,被期末考试逼了一遍,我才有所领悟,多么痛的领悟啊。我打算自己把整本书中的重点总结一遍,第一是自己过一遍,第二是给新手赠予玫瑰,希望你们学的时候花最少的时间学更多的知识,别再在考试前病急乱投医了(偷笑表情) 一、计算机系统 1、计算机的硬件 计算机系统由“ 硬件 ”和“ 软件 ”两大部分组成。 所谓“ 硬件 ”,是指组成计算机的各种物理装置,我们平时说的“买一台计算机”,购买的其实就是硬件,最主要的硬件有:主板、中央处理器、硬盘、内存等。 主板 是整个计算机的“ 交通枢纽 ”,各种器件都要连接到主板上,才能正常工作。 中央处理器 是计算机的“ 大脑 ”,它是计算机的 运算核心 和 控制核心 。 硬盘 是计算机的“ 笔记本 ”,上面记录了各种数据,需要的时候,就会从这里读取或往这里写入。 内存 是计算机的“ 稿纸 ”,一般来说,同一个处理器能利用的内存越大,运算速度也就越快。 有趣的是, 显示器 虽然是人们关注最多的设备,但它其实并非是一个必须的硬件,对于个人计算机来说,即使没有显示器也可以正常运行,但只要少了上面所说硬件中的任何一个,计算机就不能正常运行了

JAVA学习之路------Day01

对着背影说爱祢 提交于 2020-02-05 15:46:48
计算机知识科普篇 #什么是计算机? 计算机是存储和处理数据的电子设备。 计算机包括两部分第一是硬件,第二是软件。硬件包括计算机中看得见的物理部分,软件提供看不见的指令,这些指令控制硬件并且使得硬件完成特定的任务。 #硬件组件 ![计算机由中央处理器、内存、存储设备、输入设备、输出设备和通信设备组成]](https://img-blog.csdnimg.cn/20200205092120753.png) #中央处理器 中央处理器(Central Processing Unit,CPU)是计算机的大脑。他从内存中获取指令然后执行这些指令。CPU通常由两个部分组成:控制单元和算数/逻辑单元。控制单元用于控制和协调其他组件的动作。算数/逻辑单元用于数值和逻辑运算。GPU:GPU是用于计算图像的硬件工具。 #内存 内存(随机访问存储器,Random-Access Memory,RAM)由一个有序的字节序列组成,用于存储程序及程序需要的数据。可以将内存看为计算机执行程序的工作区域。一个程序和他的数据在被CPU执行前必须移动到计算机的内存中。 内存中字节的内容永远非空,但是原始内容可能对程序毫无意义。一旦新的信息被放入内存,该字节当前的内容就会丢失。 内存是一种易失的数据保存形式:断电时存储在内存中的信息就会丢失。所以程序和数据以二进制的形式被永久存放在存储设备(硬盘)上

论机器语言、汇编语言、高级语言之异同点

怎甘沉沦 提交于 2020-02-05 13:29:59
计算机执行任务需要取指令,而指令都是事先制定好的放在存储器中的二进制序列,这些二进制序列就是机器语言,由0和1组成。完成一个基本操作的二进制序列叫做一条机器指令,例如加法,减法指令。随着处理器技术的发展,机器指令越来越复杂,用机器语言编程越来越难,人的工作效率低下。 人们便尝试用英文助记符代替晦涩的机器指令,例如ADD代表一条机器加法指令,助记符和机器指令一一对应,就这样汇编语言出现了,它极大的提高了人的工作效率。但是计算机并不认识汇编指令,必须将它替换为对应的机器指令,计算机才能执行它,这个过程叫汇编!在早期,通过人工查表把汇编指令替换为机器指令,后来出现了汇编程序,可以自动把汇编指令翻译成机器指令。通常我们所说的指令集就是汇编指令或者机器指令的集合,指令集相同意味着操作硬件的方式相同,即软件兼容。 人的追求永无止境,后来出现了各种高级语言,它接近人类自然语言的表达方式,便于人理解和使用。其中C语言脱颖而出,它不可撼动的成为了系统编程语言,众多操作系统例如unix,linux,ios,andriod等底层全部由C语言实现。C语言虽然是一种高级语言,但是它的硬件亲和性决定了适合于底层,驱动,操作系统等领域,在嵌入式领域,首选的也是C语言。计算机无法执行高级语言程序,需要通过编译程序把它翻译成汇编代码,然后通过汇编程序翻译成二进制序列(机器语言),计算机才能执行它! 来源: CSDN

nasm帮助

自古美人都是妖i 提交于 2020-02-05 01:25:37
3.1 NASM源程序行的组成。 就像很多其他的汇编器,每一行NASM源代码包含(除非它是一个宏,一个预处理操作 符,或一个汇编器操作符,参况第4,5章)下面四个部分的全部或某几个部分: label: instruction operands ; comment 通常,这些域的大部分是可选的;label,instruction,comment存在或不存在都是允 许的。当然,operands域会因为instruction域的要求而必需存或必须不存在。 NASM使用反斜线()作为续行符;如果一个以一个反斜线结束,那第二行会被认为 是前面一行的一部分。 NASM对于一行中的空格符并没有严格的限制:labels可以在它们的前面有空格,或 其他任何东西。label后面的冒号同样也是可选的。(注意到,这意味着如果你想 要写一行’lodsb’,但却错误地写成了’lodab’,这仍将是有效的一行,但这一行不做 任何事情,只是定义了一个label。运行NASM时带上命令行选项’-w orphan-labels’ 会让NASM在你定义了一个不以冒号结尾的label时警告你。 labels中的有效的字符是字母,数字,’-’,’ KaTeX parse error: Expected 'EOF', got '#' at position 4: ','#̲','@','~','.'和'… ‘前缀

【5分钟+】计算机系统结构:CPU性能公式

六眼飞鱼酱① 提交于 2020-02-04 19:13:31
计算机系统结构:CPU性能公式 基础知识 CPU 时间:一个程序在 CPU 上运行的时间。(不包括I/O时间) 主频、时钟频率:CPU 内部主时钟的频率,表示1秒可以完成多少个周期。 例如,主频为 4.1GHz,表示每秒可以完成 4.1*10 9 个时钟周期。 时钟周期:时钟周期也称为振荡周期,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。 时钟周期 = 1 / 频率,例如 1/ 4.1*10 9 。 CPU 的时钟周期越短,CPU 性能越好。 指令周期:取出并执行一条指令的时间。 程序的时钟周期数 CPU时间 = 执行程序所需的时钟周期数 * 时钟周期时间 公式 指令周期:取出并执行一条指令的时间; 指令周期数CPI:平均每条指令耗费的时钟周期数 CPI = 执行程序所需的时钟周期数 / 所执行的指令条数 上面的公式换位置 执行程序所需要的时钟周期数 = CPI * 所执行的指令条数 CPU时间 / 时钟周期时间 = CPI * 所执行的指令条数 CPU时间 = CPI * 所执行的指令条数 * 时钟周期时间 我们约定 IC :所执行的指令条数,所以 CPU时间 = CPI * IC * 时钟周期时间 CPU时间 = (CPI * IC) / 时钟频率 CPI i :第 i 种指令所需要的时钟周期数; IC i

20145206 《信息安全系统设计基础》第6周学习总结

巧了我就是萌 提交于 2020-02-04 04:19:17
20145206 《信息安全系统设计基础》第6周学习总结 教材学习内容总结 1.流水线化的处理器: 将每条指令的执行分解成五步,每个步骤由一个独立的硬件部分或者阶段来处理。指令步经流水线的各个阶段,且每个时钟周期有一条新指令进入流水线。所以处理器可以同时执行五条指令的不同阶段。 2.程序员可见的状态: Y86程序中的每条指令都会读取或者修改处理器状态中的某些部分。这称为程序员可见状态。 3.Stat 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态;它会指示是正常运行还是出现了某种异常。 4.Y86 一个简单的、可以称之为IA32指令集的子集的指令集;只包括四字节整数操作,寻址方式比较少。指令编码长度从1——6字节不等。 关于指令结构,每条指令的第一个字节表明指令的类型;这个字节分为两个部分,每部分四位:高四位是代码部分(0——0xB),第四位是功能部分。这里补充一些缩写:立即数(i),寄存器(r)、存储器(m)。指令附加的寄存器指示符字节依次是数据源(如果是立即数,把这一位设置成0xf)、目的寄存器/基址寄存器。有些指令需要附加四字节的常数字,采用小端法(倒序)编码 5.stat代码可能取值反应了机器的不同状态—— AOK:正常操作(除此之外的任何状态都会使得处理器停止执行指令) HLT:处理器执行halt指令 ADR:遇到非法地址 INS:遇到非法指令 6

ARM exploit编写三

断了今生、忘了曾经 提交于 2020-02-04 02:08:43
上一个实验中我们已经介绍了reverse shell(反向shell)的原理,再回顾一下 在reverse shell的场景下,内网的机器会主动连接到外网的几次上,比如作为攻击者,我们会在系统上开放一个监听端口,等待来自目标主机的弹回的连接。 同样,还是先看看C语言是怎么实现的。 完整代码在reverse.c中 第一步是确定必要的系统函数,其参数和系统调用号。 看看给出的C代码,我们可以看到我们需要以下函数:socket,connect,dup2,execve。 可以使用以下命令计算出这些函数的系统调用号: 以socket为例 用这样办法,得到的系统调用号如下 每个函数涉及的参数可以使用man xxx来查看,以execve为例 已经整理好,如下所示 下一步是弄清楚这些参数的具体值。 一种方法是使用strace查看成功的reverse shell连接。 Strace是一种工具,可用于跟踪系统调用并监视进程与Linux内核之间的交互。 让我们使用strace来测试我们reverse shell的C版本。 为了避免无关代码的干扰,我们使用-e将输出限制为我们感兴趣的功能。 这里注意,因为是反向连接,而且我在源码里写死的端口是1337,所以我们需要在另一个终端中先监听端口 然后再运行生成的可执行文件 然后输入whoami命令测试

ARM汇编学习四

限于喜欢 提交于 2020-02-03 16:20:03
接下来学习条件指令。 当特定条件满足时,借助条件指令, 通过跳转(分支)或执行某些特定指令来控制程序的流动方向。相关条件被描述为CPSR寄存器中的特定位的状态,这些位根据指令计算后的结果实时改变。比如,如果我们比较两个数并且他们相等,就将零标志位置位 (Z=1) ,因为在系统底层发生了a-b=0。在这个例子里两个数是相等的,但如果第一个数字比第二个大,会得出大于结论。而相反的情况下得出小于结论。当然还有很多其他的条件,比如小于等于(LE),大于等于(GE)等等。 下表列出了可能的条件指令,他们的含义以及被检测的状态标志位 结合上表,我们看段demo .global main main: mov r0, #2 /* setting up initial variable / cmp r0, #3 / R0与数字3比较,2小于2,所以N位置1*/ addlt r0, r0, #1 /* 如果R0比3小就将R0自增1*/ cmp r0, #3 /* 再次比较r0和3,此时2+1=3,所以Z标志位置1,N置0 / addlt r0, r0, #1 / 如果r0小于3给r0自增1*/ bx lr 结合注释,就很好理解了 代码中,第一个CMP比较指令执行后触发了N标志位的置位(2-3=-1),这表明r0的值比数字3要小。随后,由于条件满足,,所以执行了addlt指令。再次比较r0和3,此时2

Sparc V8

余生颓废 提交于 2020-02-03 15:57:55
Sparc V8 为什么LD指令区分signed和unsigned,而ST指令不区分 LD指令有LDSB,LDSU是因为从内存加载到寄存器时,若是负数需要高位符号位扩充1。而ST指令不需要。见下面解释,p91 The load integer instructions copy a byte, a halfword, or a word from memory into r[rd]. A fetched byte or halfword is right-justified in destination register r[rd]; it is either sign-extended or zero-filled on the left, depending on whether or not the opcode specifies a signed or unsigned operation, respectively. subcc等同于cmp SUBcc和目的寄存器(rd=0)一起常用于有符号或无符号整数的比较,因为我们知道,比较指令(如CMP)在任何架构的机器中最终都是进行减法运算,如果结果为0,则表示两数相等。 在v8手册里,subcc是cmp指令的实际指令 关于分支转移指令有一个分支延迟时隙 因为sparc使用了PC和nPC的机制,即nPC->PC, nPC+4-

学_汇编语言_王爽版 要点采集笔记(未完待续...)

。_饼干妹妹 提交于 2020-02-02 19:06:12
第一章 基础知识 存储器(内存)存放CPU工作的指令和数据(CPU可以直接使用的信息在内存中存放);指令和数据都是二进制数没有任何区别,由CPU决定是数据还是指令 内存单元:存储器被分为若干个存储单元,并从0开始编号(存储单元的地址),一个存储单元为1字节(8bit) CPU的读写 总线逻辑上分为:地址总线、数据总线、控制总线 地址总线:地址线宽度决定了CPU的寻址能力,计算方式 :2^[地址线宽](个内存单元) 数据总线:决定了CPU和外界的数据传输速度(8根数据总线可传送一个8位(bit)二进制数,即1个字节) 控制总线:是各外部器件的不同控制线的集合 CPU进行数据读写必须经过3类信息交互: ①存储单元的地址(地址信息)②器件的选择,读或写的命令(控制信息)③读或写的数据(数据信息) 读:CPU在内存中读取数据时,要先指定存储单元的地址(你要找一个地方先要确定一个地址),会把要读取的地址经过地址总线发给内存;同时CPU控制器将内存读命令通过控制总线发送给内存,并通知内存要读取数据;最后内存将被指定的内存单元中的数据经过数据总线送入CPU 写:与读类似,CPU经地址线发送要操作的内存单元的地址,CPU经控制线将内存写命令发送至内存,并通知内存要写入数据;CPU通过数据线将数据送入指定的内存单元; 内存地址空间: 每一个外部器件都有自己的存储芯片(如显卡有显存RAM和ROM