汇编学习第一节

汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。

汇编指令是机器指令的助记符。

寄存器: CPU中可以存储数据的器件,一个CPU中有多个寄存器。

AX BX都是寄存器的代号。

汇编语言由以下三部分组成:

1.汇编指令(机器码的助记符)

2.伪指令(由编译器执行)

3.其他符号(由编译器识别)

CPU 我们需要向CPU提供指令和数据,它才能工作。

指令和数据都存放在存储器中,也就是内存。

在内存中,指令和数据没有区别,都是二进制的信息。

存储器被划分为若干个存储单元,从0开始顺序编号。

CPU若要进行数据的读写,需要和外部内存进行三类信息的交互:

1.存储单元的地址(地址信息)

2.器件的选择,读写命令的选择(控制信息)

3.读或写的数据

所以电脑中有三种总线,逻辑上分为地址总线,数据总线和控制总线。

一个CPU有N根地址总线,我们就可以说它的宽度为N,它可以寻址:2的N次方个内存单元。

CPU的数据总线宽度决定了它与外界的数据传送速度。

最终运行程序的是CPU,我们用汇编编程的时候,必须要从CPU角度考虑问题。

一个典型的CPU由运算器,控制器和寄存器组成,这些器件内部通过总线相连。

数据寄存器4个:AX,BX,CX,DX;

地址指针寄存器2个:SP,BP;

变址寄存器2个:SI,DI;

段寄存器4个:CS,DS,SS,ES;

控制寄存器两个:IP,FLAGS。

http://www.cnblogs.com/zhaoyl/archive/2012/05/15/2501972.html

8086  CPU 中寄存器总共为 14 个,且均为 16 位 。

即 AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个。

而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。

通用寄存器:

AX,BX,CX,DX 称作为数据寄存器:

AX (Accumulator):累加寄存器,也称之为累加器;

BX (Base):基地址寄存器;

CX (Count):计数器寄存器;

DX (Data):数据寄存器;

SP 和 BP 又称作为指针寄存器:

SP (Stack Pointer):堆栈指针寄存器;

BP (Base Pointer):基指针寄存器;

SI 和 DI 又称作为变址寄存器:

SI (Source Index):源变址寄存器;

DI (Destination Index):目的变址寄存器;

控制寄存器:

IP (Instruction Pointer):指令指针寄存器;

FLAG:标志寄存器;

段寄存器:

CS (Code Segment):代码段寄存器;

DS (Data Segment):数据段寄存器;

SS (Stack Segment):堆栈段寄存器;

ES (Extra Segment):附加段寄存器;

,每一个 16 位寄存器就可以当做 2 个独立的 8 位寄存器来使用了 。

AX 寄存器可以分为两个独立的 8 位的 AH 和 AL 寄存器;

BX 寄存器可以分为两个独立的 8 位的 BH 和 BL 寄存器;

CX 寄存器可以分为两个独立的 8 位的 CH 和 CL 寄存器;

DX 寄存器可以分为两个独立的 8 位的 DH 和 DL 寄存器;

BX 寄存器中存放的数据一般是用来作为偏移地址使用的。

基址其实就是段地址,段地址存储在段寄存器。

在 8086 CPU 中,CPU 是根据 <段地址:偏移地址> 来进行寻址操作的。

在 8086 CPU 中,只有 4 个寄存器可以以  […]  的方式使用,这四个寄存器分别是 BX,SI,DI,BP。

段也就是在编程时,我们将若干个地址连续的内存单元看做是一个段,

段有数据段,代码段,栈段,它们的含义很明显,就是分别用来存储数据,代码和作为栈作用的内存空间。

不同的段,它们默认的段地址存储在不同的寄存器中,

数据段的段地址存储在DS(data segment)寄存器中,

代码段的段地址放在CS(code segment)寄存器中,

栈段的段地址存放在SS(stack segment)寄存器中。

CS:IP两个寄存器指示CPU当前要读取的指令的地址,其中CS为代码段寄存器,IP为指令指针寄存器。

CPU是怎样做到自动读取指令的呢?

当我们运行一个可执行文件时,我们需要另外一个程序把这个可执行文件加载到内存当中,我们就认为是shell程序来

加载可执行程序,它将可执行文件加载到内存中后,就会设置CPU中的两个寄存器,即设置CS:IP两个寄存器,指向

可执行文件的起始地址,此后CPU即可从这个地址中读取内存中的指令,并且执行。

汇编语言中的START标记就是用来标记这段代码的起始地址。

栈顶的段地址存放在SS中,偏移地址存放在SP寄存器当中。

在任何时刻,SS:SP都是指向栈顶元素。

段的支持是在 CPU上体现的,而不是在内在中实现了段。段是逻辑上的概念,它们都是一段内在,为什么要分数据段和代码段呢?这是为了编程的方便,或者说是代码编写方便。

CF(Carry  FLag) - 进位标志(第 0 位);

PF(Parity flag)-奇偶标志(第二位)

AF(auxiliary carry flag) 辅助进位标志(第4位)

ZF(zero flag)零标志(第6位)

SF:符号位(7) TF(trap flag)追踪标志(8)

OF(over flag) 溢出标志 (第11位)

在写汇编指令或寄存器的名称时,不区分大小写,如MOVE AX 18,mov ax 18,等价。

AX是16位寄存器,所以只能存放4位十六进制的数,如果存放的数据超过4位,则其存储低位,高位存储在dx中。

编程计算2的4次方

Mov add

Mov ax 2;

Add ax 2;

Add ax2;

Add ax2;

