汇编指令

计算机硬件基础知识

◇◆丶佛笑我妖孽 提交于 2019-12-03 00:02:02
2.1 计算机硬件基础知识   2.1.1 计算机系统的组成、体系结构分类及特性       CPU和存储器的组成、性能和基本工作原理     CISC/RISC,流水线操作,多处理机,并行处理     常用 I/O 设备、通信设备的性能以及基本工作原理     I/O 接口的功能、类型和特性     I/O控制方式(中断系统、DMA、I/O处理机方式)   2.1.2 存储系统     虚拟存储器基本工作原理,多级存储体系     RAID 类型和特性   2.1.3 可靠性与系统性能评测基础知识     诊断与容错     系统可靠性分析评价     计算机系统性能评测方法      计算机体系结构分类 :     从 宏观 上按 处理机数量 进行分类,分为单处理系统、并行处理与多处理系统和分布式处理系统。     从 微观 上按 并行程度 分类:最为常见分类方式有:Flynn分类法与冯氏分类法。考试中主要考察的是Flynn分类法。        Flynn分类法 是根据指令流、数据流和多倍性三方面来进行分类的:                计算机硬件组成 :     计算机硬件系统是依照冯·诺依曼所设计体系结构,即包括 运算器 、 控制器 、 存储器 、 输入设备 和 输出设备 五大部件组成。     运算器和控制器组成中央处理器(CPU)      运算器 负责完成算术

FC游戏修改教程(hack)小白文。

匿名 (未验证) 提交于 2019-12-02 23:49:02
FC(NES)红白机Family Computer(简称FAMICOM)(或Nintendo Entertainment System)是 任天堂 公司发行的第一代家用游戏机。 修改FC游戏需要的工具有 fceux 6502汇编大奥秘 被修改的游戏rom 工具可以到这个地址下载 http://pojdd.github.io 打开fceux,并把nes游戏拖放到窗口上打开 打开浏览器,搜索超级魂斗罗金手指。 并打开作弊添加金手指,验证金手指是否正确。 确认地址0053是生命地址后打开调试=>调试器,给地址0053添加写断点。记得勾选写。 让主角死亡,触发断点。此时游戏自动暂停,定位到减命指令。 定位到的是一条减法指令,打开6502汇编大奥秘,查询 寻址方式是零页X变址。我们只需要把DEC,改成加法指令INC即可。复制指令地址,打开rom补丁,写入 F6 53提交保存。此时游戏已经修改好了。

汇编学习--第一天

匿名 (未验证) 提交于 2019-12-02 23:43:01
背景:这本书之前看了大部分,但要批评自己心急了,看了之后实验没做,收获很少,所以决定重新学一遍,记录和分享我在每一章的收获(主要记录实操)。 第一章 基础知识 汇编组成:汇编指令,伪指令,其他符号。 一个存储单元(byte)可以储存8个bit,即8位二进制 最终运行汇编程序的是CPU 第二章 寄存器 8806CPU寄存器:16位,可存放两个字节,14个寄存器:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW。 通用寄存器:AX,BX,CX,DX 通用寄存器可分为两个独立8位寄存器使用: AX -->AH + AL BX-->BH + BL CX-->CH + CL DX-->DH + DL 8086一次可以处理以下两种尺寸的数据: 字节(byte):由8 bit组成,可以存于8位寄存器 字(bit):word,一个字由两个字节构成,两字分别为高位字节和低位字节 ;传送指令 mov ax,18 mov ax,bx ;增加指令 add ax,8 add ax,bx 问题2.1 指令 指令结束之后AX中的数据 指令结束之后BX中的数据 mov bx,2000H 6226H 2000H add ax,bx 8226H 2000H mov bx,ax 8226H 8226H add ax,bx 044CH 8226H 计算结果为1044CH

汇编指令:LDM、STM详解

