汇编语言程序设计 第2章概念梳理

汇编语言程序设计

第2章概念梳理

8086 14个寄存器:

  • AX,BX,CX,DX (通用寄存器)
  • SI,DI,BP,SP (基址和变址寄存器)
  • CS,SS,DS,ES (段寄存器)
  • IP,FLAGS (指令指针和标志寄存器)

通用寄存器:

  1. AX,BX,CX,DX通常用于存放一般性数据 称为通用寄存器
  2. 一般存储的数据范围为0 ~ 2^16-1
  3. 且为了与早期CPU操作兼容,这4个寄存器均可拆分成2个8位寄存器单独使用

{
             AX分为AH和AL
            BX分为BH和BL
            CX分为CH和CL
            DX分为DH和DL
       }
           字的高8位 存放于通用寄存器的高八位寄存器即AH
           字的低8位 存放于通用寄存器的低八位寄存器即AL

寄存器基本操作指令:
           mov ax,18
           add ax,8

应注意两个操作对象的位数应当一致,如类似
           {
               mov ax,bl
               mov bh,ax
           }
         指令是不正确的

超出位数的情形{

       8226 H
+      8226 H
      —————————
      1044CH

;最终结果为044CH,1由于进位被舍弃

}

8086表示物理地址的解决途径:
寄存器都是16位,而物理地址都是20位
可以使用两个16位地址合成一个20位的物理地址的表达方式
例如:
123CH*16+0008H = 123C8H
1230H*16+00C8H = 123C8H

归纳:
基础地址(又称段地址)+偏移地址 = 物理地址
在8086CPU当中,通过段地址:偏移地址来间接描述内存单元的物理地址,故CPU根据如下公式得到物理地址:
物理地址 = 段地址 * 16 + 偏移地址

其中:
[段地址:偏移地址] 也称 [逻辑地址]
在写法上 地址通常使用十六进制表示,表示十六进制的H在[段地址:偏移地址]中可省略不写。

CS和IP寄存器
CS:代码段段寄存器,用于存放代码段的[段地址]
IP:指令指针寄存器,用于存放CPU将要读取的指令在代码段中的偏移地址
即CPU 通过这个公式读取将要执行的指令:
(CS)*16 +(IP)=指令的物理地址

计算机工作过程:
第一步:CPU基于CS:IP,计算出物理地址,然后到相应的内存单元
第二步:CPU自动修改IP的值,IP=IP+所读取指令的长度,从而为下一条指令读取做好准备
第三步:执行指令。转第1步,重复此过程

修改CS和IP的指令jmp
同时修改CS、IP的内容,即jmp 段地址:偏移地址
用指令中给出的段地址修改CS,偏移地址修改IP
示例:

只修改IP的内容:
jmp 某一合法寄存器
例如:
jmp ax,ip<--ax

原文地址:https://www.cnblogs.com/cymwn-com/p/10160579.html

时间: 2024-11-08 08:05:23

汇编语言程序设计 第2章概念梳理的相关文章

汇编语言程序设计 第3章概念梳理

