地址

汇编语言程序设计第二章

徘徊边缘 提交于 2020-03-24 02:27:28
第二章主要介绍了寄存器。CPU中主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。不同的CPU,寄存器的个数、结构是不同的。 寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求。8086所有的寄存器都是16位的,可以存放2个字节,AX、BX、CX、DX用于存放一般性数据,成为通用寄存器。为了兼容旧的8位寄存,每个16位寄存器可以分为2个单独的8位寄存器来使用,名字分别用AH、AL来表示高8位和低8位。8086CPU可以一次性处理以下两种尺寸的数据:字节byte,一个字节由8个bit组成,可以存储在8位寄存器中;字word,是两个字节,可以存储在16位寄存器中,改字的高8位字节和低8位字节存储在高8位寄存器和低8位寄存器中。 CPU访问内存需要提供内存单元地址,所有的内存单元在内存空间中构成的是一个一维线性结构。每个内存单元都有一个唯一的地址,这个地址就是物理地址。CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址。在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的CPU可以有不同的形成物理地址的方式。16位结构的CPU表示:CPU运算器一次运算位数最大为16位

第二章总结

房东的猫 提交于 2020-03-24 02:27:08
1、通用寄存器:8086CPU的寄存器都是16位的,可以存放两个字节。其中,用来存放一般性的数据,被称为通用寄存器,它们为AX, BX, CX, DX。 8086CPU的AX, BX, CX, DX,都可以分为两个可独立使用的8位寄存器来用:AX可分为AH和AL;BX可分为BH和BL;CX可分为CH和CL;DX可分为DH和DL;使用add,mov指令时,只能对相同类型的寄存器操作,即只能ax,bx,cx,dx之间操作不能,ax,ah等之间操作。 2、物理地址:物理地址=段地址*16+偏移地址的本质含义:CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。 3、段地址:段并不是指内存是分段的,段的划分来自于CPU,是因为8086CPU用“物理地址=段地址*16+偏移地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。以后,在编程是可以根据需要,将若干地址连续的内存单元看作一个段,用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。一个段的长度最大为64KB。 4、CS和IP:8086CPU在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。段地址在CS寄存器中存储,偏移地址在IP寄存器中存储。CS*16+IP即指令的物理地址。 来源: https:/

【汇编语言】——第二章课后总结

若如初见. 提交于 2020-03-24 02:26:31
第二章最主要的内容如下: 1、通用寄存器:AX,BX,CX,DX; 2、汇编指令:mov add等指令; 3、8086CPU给出物理地址的方法(用两个16位地址合成的方法形成一个20位的物理地址); 4、CS(段寄存器) IP(指针寄存器 ); 5、修改CS,IP的指令; 一.通用寄存器 1. 8086CPU所有的寄存器都是16位的,可以存放两个字节。 2. AX、BX、CX、DX,4个寄存器通常用来存放一般性数据,被称为通用寄存器。 3. 一个16位的寄存器可以存储一个16位的数据。 思考:一个16位的寄存器所能存储的数据最大值为多少? 4. 8086CPU的AX、BX、CX、DX(16位寄存器)每个都可以分为两个可独立使用的8位寄存器来用: AX可分为AH、AL; BX可分为BH、BL; CX可分为CH、CL; DX可分为DH、DL; 二.几个常用的汇编指令 mov 和add   mov a, b 指把a=b;a通常是寄存器,如:mov ax,18指将18送入寄存器ax   add a, b指a=a+b; a通常是寄存器,如:add ax,18指将寄存器ax的数值加上18 注意:   由于通用寄存器只能存储16位的数据,所以如果将一个大于16位的数据放入寄存器就会损失最高位;   使用add,mov指令时,只能对相同类型的寄存器操作,即只能ax,bx,cx,dx之间操作不能

《汇编语言》第二章总结

守給你的承諾、 提交于 2020-03-24 02:24:50
汇编语言(面向机器的程序设计语言) 第二章 信息的大本营——寄存器 CPU概述 一个典型的CPU由运算器、控制器、寄存器等器件组成。运算器进行信息处理,寄存器进行信息存储,控制器控制各种器件进行工作。 内部总线连接各种器件,在它们之间进行数据的传送,实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。这个章节所介绍的寄存器是CPU中程序员可以用指令读写的部件,程序员通过改变各种寄存器中的内容来实现对CPU的控制。 不同的CPU,寄存器的个数和结构都是不同的。8086CPU有14个寄存器,每个寄存器都有对应的名称分别为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。 2.1 通用寄存器 8086CPU的所有寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。以AX为例,16位寄存器的逻辑结构如下图: 16位寄存器的逻辑结构, 其存放的无符号数据范围:0 ~ 2^16 -1 为了与早期CPU操作兼容,这4个寄存器均可拆分成两个8位寄存器单独使用,分别为AX分为AH和AL,BX分为BH和BL,CX分为CH和CL,DX分为DH和DL,下面以AX为例: AH和AL存放的无符号数据范围:0 ~ 2^8 -1 一个字由两个字节组成,可以存在一个16位寄存器中

《汇编语言(第二章)》课后小结