CPU 在访问内存单元时,要给出内存单元的地址,所有内存单元构成的存储空间是一维的线性空间,每一个内在单元在这个空间中都有一个唯一的地址,我们将这个地址称为物理地址。

CPU通过地址总线送入存储器的必须是一个内存单元的物理地址,但是在向地址总线发送物理地址前,必须先形成

这个物理地址,不同的CPU有不同的方式生成物理地址。

地址加法器采用物理地址=段地址左移四位(乘16)+偏移地址的段地址和偏移地址合成物理地址。

我们对事物的认识会限制我们会它的使用。至少是从意识上限制它的使用,也许在实践中无意发生新的运用。

CPU可以使用不同的段地址和偏移地址形成同一个物理地址。

偏移地址16位,变化范围为0-ffffh,可以用来定位64KB个内存单元。

CPU根据什么来判断内存地址存储的是数据还是数据?

根据CS:Ip的内容,如果等于此地址,则是代码。

Jmp CS:IP

Jmp 合法寄存器 :用寄存器中的值修改IP

Debug是DOS,windows 提供的实模式(8086)程序的调试工具,可以用来查看CPU各种寄存器中的内容,内存的情况和机器码级跟踪程序的运行。

debug

A 1000:0

然后写入

汇编指令

然后修改CS:IP的地址到1000:0然后t去执行指令,观察寄存器的变化;

Rcs

1000

Rip

0

时间: 2024-10-21 14:17:25

汇编学习第一节的相关文章

Bash编程基础知识学习第一节

Bash编程基础知识学习 一.bash的由来 1 .什么是Bash 什么是Shell Bash 是GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell. Shell 是*nix提供给用户使用的界面.一个操作系统的底层是独立运行的, 用户界面和底层分开,可以最大限度的保证系统稳定.Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户. Bash Shell 一般不需要自己安装,在安装发行版的同时都会安装好. Shell的存在是和登陆相关的

Linux学习第一节课(2019.9.6)

今天,正式开始学习Linux,在跟着老刘学习的过程很轻松.第一节课老刘说了Linux的起源.开源共享精神.相比windows的优势.Linux的系统版本等.第一节课虽然还没有开始讲技术性的东西,但是能感受到老刘上课讲的比较细,也关心学生的学习之类,觉得认识老刘很高兴,最后希望在今年内考下RHCE证,老刘你也要继续帅下去,哈哈.--------------------------------------------------------------------------------------

VUE2.0实现购物车和地址选配功能学习第一节(来源--慕课网河畔一角)

第一节  vue知识 vue-resource:和后台交互的一个插件,实现get.post和jsonp等功能.(替代jQuery) vue特点: 1.易用:通过创建vue实例,{{}}绑定数据十分方便,如果是jQuery还要获取值,设定十分繁琐 2.灵活-渐进式 ①渲染字段:②公共头部和公共尾部做成组件:③单页面会用到:④管理组件状态,vuex⑤使用构建工具完结项目 3.高效 ①16kb min+gzip的运行大小:②超快虚拟DOM:③最省心的优化 vue基础指令介绍: 1.指令的使用: v-m

JPA学习---第一节:JPA详解

一.详解 JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate.TopLink等ORM框架各自为营的局面.值得注意的是,JPA是在充分吸收了现有Hibernate.TopLink等ORM框架的基础上发展而来的,具有易于使用.伸缩性强等优点.从目前的开发社区的反应上看,JPA受到了极大的支持

Linux学习第一节课

一.计算机学习3原则 计算机将字符转化成01字符进行计算: 计算机遵循输入运算输出的顺序原则: 计算机软件是数据和指令的集合. 二.计算机二进制计算 二进制 十进制 0 0 1 20 10 22 100 23 1000 24 ... ... 10000000000...0000... (n个0) 2n 为进行方便计算,需记住2^0到2^10所有值,即为: 20=1,21=2,22=4,23=8,24=16,25=32,26=64,27=128,28=256,29=512,210=1024: 十进

vue.js学习第一节

1 <div id="app" class="app"> 2 <p>{{ message }}</p> 3 <p>{{ info }}</p> 4 <!-- 等价于下面的写法--> 5 <div v-html="message"></div> 6 <div v-html="info"></div> 7 <

asp.net学习第一节课html1

1.无序列表与有序列表的应用实例. 代码如下: 把代码放在<body></body>标签中. <ul> <li>领导的效能     <ol>        <li>领导的权利         <ul>            <li>强制权利</li>            <li>奖赏权利</li>            </ul>        </li&

Hibernate学习---第一节:hibernate配置和入门程序

一.ORM 简介: ORM 全称是 Object\ Relation Mapping, 即对象\关系映射 ORM 可以理解为一种规范,具体的 ORM 框架可作为应用程序和数据库的桥梁 面向对象程序设计语言与关系型数据库发展不同步时,需要一种中间解决方案,ORM 框架就是这样的解决方案 ORM 不是具体的产品,是一类框架的总称,基本特征: (1).完成面向对象的程序设计语言到关系数据库的映射 (2).基于 ORM 框架完成映射后,即可利用面向对象程序设计语言的简单易用性,又可利用关系型数据库的技术

Ant学习---第一节:Ant安装和简单使用

一.下载 ant 插件,路径如下: http://ant.apache.org/bindownload.cgi 二.安装 ant 插件,解压下载下来的 ant 插件,配置环境变量(最好系统环境变量),如下: ANT_HOME:D:\learn_tool\apache-ant-1.9.4 还要将 ant 解压包中bin文件夹中的内容给配置到 path 环境变量中,如下: path : ;%ANT_HOME%\bin 三.测试 ant 插件是否安装成功,如下: 说明安装成功. 四.ant 小例子 1