汇编语言程序设计 第3章概念梳理 基础概念部分:{ 字数据在内存当中的存储:高-高 低-低     字数据的低位字节存放在低地址内存单元     字数据的高位字节存放在高地址内存单元 取低地址内存单元地址作为字数据地址,例如数据124EH:    12H存储在偏移量为"2"的字节单元,4EH存储在偏移量为"1"的字节单元    则从地址为"1"的地址单元取出的一个字数据为124EH   12为高位,故存储在高位"2"单元,4E

汇编语言程序设计 第5~8章概念梳理

汇编语言程序设计第5~8章小结: 第5章: 直接寻址和间接寻址问题: 直接寻址:mov dl,[0]; dl=((ds)*16+0)间接寻址:mov bx,0 mov dl,[bx];dl=((ds)*16+bx) assume cs:codecode segment mov ax,1 mov cx,8s: add ax,ax loop s mov ax,4c00h int 21hcode endsend 循环操作 段前缀标记所指的部分代码,直到cx寄存器当中的值变为零 t命令.p命令.g命令小

汇编语言程序设计第三章

第三章 寄存器(内存访问) 1 内存中字的存储 1个字=2个字节,如从0开始存放20000(4E20H),20.4E分别表示1个字节,内存中字的存储如下图所示: 任何两个地址连续的内存单元(0.1.2......),N号单元和N+1号单元,可以看成两个内存单元.比如说上图中的0内存单元(字节单元),存放的是字节型数据,就是20H(十进制的32):0地址字单元,存放字型数据,就是4E20H. 任何两个地址连续的内存单元,N号单元和N+1号单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字

汇编语言程序设计第五章

5.1 [BX] mov ax,[bx]  功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中.即:(ax)=((ds)*16+(bx)). mov [bx],ax 功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入内存SA:EA中.即:((ds)*16+(bx))=(ax). 5.2 Loop指令 loop指令的格式:loop 标号.CPU执行loop指令有两个步骤:①(cx)=(cx)-1②判断cx中的值,不

Javascript高级程序设计——第三章:基本概念

javascript高级程序设计——第三章:基本概念 一.语法 EMCA-262通过叫做ECMAScript的“伪语言”为我们描述了javascript实现的基本概念 javascript借鉴了C的语法,区分大小写,标示符以字母.下划线.或美元符号($)开头,注释可以用 // 或者/* */ 严格模式: ECMAScript 5引入了严格模式,在严格模式下不确定的行为将得到处理,通过在顶部添加 “use strict”来启用严格模式: function fuc(){ "use strict&qu

javascript高级程序设计 第十三章--事件

javascript高级程序设计 第十三章--事件js与HTML的交互就是通过事件实现的,事件就是文档或浏览器窗口中发生的一些特定的交互瞬间. 事件流:事件流描述的是从页面中接收事件的顺序,IE的是事件冒泡流,Netscape的是事件捕获流,这个两个是完全相反的事件流概念. 事件冒泡:由最具体的元素接收,然后逐级向上传播到更高级的节点,即事件沿DOM树向上传播,直到document对象. 事件捕获:不大具体的节点应该更早接收到事件,相当于沿DOM节点树向下级传播直到事件的实际目标,在浏览器中,是

《windows程序设计》第一章,建议想学API的每天看一章

开始 壹佰软件开发小组  整理编译   本书介绍了在Microsoft Windows 98.Microsoft Windows NT 4.0和Windows NT 5.0下程序写作的方法.这些程序用C语言编写并使用原始的Windows Application Programming Interface(API).如在本章稍后所讨论的,这不是写作Windows程序的唯一方法.然而,无论最终您使用什么方式写作程序,了解Windows API都是非常重要的. 正如您可能知道的,Windows 98已

汇编语言程序设计读书笔记(3)- 程序范例

主要描述三方面的内容:第一是汇编语言的程序模版,以及模版涉及到的一些知识点:第二是如何调试汇编语言:第三是如何在汇编语言中调用C库函数. 1. 汇编语言的组成 汇编语言由段(section)组成,一个程序中执行的代码,叫文本段(text),程序还可能有定义变量,有付给初始值的变量放在数据段(data)中,没有赋初值或者付给零初值的放在bss段中.text段一定是要有的,data和bss可以没有. 2. 段的定义 用.section语法定义段.比如: .section .text定义文本段, .s

《80X86汇编语言程序设计教程》二十五 结语(读后感:这本书怎么样)

这本书的推荐星级是:5星.毕竟是经典书籍,没什么好说的. 就汇编本身而言,在编写高效率程序以及对程序的优化,调试,工程的逆向都是一门基础:就理论上的操作系统而言,汇编让你了解CPU,了解计算机的体系结构,它是阅读操作系统源码的前提,这也是<80X86汇编语言程序设计教程>做得比较好的一点,它对386的保护方式下的编程写得比较详实,读完整本书,会发现这学的不仅仅是汇编语言,还有CPU的体系架构,它让你基本猜测得到在编写基于80386CPU的操作系统时,大概要做一些什么事情. 阅读前,我选过几本书