匿名 (未验证) 提交于 2019-12-02 23:43:01
LDM: STM: (store much)多数据存储,将寄存器的值存到地址上 (1) IA: (Increase After) 每次传送后地址加4,其中的寄存器 从左到右执行 ,例如:STMIA R0,{R1,LR} 先存R1,再存LR (2) IB: (Increase Before)每次传送前地址加4,同上 (3) DA: (Decrease After)每次传送后地址减4,其中的寄存器 从右到左执行 ,例如:STMDA R0,{R1,LR} 先存LR,再存R1 (4) DB: (Decrease Before)每次传送前地址减4,同上 (5) 满递减堆栈 (每次传送前地址减4) (6) FA: (7) 空递减堆栈 (每次传送前地址加4) (8) EA: 注意:其中在数据块的传输中是STMMDB和LDMIA对应,STMMIA和LDMDB对应 而在堆栈操作是STMFD和LDMFD对应,STMFA和LDMFA对应 格式: 其中 数据块的传输-实例: Ldr R1 LDMIB R1 /*传送前地址加+4, 所以地址加4,R0=0X1000004地址里的内容, 地址加4,R4=0X10000008地址里的内容, 地址加4,R5=0X1000000C地址里的内容, 地址加4,R6=0X10000010 地址里的内容, 由于!, 最后的地址写回到R1中,R1= 0X10000010

ARM 汇编指 跳转指令 b , bl

匿名 (未验证) 提交于 2019-12-02 23:43:01
1 . 跳转指令 【 b 】 【 bl 】 mov r0, #0x12 mov r1, #0x34 b fun_add @一条指令 , 有地址 mov r2, #0x56 @通过上面的跳转此处将不会得到执行 mov r3, #0x78 fun_add: @伪操作 标号类似 C语言中的一个函数体 , 此处只是一个局部 的标号 mov r4, #0x1 mov r5, #0x1 add r6, r4, r5 b loop @ b指令本质改变寄存器 PC 值 loop: b loop @此处是实现 死循环    带返回值的跳转指令:bl mov r0, #0x12 mov r1, #0x34 bl fun_add @由CPU 自动保存返回地址 到 lr 寄存器(r14) mov r2, #0x56 @ 跳转到fun_add 函数 执行完后再跳转此处执行 mov r3, #0x78 b loop fun_add: mov r4, #0x1 mov r5, #0x1 add r6, r4, r5 @需要手动把 lr 值 赋给 PC mov pc, lr @此时这个fun_add 函数执行完 , 会跳转到,跳转次函数的下条指令 loop: b loop 条件码 <cond >的功能使用介绍 例子 : 求出 0 ~ 10 以内的奇数和 mov r0, #1 add_fun: add r2, r2

hello world是怎样运行的?

匿名 (未验证) 提交于 2019-12-02 23:43:01
原作者csdn博客: https://blog.csdn.net/jjdiaries/article/category/1644301 关于《 深入理解计算机系统 》 “这本书的中译名为 “ 深入理解计算机系统 ” ,我非常,十分,以及百分之一百二十地不满意。我这么说的原因在于这个译法完全扭曲了书的本意。如果直译原书名,应该是类似于 “ 以程序员的视角理解计算机系统 ” ,何来 “ 深入 ” 二字。可能在国内编辑看来,这是讲系统的,用 C 和汇编语言的,因此很 “ 深入 ” ,但我认为这只能说明国内技术氛围的浅薄。因为事实上,这是一本入门级别的书,这本书其实并不 “ 深入 ” ,它谈论的内容还是相对比较浅的。但 “ dz ” 不代表 “ 浅薄 ” ,写一本面向初学者的好书往往是非常困难的,因此无论是 SICP 还是 CSAPP ,它的作者都是顶尖学府的教授,结合多年教学经验而写出来的。 CMU 把这本书作为 课程的教材,是面向计算机专业低年级学生的 “ 计算机系统介绍(导论) ” ,可能这些学生只是刚刚了解如何使用一门高级语言 ―― 如 Java 进行编程,对于计算机系统的工作方式等话题可谓一点都没有接触过,而 CSAPP 对读者的背景也只要求是 “ 一些编程经验 ” 而已。这本书的话题覆盖面很广,从计算机的基本组成,二进制数据表示方式,到机器级别的指令, CPU 工作方式

[bx]和loop指令

匿名 (未验证) 提交于 2019-12-02 23:42:01
要完整地描述一个内存单元,需要两种信息: 内存单元 内存单元的长度(类型) 在debug中可以直接使用 [0] 来代替 ds:0 但是在汇编语言中却不能够直接这样使用。只有两种选择: 将偏移地址放在bx寄存器,使用 [bx] 加上段前缀 描述性符号 () ,该符号标识一个内存地址指向的字/字节空间 约定符号idata标识常量 loop指令的格式是:loop标号,cpu执行loop指令的时候执行两部操作: (cx)=(cx)-1 判断cx中的值是否为0,为0则向下执行,否则转向标号处 所以一般cx中存放的即为循环的次数 cx和loop指令配合实现循环功能的要点: cx中存放循环次数 loop指令中的标号所标识地址要在前面 要循环执行的程序段要写在标号和loop指令的中间 如果需要直接执行完循环,则使用p执行loop指令,或者使用g指令执行loop指令的下一条指令。p指令的指令格式为 g 代码段偏移地址 ,他将跳到当前代码段和偏移地址组成的指令地址。 注意, 无论是使用p指令还是使用g指令,循环都会被执行完成 。 同时, 汇编语言源程序中,数据不能以字母开头 。 在汇编源程序中,如果使用指令访问一个内存单元,则在指令中必须用 [] 来表示内存单元于所在段的偏移地址,如果 [] 中为一个idata,则需要在其之前显式给出段寄存器。否则将认为idata。 如果在 [] 里使用寄存器

20165315 第八周考试课下补做

匿名 (未验证) 提交于 2019-12-02 22:56:40
1、通过输入 gcc -S -o main.s main.c 将下面c程序”week0303学号.c“编译成汇编代码 int g(int x){ return x+3; } int f(int x){ int i = 学号后两位; return g(x)+i; } int main(void){ return f(8)+1; } 2、参考http://www.cnblogs.com/lxm20145215----/p/5982554.html,使用gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。 ʹ gcc - g src/week0420165315.c -o example -m32 指令在64位的机器上产生32位汇编,然后使用 gdb example 指令进入gdb调试器 进入之后先在main函数处设置一个断点 b main ,再 run 一下,使用 disassemble 指令获取汇编代码,用 i(info) r(registers) 指令查看各寄存器的值 结合 display 命令和寄存器或pc内部变量,做如下设置: display /i $pc ,这样在每次执行下一条汇编语句时,都会显示出当前执行的语句 call指令将下一条指令的地址入栈,此时%esp,%ebp和堆栈的值为

《深入理解计算机系统》阅读笔记--程序的机器级表示(上)

匿名 (未验证) 提交于 2019-12-02 21:59:42
一、为什么要学习和了解汇编 编译器基于编程语言的规则,目标机器的指令集和操作系统遵循的惯例,经过一系列的阶段生成机器代码。GCC c语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,给出程序中的每一条指令。然后GCC调用汇编和链接器,根据汇编代码生成可执行的机器代码。这一章节其实就是来更加深入的认识和理解汇编代码 现在我们更多接触的都是一些高级语言,如JAVA,GO,Python,其实用这些语言的时候,更大程度上,已经屏蔽了一些程序的细节,即机器级的实现。但是如果是用汇编语言,程序员就必须制定程序用来执行计算的低级指令。 那么为什么我们还要学习和了解汇编呢? 虽然现在编译器已经替我们做了生成汇编代码的大部分工作,但是作为程序员,如果我们能够阅读和理解汇编代码将是一个非常重要的技能,好处是: 能够理解编译器的优化能力分析代码中隐含的低效率 如我们通过线程包写并发程序时,了解不同线程是如何共享程序数据或保持数据私有的,以及准确知道如何在哪里访问共享数据,这些在机器代码都是可见的 二、历史 Inter的处理器系统俗称x86,第一代处理器是8086,一个单芯片,16位微处理器,主要为 IBM PC 和 DOS 设计,有 1MB 的地址空间。八年后的 1985,第一个 32 位 Intel 处理器(IA32) 386 诞生。2004 年,奔腾(Pentium) 4E

Linux服务器开发:工具

匿名 (未验证) 提交于 2019-12-02 21:59:42
预处理 将所有#defined删除,并且展开 处理所有条件预处理指令 处理#include,将被包含的文件插入到该预编译指令的位置 过滤所有的//、/**/ 保留所有#pragma编译指令 编译 词法分析 语法分析 语义分析 代码分析 目标代码生成 汇编 链接 静态链接 动态链接 来源:博客园 作者: 5572 链接:https://www.cnblogs.com/zsczsc/p/11776480.html