ε祈祈猫儿з 提交于 2020-03-24 02:22:34
通过本章的学习:了解通用寄存器,掌握字数据在寄存器中的存储,理解段的概念,了解段寄存器,掌握汇编指令mov, add和jmp的基本用法。 一个典型的CPU由运算器、控制器、寄存器等器件组成。内部总线实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。本课程内容介绍基于8086CPU, 8086是Intel系列中16位微处理器,地址总线20位。 CPU字长是指CPU在单位时间内能一次处理的二进制位数。该指标反映出CPU内部运算处理的速度。而位宽是指CPU通过外部数据总线与内存之间一次能够传送的数据位。 关于ISA,一个处理器支持的指令和指令的字节级编码称为它的ISA。不同处理器“家族”系列,有不同的ISA。同一系列里也有不同类型的处理器。虽然每个厂商制造的处理器性能和复杂性不断提高,但是不同的类型在ISA级别上都保持着兼容。 指令使用注意事项,(1) 在mov和add指令中,两个操作对象的位数应一致。(2)运算时超出寄存器表示的位数的情形,例如:设(AX) = 8226H, (BX) = 8226H,执行ADD AX, BX后, (AX) =044CH,本来8226H+8226H=1044CH,舍弃高位的1,最后取044CH。 8086结构表示物理地址的障碍,8086内部的寄存器都是16位的,而外部地址总线宽度为20位

手动脱FSG壳实战

三世轮回 提交于 2020-03-23 14:48:59
作者:Fly2015 对于FSG 壳。之前没有接触过是第一次接触。这次拿来脱壳的程序仍然是吾爱破解论坛破解培训的作业 3 的程序。对于这个壳折腾了一会儿,后来还是被搞定了。 1. 查壳 首先对该程序(吾爱破解培训第一课作业三 .exe )进行查壳: 非常遗憾。这次DIE 也不行了,只是没事。 2. 脱壳 OD 加载该加壳的程序进行分析。以下是入口点的汇编代码: 起初对于该种加壳程序也是比較陌生。可是因为OD 使用的还算熟悉,以及结合该加壳程序获取函数的 API 调用地址的特点,非常快发现了该程序的关键点汇编: 于是在地址004001D1 处 F2 下断点,然后 F9 执行到该地址 004001D1 处,地址 0041DDAC 就是被加壳程序真实的 OEP 的地址。 F7 单步跟进到地址 0041DDAC 处。遗憾的是没有看到我们熟悉的入口点的汇编代码,可是不要急, OD 没有将汇编代码正确的显示出来,须要我们自己手动的进行数据的反汇编解析: 选中地址0041DDAC 处没有正确显示的数据。然后 右键 如图,选择 分析 --> 分析代码 就可以正确显示了。 手动选择分析代码以后。地址 0041DDAC 处的数据的显示。是不是非常有亲切感啊,令人熟悉的入口点汇编代码出现了。可是不要急。这才是第一步。 非常自然的下一步就是使用 OD 的插件 OllyDump 进行程序的脱壳操作

指针的理解

旧巷老猫 提交于 2020-03-23 09:22:20
指针 (Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为"指针"。意思是通过它能找到以它为地址的内存单元。在 高级语言 中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用 暂存器 的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。 来源: https://www.cnblogs.com/tyty/p/4892849.html

资料——指针

Deadly 提交于 2020-03-23 09:20:04
在计算机科学中, 指针 (Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的 内存单元 。在 高级语言 中,指针有效地取代了低级语言,如 汇编语言 与机器码,直接使用通用 暂存器 的地方,但它可能只适用于合法地址之中。指针参考了 存储器 中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。 在信息工程中指针是一个用来指示一个 内存地址 的计算机语言的变量或 中央处理器 (CPU)中 寄存器 (Register)【用来指向该内存地址所对应的变量或数组】。指针一般出现在比较接近 机器语言 的语言,如汇编语言或 C语言 。 面向对象 的语言如 Java 一般避免用指针。指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。 来源: https://www.cnblogs.com

C语言指针的概念

拥有回忆 提交于 2020-03-23 09:17:37
在计算机中,所有的数据都是存放在内存中的,一般把内存中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不一样,如int占用4个字节,char占用1个字节。为了正确地访问这些内存单元,必须为每个内存单元编上号。每个内存单元的编号是唯一的,根据编号可以准确地找到该内存单元。 内存单元的编号叫做地址(Address),也称为指针(Pointer)。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。我们用银行卡到ATM机取款时,系统会根据我们的卡号去查找账户信息,包括存取款记录、余额等,信息正确、余额足够的情况下才允许我们取款。在这里,卡号就是账户信息的指针, 存取款记录、余额等就是账户信息的内容。对于一个内存单元来说,单元的地址(编号)即为指针,其中存放的数据才是该单元的内容。 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。 设有字符变量c,其内容为 'K'(ASCII码为十进制数 75),c占用了0X11A号内存单元(地址通常用十六进数表示)。设有指针变量p,内容为 0X11A,这种情况我们称为p指向变量c,或说p是指向变量c的指针。 严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针

[C]为什么发明指针?

故事扮演 提交于 2020-03-23 09:16:18
指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。只要作到这些,指针也是不难掌握的。 指针的基本概念 在计算机中,所有的数据都是存放在存储器中的。 一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等, 在第二章中已有详细的介绍。为了正确地访问这些内存单元, 必须为每个内存单元编上号。 根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。 既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。我们到银行去存取款时, 银行工作人员将根据我们的帐号去找我们的存款单, 找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针, 存款数是存单的内容。对于一个内存单元来说,单元的地址即为指针,