从零开始学汇编

从零开始学汇编

5 (96人评价)
  • 课时:(62)

  • 学员:(2497)

  • 浏览:(146576)

  • 加入课程
  • 第三章 寄存器(内存访问)05的笔记

    POP AX1.将SS:SP指向的内存单元处的数据送入AX中;2.SP=Sp+2, SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。注意:指针往下指了,当数据还是在那个字单元里面的,只是复制到AX寄存器里而已。 栈顶越界的问题:SS和SP只记录了栈顶的地址,依靠SS和SP可以保证在入栈和出栈的找到栈顶。可是,如何能够保证在入栈。出栈时,栈顶不会超出栈空间呢?当栈满的时候再使用PUSH指令入栈,栈空的时候再使用POP指令出栈,都将发生栈顶超界的问题。栈顶超界是危险的:因为我们既然将一段空间安排为栈,那么在栈空间之外的空间里很可能存放了具有其他用途的数据,代码等。这些数据,代码可能是我们自己的程序中的,也可能是别的程序中的。(毕竟一个计算机系统并不是只有我们自己的程序在运行) 8086CPU的工作原理:只考虑当前的情况:1.当前栈顶在何处2.当前要执行的指令是哪一条结论:我们在编程的时候要自己操心栈顶超界的问题,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。PUSH和POP指令是可以在寄存器和内存之间传送数据的栈与内存:栈空间当然也是内存空间的一部分,它只是一段可以以一种特殊的方式进行访问的内存空间。(1)就是前面的PUSH和POP与通用寄存器进行交互(2)PUSH和POP与段寄存器进行交互PUSH 段寄存器:将一个段寄存器中的数据入栈。POP段寄存器:出栈,用一个段寄存器接受出栈的数据(3)PUSH和POP与内存单元进行交互PUSH内存单元:将一个内存单元处的字入栈(栈操作的都是以字为单位)POP内存单元:出栈,用一个内存字单元接受出栈的数据例如:PUSH [0] POP [2]指令执行时,CPU要知道内存单元的地址,可以在PUSH.POP指令中给出内存单元的偏移地址,段地址在指令执行时,CPU从DS中取得

  • 第三章 寄存器(内存访问)04的笔记

    栈有两个基本的操作:入栈和出栈现今的CPU中都有栈的设计。8086CPU提供相关的指令来以栈的方式访问内存空间这意味着,我们在基于8086CPU编程的时候,可以将一段内存当做栈来使用。8086CPU提供入栈和出栈的指令:PUSH(入栈)POP(出栈)PUSH AX;将寄存器AX中的数据送入栈中POP AX;从栈顶出去数据送入AX 8086CPU中,有两个寄存器:段寄存器SS 存放栈顶的段地址寄存器SP 存放栈顶的偏移地址任意时刻,SS:SP指向栈顶元素。PUSH指令的执行过程:PUSH AX;1.SP=SP-2;2.将AX中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。 将10000H--1000FH当做事栈空间栈空,SS:SP指向栈空间最高地址单元的下一个单元。指向PUSH AX后,SS:SP指向栈中的第一个元素 当在栈中执行了PUSH指令后,再进行POP指令后,该位置的数据还是存在的,当再一次进行PUSH指令后才能覆盖掉!(硬盘删除格式化后还可以恢复,因为这种删除只是删除了索引而已,需要多次覆盖才能彻底删除)我们将10000H-1000FH这段空间当做栈段,SS=1000H。栈空间大小为16字节,栈最底部的字单元地址为1000:000E。任意时刻,SS:SP指向栈顶,当栈中只有一个元素的时候,SS=1000H,SP=000EH栈为空,就相当于栈中唯一的元素出栈,出栈后,SP=SP+2,SP原来为000EH,加2后SP=10H所以,当栈为空的时候,SS=1000H,SP=10H 换个角度:任意时刻,SS:SP指向栈顶元素,当栈为空的时候,栈中过没有元素。也就不存在栈顶元素所以SS:SP只能指向栈的最底部单元下面的单元,该单元的偏移地址为栈最底部的字单元的偏移地址+2栈最底部字单元的地址为1000:000E,所以栈为空时,SP=0010H。

  • 第三章 寄存器(内存访问)03的笔记

    MOV指令的几种形式:MOV 寄存器,数据MOV AX,6MOV寄存器,寄存器MOV BX,AXMOV 寄存器,内存单元MOV AX,[0]MOV 内存单元,寄存器MOV [0],AXMOV段寄存器,寄存器MOV DS,AXMOV 寄存器,段寄存器 也是对的!ADD 和SUB指令都能符合MOV指令的前四种。试一试后面两种!MOV,ADD,SUB是具有两个操作对象的指令,JMP是具有一个操作对象的指令

  • 第三章 寄存器(内存访问)01的笔记

    任何两个地址连续的内存单元,N号单元和N+1号单元,可以将他们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和地位字节单元。 8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址。例如:我们要读取10000H单元的内容可以用如下程序段进行:mov bx.1000Hmov ds,bxmov al,[0]上面三条指令将10000H(1000:0)中的数据读到al中。 已知的MOV指令可完成的两种传送功能:1.将数据直接送入寄存器;mov ax,2;2.将一个寄存器中的内容送入另一个寄存器中mov bx,ax;除此之外,mov指令还可以将一个内存单元中的内容送入一个寄存器10000H表示为1000:0(段地址:偏移地址)将段地址1000H放入ds用mov al,[0]完成传送(mov指令中的[]说明操作对象是一个内存单元,[]中的0说明这个内存单元的偏移地址是0,它的段地址默认放在ds中) 8086CPU不支持将数据直接送入段寄存器的操作,ds是一个段寄存器 mov al,[0] 偏移地址为0的数据的一个字节 执行指令时,8086CPU自动取DS中的数据为内存单元的段地址10000H表示为1000:0(段地址:偏移地址)将段地址1000H放入ds用mov al,[0]完成传送(mov指令中的[]说明操作对象是一个内存单元,[]中的0说明这个内存单元的偏移地址是0,它的段地址默认放在ds中) 8086CPU不支持将数据直接送入段寄存器的操作,ds是一个段寄存器(硬件设计的问题)mov ds,1000H是非法的!数据----通用寄存器---段寄存器 将数据从寄存器送入内存单元:mov bx,1000Hmov ds,bxmov [0],al    

  • 第二章 寄存器(CPU工作原理)06-实验1的笔记

    R命令,查看。改变CPU寄存器的内容D命令查看内存中的内容E命令改写内存中的内容U命令将内存中的机器指令翻译成汇编指令T命令执行一条机器指令A命令以汇编指令的格式在内存中写入一条机器指令

  • 第二章 寄存器(CPU工作原理)05的笔记

    8086CPU有4个段寄存器:CS:代码段 DS:数据段 SS:堆栈段 ES:附加段 CS和IP是8086CPU中最关键的寄存器, 它们指示了CPU当前要读取指令的地址。 CS为代码段寄存器 IP为指令指针寄存器 8086CPU工作的简要描述: 1.从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器; 2.IP=IP+所读取指令的长度,从而指向下一条指令。 3.执行指令。转到步骤1.重复这个过程。 在8086CPU加电启动或复位后,(即CPU刚开始i工作时)CS和IP被设CS=FFFFH,IP=OOOOH。 即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令。 FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。在CPU中,程序员能够用指令读写的不见只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制CPU从何处执行指令是由CS。IP中的内容决定的,程序员可以通过改变CS。IP中的内容来控制CPU执行目标指令MOV指令不能用于设置CS,IP的值。修改可以用:同时修改CS。IP:jmp 段地址:偏移地址例如:jmp 2AE3:3 单纯修改IP:(段地址不变)jmp 某一合法寄存器 jmp axjmp bx CPU只认被CS。IP指向的内存单元中的内容为指令。所以要将CS.IP指向所定义的代码段中的第一条指令的首地址。CS存放指令的段地址,IP存放指令的偏移地址。8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。8086CPU的工作过程:1.从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器。2.IP指向下一条指令;3.执行指令。(转到步骤1.重复这个过程)8086CPU提供转移指令修改CS.IP的内容

  • 第二章 寄存器(CPU工作原理)04的笔记

    错误的认识:内存被划分成了一个一个的段,每个段有一个段地址.其实:内存并没有分段,段的划分来自于CPU,由于8086CPU用(段地址乘以16)+偏移地址=物理地址的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。 偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。2的16次方=64KBCPU访问内存单元时,必须向内存提供内存单元的物理地址。 COU可以用不同的段地址和偏移地址形成同一个物理地址。偏移地址16位,变化范围: 0-FFFFH,仅用偏移地址来寻址最多可寻64KB个内存单元。比如:给定段地址1000H,用偏移地址寻址,CPU的寻址范围:10000H-1FFFFH“数据在21F60H内存单元中”对于8086PC机的两种描述:1.数据存在内存的2000:1F60单元中,2.数据存在内存的2000段中的1F60H单元中 

  • 第二章 寄存器(CPU工作原理)03的笔记

    CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。我们把这个唯一的地址称为物理地址。16位结构的CPU主要由三方面来判断是几位:1.运算器一次最多可以处理16位的数据2.寄存器的最大宽度为16位3.寄存器和运算器之间的通路是16位。 8086COU的外部:有20位地址总线,可传送20位20位地址,寻址能力为1M8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64KB2的20次方=1MB  2的16次方=64KB8086CPU采用内部两个16位地址合并为一个20位物理地址=段地址*16+偏移地址

  • 第二章 寄存器(CPU工作原理)02的笔记

    由于一个内存单元可以存放8位数据,CPU中的寄存器又可存放N个8位数据。也就是说,计算机中的数据大多是由1-N个8位数据构成的。汇编指令不区分大小写!两个十六进制的数代表一个字节,所以0000H代表两个字节=一个字

  • 第二章 寄存器(CPU工作原理)01的笔记

    一个字=2个字节CPU由运算器,控制器,寄存器组成,这些器件靠内部总线相连区别:内部总线实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其他器件的联系。8086CPU有14个寄存器,8个通用寄存器8086CPU所有的寄存器都是16位,可以存放两个字节。AX.BX.CX.DX为通用寄存器一个16位寄存器所能存储的数据的最大值为2 的16次方-1

  • 第一章 基础知识05的笔记

    随机存储器(RAM)断电后数据不在只读存储器(ROM)断电后还在

  • 第一章 基础知识04的笔记

    汇编指令是机器指令的助记符,同机器指令一一对应。每一种CPU都有自己的汇编指令集 CPU可以直接使用的信息在存储器中存放 在存储器中指令和数据没有任何区别,都是二进制信息 存储单元从零开始顺序编号一个存储单元可以存储8个bit(用作单位写成“b”),即8位二进制数。1B=8b 1KB=2024B每一个CPU芯片都有许多管脚,这些管脚和总线相连,也可以说,这些管脚引出总线。一个CPU可以引出三中总线的宽度标志了这个CPU的不同方面的性能:地址总线的宽度决定了CPU的寻址能力数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量 ;控制总线宽度决定了CPU对系统中其他器件的控制能力

  • 第一章 基础知识03的笔记

    64位运行速度:64位CPU。64位操作系统。64位软件一个CPU有N跟地址总线,则可以说这个CPU的地址总线的宽度为N这样的CPU最多可以寻址2的N次方个内存单元、一跟总线=可以索引一个内存单元=一个字节(Byte)=8位(bit)   一位就是一个数据所以64位CPU可以走8个字节数据,所以一个字节就可以存2的8次方的数据 数据总线的宽度决定了CPU和外界的数据传送速度8086数据总线上传送的是16位的,8088是8位的 有多少跟控制总线,就意味着CPU提供了对外部器件的多少种控制,所以控制总线的宽度决定了CPU对外部器件的控制能力

  • 第一章 基础知识02的笔记

    编码的奥秘  (windows 程序设计者写的) 

  • 第四章 第一个程序01的笔记

    伪指令:没有对应的机器指令,不被CPU所执行的。→是让编译器来识别的。段:开始:segment      结束:ends正真的结束:end(不要把ends和end搞混)assume:假设某一段寄存器和程序中的某一个段相关联。assume: cs:codesgcodesg segment·········codesg endsend 

    by yxdyd 0 0
  • 第二章 寄存器(CPU工作原理)01的笔记

    第二章 寄存器(cpu工作原理)概述:8086CPU有14个寄存器:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW 

    by 月汐 1 1
  • 第一章 基础知识05的笔记

    1.11内存地址空间(概述)1.14各类存储器芯片从读写属性分(1)随机存储器RAM(2)只读存储器ROMe.g.装有BIOS的ROM1.15内存地址空间存储器的相同点1.都和CPU总线相连2.CPU对他们进行读或写的时候都通过控制线发出内存读写命令8086PC机内存储地址空间分配的基本情况最终运行程序是cpu,应从cpu角度考虑问题

    by 月汐 0 0
  • 第一章 基础知识03的笔记

    1.8地址总线· cpu是通过地址总线来制定存储器单元的  ·地址总线上能传送多少个不同的信息,CPU就可以对多少存储单元进行寻址2.地址总线上发送的地址信息3.地址总线宽度N=地址总线根数N 这样的CPU最多可以寻找2的N次方个内存单元1.9数据总线(CPU与内存或其他器件的数据传送)1.数据总线的宽度决定了CPU和外界的数据传送速度2.比较8088CPU和8086CPU的数据总线上数据传送情况1.10控制总线:一些不同控制线的集合1.有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制控制总线的宽度决定了CPU对外部器件的控制能力  

    by 月汐 0 0
  • 第一章 基础知识02的笔记

    1.3汇编语言的组成汇编指令(核心)伪指令其他符号1.4存储器CPU-计算机的核心部件指令和数据在存储器(内存)中存放磁盘≠内存1.5指令和数据(应用上的概念)1.6存储单元1.存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号2.容量单位换算1KB=1024B1MB=1024KB1GB=1024MB1TB=1024GB1.7CPU对存储器的读写1.交互信息的三种类型 (1)地址信息 (2)控制信息 (3)数据信息2.电子计算机能处理、传输的信息都是电信号,∴CPU是通过导线将地址、数据和控制信息传输到存储芯片中的3.总线:专门连接CPU和其他芯片的导线(1)物理上:一根根导线的集合(2)逻辑上划分为地址总线AB数据总线DB控制总线CB  

    by 月汐 1 1
  • 第一章 基础知识01的笔记

    为什么需要汇编语言?因为机器语言是计算机唯一能执行的语言,但是这种语言太难懂了 所以需要程序员写汇编语言然后再经过编译程序把汇编语言编译成计算机能执行的机器语言。