汇编基础知识

合集下载

汇编基础入门知识

汇编基础入门知识

汇编基础入门知识汇编语言是一种低级编程语言,用于与计算机硬件进行直接交互。

它是人类可以读懂的机器码的替代品,通过汇编语言,程序员可以控制计算机的底层操作和硬件资源。

在本文中,我们将介绍汇编语言的基础知识,包括语法、数据类型、寄存器和常用指令等。

一、汇编语言的基本概念汇编语言是由一系列的符号和指令组成的。

它与计算机的机器码一一对应,每个汇编指令都对应着一条机器码指令。

通过汇编器,我们可以将汇编语言翻译成机器码,然后由计算机执行。

二、汇编语言的语法和指令格式1. 汇编语言的语法规则汇编语言的语法规则包括指令、伪指令、标号、操作数等几个关键部分。

指令是最基本的语法单位,它用来执行特定的操作,例如将数据从一个地方移到另一个地方。

伪指令是一种特殊的指令,用来给汇编程序提供额外的信息,例如定义常量或者设置程序的起始地址。

标号用来标记程序的不同部分,例如循环或者条件语句。

操作数是指令的操作对象,可以是寄存器、内存地址或者立即数等。

2. 汇编指令的格式每条汇编指令由操作码和操作数组成。

操作码定义了具体的操作,例如将两个数相加或者将数据存储到内存中。

操作数则指定了操作的对象和参数,例如操作的寄存器或者内存地址。

三、汇编语言的数据类型1. 寄存器寄存器是一种用来存储数据的硬件设备。

不同的CPU架构有不同的寄存器,其中有一些是通用寄存器,可以用来存储任意类型的数据。

例如,在x86架构中,我们有AX、BX、CX、DX等通用寄存器。

2. 内存内存是计算机用来存储数据和程序的地方。

在汇编语言中,我们可以通过内存地址来访问存储在内存中的数据。

内存地址由段地址和偏移地址组成,通过将它们相加,我们可以得到实际的内存地址。

四、常用的汇编指令1. 数据传输指令MOV指令用来将数据从一个地方传输到另一个地方。

例如,可以使用MOV指令将寄存器中的数据传输到内存中,或者将一个内存地址中的数据传输到寄存器中。

2. 算术运算指令ADD和SUB指令用来执行加法和减法运算。

汇编语言基础知识

汇编语言基础知识
转换从最低位开始
例 0. 1
01
0
01





÷2
÷2 ÷2
÷2
÷2
÷2
0.640625 0.28125 0.5625 0.125 0.25 0.5
0.101001B=0.640625D
24
5. 二进制与八进制和十六进制间的转换
二进制与八进制和十六进制之间的对应关系很简单: 三位二进制数对应一位八进制数,四位二进制数对 应一位十六进制数。
第一章 基础知识
本章主要学习内容: 1.汇编语言的一般概念 2.学习和使用汇编语言的目的 3.进位计数制及其相互转换 4.带符号数的表示 5.字符的表示 6.基本逻辑运算
4
§1.1 汇编语言的一般概念
计算机程序设计语言可分为机器语言、高级 语言和汇编语言三类。
1. 机器语言 机器语言就是把控制计算机的命令和各种数83. Nhomakorabea汇编语言
(1)定义 虽然高级语言方便了人对计算机的使用,但
其运行效率较低。在一些应用场合,如系统管 理,实时控制等,难于满足要求。因此又希望使 用机器语言。
为了便于记忆和阅读,使用字母和符号来 表示机器语言的命令,用十进制数或十六进制 数来表示数据,这样的计算机程序设计语言就 称为汇编语言。
18
例:将325转换为二进制数,直到余数为0。 首先确定二进制数的最高位 因为29(512)>325>28(256)。因此从K8位开始比较。
减数比较
Ki
325-256=69
K8
69<128
K7
69-64=5
K6
5<32
K5
5<16

汇编语言入门教程

汇编语言入门教程

汇编语言入门教程汇编语言是一种低级机器语言的抽象表示形式,它将计算机底层的指令表示为可读的文本形式。

掌握汇编语言对于理解计算机硬件和编写高效的程序非常重要。

本教程将带您从零开始学习汇编语言的基础知识和编程技巧。

第一部分:介绍和准备工作1.1什么是汇编语言?1.2为什么要学习汇编语言?1.3汇编语言的基本特点和用途1.4开发环境的准备第二部分:汇编语言基础2.1数据表示和计算机内存2.2寄存器和指令2.3内存寻址方式2.4常用汇编指令2.5标志寄存器和条件分支指令第三部分:汇编语言编程技巧3.1数据的传递和处理3.2循环和分支结构3.3子程序的调用和返回3.4输入和输出操作3.5中断处理和异常控制第四部分:实例和应用4.1计算机硬件的控制4.2内存和外设的读写操作4.3实践项目和应用案例第五部分:调试和优化5.1调试汇编程序5.2性能优化和代码压缩技巧5.3代码的移植和扩展在学习汇编语言时,您需要了解计算机的基本结构和组成部分,包括中央处理器(CPU)、寄存器、内存等。

您还需要安装一款支持汇编语言的集成开发环境(IDE),并了解如何进行编译、调试和执行程序。

在学习汇编语言的基础知识时,您将学习如何表示和处理不同类型的数据,例如整数、浮点数和字符串。

您还将学习如何使用寄存器进行数据传输和计算,以及如何使用不同的寻址方式访问内存中的数据。

在学习汇编语言的编程技巧时,您将学习如何使用循环和分支结构进行条件判断和控制流程。

您还将学习如何编写子程序进行模块化的程序设计,并学习如何进行输入和输出操作以及异常处理。

通过实例和应用的学习,您将了解如何使用汇编语言实现一些常见的功能和操作。

例如,您将学习如何控制计算机硬件,如显示器、键盘和鼠标等。

您还将学习如何进行内存和外设的读写操作,以及如何处理中断和异常。

最后,您将学习如何调试和优化汇编程序,以确保程序的正确性和性能。

您将学习如何使用调试工具进行单步调试和变量跟踪,并学习如何进行代码的优化和压缩。

汇编语言基础知识

汇编语言基础知识

汇编语言基础知识汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效地应用汇编语言对其编程,因此,本章对硬件系统结构的问题进行部分探讨,首先介绍了计算机的基本结构、Intel 公司微处理器的发展、计算机的语言以及汇编语言的特点,在此基础上重点介绍寄存器、内存组织等汇编语言所涉及到的基本知识。

1.1 微型计算机概述微型计算机由中央处理器(Central Processing Unit ,CPU )、存储器、输入输出接口电路和总线构成。

CPU 如同微型计算机的心脏,它的性能决定了整个微型计算机的各项关键指标。

存储器包括随机存储器(Random Access Memory ,RAM )和只读存储器(Read Only Memory ,ROM )。

输入输出接口电路用来连接外部设备和微型计算机。

总线为CPU 和其他部件之间提供数据、地址和控制信息的传输通道。

如图1.1所示为微型计算机的基本结构。

外部设备存储器输入输出接口电路中央处理器CPU地址总线数据总线控制总线图1.1 微型计算机基本结构特别要提到的是微型计算机的总线结构,它使系统中各功能部件之间的相互关系变为各个部件面向总线的单一关系。

一个部件只要符合总线结构标准,就可以连接到采用这种总线结构的系统中,使系统功能得到扩展。

数据总线用来在CPU 与内存或其他部件之间进行数据传送。

它是双向的,数据总线的位宽决定了CPU 和外界的数据传送速度,8位数据总线一次可传送一个8位二进制数据(即一个字节),16位数据总线一次可传送两个字节。

在微型计算机中,数据的含义是广义的,数据总线上传送的不一定是真正的数据,而可能是指令代码、状态量或控制量。

地址总线专门用来传送地址信息,它是单向的,地址总线的位数决定了CPU 可以直接寻址的内存范围。

如CPU 的地址总线的宽度为N ,则CPU 最多可以寻找2N 个内存单元。

控制总线用来传输控制信号,其中包括CPU送往存储器和输入输出接口电路的控制信号,如读信号、写信号和中断响应信号等;也包括其他部件送到CPU的信号,如时钟信号、中断请求信号和准备就绪信号等。

汇编语言知识大全

汇编语言知识大全

汇编语言知识大全汇编语言是计算机科学领域的重要组成部分,它是一种低级语言,用于在计算机硬件上进行编程。

了解和掌握汇编语言对于想要深入了解计算机体系结构和进行底层编程的人来说是非常重要的。

本文将为您提供一份汇编语言知识大全,涵盖汇编语言的基础知识、指令集、程序开发和调试技巧等方面。

一、汇编语言的基础知识1. 什么是汇编语言?汇编语言是一种机器语言的符号表示方法,通过使用助记符(mnemonic)代表特定的二进制指令,使得程序员可以更容易地编写和理解机器代码。

2. 汇编语言和高级语言的区别是什么?汇编语言主要是面向机器的,使用指令来直接控制硬件的操作,而高级语言更加抽象,使用更接近自然语言的语法结构,通过编译器或解释器将其翻译为机器码。

3. 为什么需要学习汇编语言?学习汇编语言可以让我们更好地理解计算机的底层工作原理,能够更加高效地编写程序,优化性能,并且在某些特定的应用中,汇编语言可以实现一些高级语言所不能达到的功能。

二、汇编语言的指令集1. 汇编语言的指令格式汇编语言的指令一般包含操作码(Opcode)、操作数(Operand)和注释三个部分,其中操作码表示要执行的操作,操作数表示要操作的数据,而注释则是对指令的解释说明。

2. 汇编语言的常用指令在汇编语言中,常用指令包括数据传输指令、算术和逻辑指令、控制指令等等。

比如MOV指令用于数据传输,ADD指令用于加法操作,JMP指令用于无条件跳转等。

3. 汇编语言的寻址方式寻址方式是指汇编语言中用于定位操作数的方法,常见的寻址方式有直接寻址、间接寻址、寄存器寻址等。

不同的寻址方式适用于不同的操作场景。

三、汇编语言的程序开发1. 程序结构汇编语言的程序通常由代码段、数据段和堆栈段组成。

代码段用于存放程序的指令,数据段用于存放程序的数据,而堆栈段则用于存放程序的运行时信息。

2. 程序调用在汇编语言中,程序之间的调用可以通过CALL和RET指令来实现。

CALL用于调用子程序,将当前代码的执行流程转移到被调用的子程序中,而RET则用于返回调用点。

risc-v 汇编语言编程

risc-v 汇编语言编程

risc-v 汇编语言编程RISC-V是一种基于精简指令集(RISC)的开源指令集架构,它的指令集简单、规范、可扩展,因此在学术界和工业界都备受关注。

本文将介绍RISC-V汇编语言编程的基础知识和一些常用的指令。

一、RISC-V汇编语言基础知识RISC-V汇编语言是一种基于指令集架构的汇编语言,它的语法规范简单易懂。

下面是一些基础知识:1. 寄存器RISC-V有32个通用寄存器,分别用x0~x31表示。

其中x0始终为零寄存器,不能被写入。

x1通常用作返回值寄存器,x2~x11用作临时寄存器,x12~x17用作参数寄存器,x18~x27用作临时寄存器,x28~x31用作保留寄存器。

2. 指令格式RISC-V指令格式分为三种:R型、I型和S型。

R型指令用于寄存器之间的操作,I型指令用于立即数和寄存器之间的操作,S型指令用于存储操作。

3. 标签标签是汇编语言中用于标识代码位置的符号,以“.”开头。

标签通常用于跳转指令的目标地址。

二、常用指令下面介绍一些常用的RISC-V指令:1. 加法指令add x1, x2, x3该指令将x2和x3寄存器中的值相加,结果存储到x1寄存器中。

2. 减法指令sub x1, x2, x3该指令将x2和x3寄存器中的值相减,结果存储到x1寄存器中。

3. 加载指令lw x1, 0(x2)该指令将x2寄存器中的地址加上0,得到的地址处的值存储到x1寄存器中。

4. 存储指令sw x1, 0(x2)该指令将x1寄存器中的值存储到x2寄存器中的地址加上0的位置。

5. 分支指令beq x1, x2, label该指令比较x1和x2寄存器中的值是否相等,如果相等则跳转到label标签处。

6. 跳转指令j label该指令无条件跳转到label标签处。

7. 系统调用指令ecall该指令用于进行系统调用,例如输出字符串。

三、总结本文介绍了RISC-V汇编语言编程的基础知识和常用指令。

RISC-V指令集架构的简单、规范、可扩展使得它在学术界和工业界都备受关注。

[所有分类]汇编语言基础知识

d,e,f打头,头部应加0,如0A8F5H;记数符号 a,b,c,d,e,f 不区别大小写,与ABCDEF等效。
3)十进制数尾部加D(d),但通常可以省略。
5
第一章 汇 编 语 言 基 础 知 识
33.数.数制制间间转转换换
1)十进制数转换二进制数; 2)十进制数转换十六进制数; 3)二进制数十六进制数互相转换;
第一章 汇 编 语 言 基 础 知 识
封面
1
第一章 汇 编 语 言 基 础 知 识
1.1数据表示与运算
1.1.1 1.1.2 1.1.3 1.1.4
数制 编码 有符号数的表示方法 二进制运算
返回第一章
2
第一章 汇 编 语 言 基 础 知 识
1.1.1 数制
[数制涉及三个问题:计数符号 基数和权 计数规则 (1)计数符号
1.1.3 编码
十进制 BCD码
0
0000
1
0001
2
0010
计算机中的数采用二进制数,字母3、符号0等01也1 只
能采用二进制代码(0,1)的排列组合表4 示(0编10码0)。
(两种编码:BCD码、ASCII码)
5
0101
1.
BCD 码(8421码、二──十进制67数)
0110 0111
定用四解位决二十进进制制数数表在示计十一算进位机制十内进部制如数何B。表C89D示码。BC1100D00码10 规
二进制数是计算机内部采用的,并唯一能够 直接被计算机识别的数。4
第一章 汇 编 语 言 基 础 知 识
2. 十六进制数 2. 十六进制数 8a0f.6bH=8×163+10 ×162+0 ×161+15 ×160+6 ×16-

汇编语言复习资料

汇编语言复习资料【引言】汇编语言作为计算机科学中的重要一环,是掌握计算机底层工作原理的基础。

本文将为读者提供一份汇编语言的复习资料,以帮助读者巩固对汇编语言的理解,并加深对底层计算机工作过程的认识。

【一、汇编语言基础知识】1.1 汇编语言的概念和作用汇编语言是一种低级别的计算机语言,与机器语言一一对应,用于编写和调试底层程序。

掌握汇编语言可以更加直接地操作计算机硬件资源,提高程序的执行效率。

1.2 汇编指令与机器指令汇编指令是汇编语言中最基本的单位,包括机器指令和操作数。

机器指令是计算机能够识别和执行的指令,由操作码和操作数组成。

1.3 寄存器和内存寄存器是计算机内部存储器的一种,用于存储和操作数据。

常见的寄存器包括通用寄存器、指针寄存器和标志寄存器。

内存是计算机中的主要存储器,用于存储指令和数据。

1.4 数据表示和运算汇编语言中使用不同的数据格式表示整数、浮点数和字符等数据类型,并提供相应的运算指令进行数据操作。

【二、汇编语言的程序结构】2.1 汇编语言程序的基本结构汇编语言程序包括数据段、代码段和堆栈段。

数据段用于定义和初始化数据,代码段包含程序的执行指令,堆栈段用于存储程序执行过程中的临时数据。

2.2 汇编语言程序的组织方式汇编语言程序可以使用汇编宏、过程和函数来实现模块化组织,提高代码的可读性和可维护性。

2.3 汇编语言程序的调试方法汇编语言程序的调试可以使用调试器进行单步执行、断点设置和变量查看等操作,以实时监控程序的运行状态。

【三、常用的汇编语言指令】3.1 数据定义指令数据定义指令用于定义变量和常量,并分配存储空间。

常用的数据定义指令包括DB、DW和DD等。

3.2 算术和逻辑指令算术和逻辑指令用于进行加减乘除和逻辑运算等操作。

常见的算术和逻辑指令包括ADD、SUB、MUL、DIV和AND、OR等。

3.3 分支和循环指令分支和循环指令用于根据条件进行跳转或循环执行。

常用的分支和循环指令包括JMP、JZ、JCXZ和LOOP等。

Assembly汇编语言基础入门

Assembly汇编语言基础入门汇编语言是一种低级机器语言的表示形式,它使用助记符和符号来代替机器码,方便程序员编写和理解。

在计算机科学领域,汇编语言是一门重要的编程语言,对于理解计算机的工作原理和进行底层的编程调优具有重要作用。

本文将介绍汇编语言的基础知识,包括语法和常用指令的使用。

一、汇编语言概述汇编语言是计算机硬件指令集的一种表示形式,它通过助记符和符号来代表不同的机器指令。

汇编语言与具体的计算机体系结构紧密相关,不同的计算机体系结构使用不同的汇编语言。

汇编语言的优点是直接操作硬件,可以实现高度优化的代码,但是缺点是可移植性差,需要了解底层的硬件细节。

汇编语言通常用于编写驱动程序、操作系统和高性能的应用程序。

二、汇编语言的基本语法1. 汇编语言使用英文助记符作为指令的代号,例如MOV表示数据传送指令,ADD表示加法指令。

2. 汇编语言使用伪指令来定义常量、变量和符号地址,例如DAT 定义数据,ORG定义起始地址。

3. 汇编语言使用标号来表示程序的入口和跳转地址,标号可以是任意合法的字符串。

4. 汇编语言使用寄存器来操作数据,不同的寄存器有不同的用途,例如AX用于存放常用的数据,BX用于存放地址。

5. 汇编语言使用操作数来指定操作的数据,操作数可以是寄存器、内存或立即数。

三、汇编语言的常用指令1. 数据传送指令:MOV指令用于将数据从一个位置拷贝到另一个位置。

2. 算术指令:ADD、SUB、MUL、DIV等指令用于进行基本的算术运算。

3. 逻辑指令:AND、OR、NOT、XOR等指令用于进行逻辑运算。

4. 分支指令:JMP、JE、JNE、JZ、JNZ等指令用于程序的跳转和条件判断。

5. 栈指令:PUSH、POP、CALL、RET等指令用于操作程序的栈空间。

6. 输入输出指令:IN、OUT、INT等指令用于与外部设备进行数据交换。

四、编写汇编程序的步骤编写汇编程序可以分为以下几个步骤:1. 确定程序的功能和需求。

汇编语言基础知识.


4.汇编语言程序设计的意义
学习汇编语言的意义: 1)与硬件密切相关,是学习硬件类课程的先行课 和基础课。 2)有利于理解计算机的工作原理。 3)可直接而有效地控制硬件。 4)执行效率高,占用空间小。 5)特殊应用只能使用汇编语言,如加密解密等。 应该指出的是:在计算机速度大大提高和存储器容 量大大增加的今天,高级语言的使用更为广泛和普遍 (特别是编写大型程序)。
×16-1+11 ×16-2 引入十六进制数的目的是为了描述二进制数。
数的书写方法:
1)二进制数尾部加B(b)。 2)十六进制数尾部加H(h);如记数符号a,b,c, d,e,f打头,头部应加0,如0A8F5H;记数符号 a,b,c,d,e,f 不区别大小写,与ABCDEF等效。 3)十进制数尾部加D(d),但通常可以省略。
二进制的数符集中有两个符号:0和1;
八进制的数符集中有8个符号:0,1,2,3,4,5,6,7;
十 进 制 的 数 符 集 中 有 10 个 符 号 : 0,1,2,3,4,5,6, 7,8,9;
十 六 进 制 的 数 符 集 中 有 16 个 符 号 : 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。
★集成开发环境:开发工具包括文本编辑、翻译程序、 调试程序、连接程序等,在DOS时代,其各自是独立 的;现在将其集成为一个软件,即为“集成开发环 境”。
返回1.1
1.1.3计算机的程序设计语言
低级语言 程序设计语言
1.机器语言 2.汇编语言
3.高级语言 C/C++、JAVA、 DELPHI……
1.机器语言
负数原码:符号位为1,数值位照抄。 例:X=+25=+00011001B [X]原=00011001B
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章基础知识1.1 进位计数制1.2 不同基数的数之间的转换1.2.1 二进制数和十进制数之间的转换1.2.1.1 二进制转换为十进制各位按权求和1.2.1.2 十进制转换为二进制除2取余1.2.2 二进制和十六进制数之间的转换对于一个二进数,将它从低位到高位每4位一组,每组用一个十六进制数来表示。

对于一个十六进制数,将它的每一位用4位二进制数表示。

例: 0011 0101 1011111135 B F即 0011010110111111B = 35BFH例: A 1 9 C1010 0001 10011100即 A19CH = 1010000110011100B1.2.3 十六进制和十进制之间的转换1.2.3.1 十六进制转换为十进制各位按权求各1.2.3.2 十进制转换为十六进制除16取余1.3 二进制数和十六进制数的运算1.4 数和字符的表示1.4.1 计算机中数的表示1.4.1.1 补码表示法原码:最高位为符号位。

0的表示不唯一反码:正数的反码同原码,负数的反码数值位与原码相反。

0的表示不唯一。

补码:正数的补码与原码相同;负数的补码表示:相应的正数按位求反,末位加1。

符号扩展:是指一个数从位数较少扩展到位数较多,如从8位扩展到16位,或从16位扩展到32位。

对于用补码表示的数,正数的符号扩展在前面补0,负数的符号扩展在前面补1,假设机器字长为16位,[+46]补码 = 002EH,[-46]补码 = FFD2H。

1.4.1.2 n位补码的表数范围n位补码的表数范围N是:-2的n-1次方 <= N <= 2的n-1次方-1如:用8位二进制补码表示带符号的数的表数范围是-128 <= N <= 1271.4.1.3 补码的加、减法在机器里,补码减法是通过对减数求补后把减法转换为加法进行的。

符号位参加运算,能自动得到正确结果。

例:假设机器字长为8位,计算25+(-32)0001 1001+ 1110 0000------------1111 1001结果为-7的补码。

在某些情况下,要处理的数全是正数(比如表示地址的数),就没有必要保留符号位了,可以把最高有效位也作为数值处理,这样的数称为无符号数。

1.4.2 计算机中字符的表示ASCII码用一个字节(8位二进制码)来表示一个字符,其中低7位为字符的ASCII值,最高位一般用作校验位。

第二章 8086计算机组织2.1 80x86微处理器系列概况2.2 基于8086的微计算机系统2.2.1 8086微处理器的基本组成1. 执行部件(EU)2. 总线接口部件(BIU)2.2.2 微型计算机的软件系统1.系统软件2.应用软件2.3 8086寄存器组1.通用寄存器通用寄存器包括了8个16位的寄存器:AX、BX、CX、DX、SP、BP、DI及SI。

其中AX、BX、CX、DX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。

它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。

这4个通用数据寄存器除通用功能外,还有如下专门用途:AX作为累加器用,所以它是算术运算的主要寄存器。

在乘除指令中指定用来存放操作数。

另外,所有的I/O指令都使用AX或AL与外部设备传送信息。

BX在计算存储器地址时,可作为基址寄存器使用。

CX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。

DX在作双字长运算时,可把DX和AX组合在一起存放一个双字长数,DX用来存放高16位数据。

此外,对某些I/O操作,DX可用来存放I/O的端口地址。

SP、BP、SI、DI四个16位寄存器可以象数据寄存器一样在运算过程中存放操作数,但它们只能以字(16位)为单位使用。

此外,它们更经常的用途是在存储器寻址时,提供偏移地址。

因此,它们可称为指针或变址寄存器。

SP称为堆栈指针寄存器,用来指出栈顶的偏移地址。

BP称为基址指针寄存器,在寻址时作为基地址寄存器使用,但它必须与堆栈段寄存器SS联用来确定堆栈段中的存储单元地址。

SI为源变址寄存器,在串处理指令中,SI作为隐含的源变址寄存器与DS联用,以确定数据段中的存储单元地址,并有自动增量和自动减量的变址功能。

DI为目的变址寄存器,在串处理指令中,DI和附加段寄存器ES联用,以达到在附加段中寻址的目的,然后DI 自动增量或减量。

2.专用寄存器8086的专用寄存器包括IP、SP和FLAGS三个16位寄存器。

IP为指令指针寄存器,它用来存放将要执行的下一条指令地址的偏移量,它与段寄存器CS联合形成代码段中指令的物理地址。

SP为堆栈指针寄存器,它与堆栈段寄存器联用来确定堆栈段中栈顶的地址,也就是说SP用来存放栈顶的偏移地址。

FLAGS为标志寄存器,这是一个存放条件码标志、控制标志的16位寄存器。

3.段寄存器8086微处理器共有4个16位的段寄存器,在寻址内存单元时,用它们直接或间接地存放段地址。

代码段寄存器CS:存放当前执行的程序的段地址。

数据段寄存器DS:存放当前执行的程序所用操作数的段地址。

堆栈段寄存器SS:存放当前执行的程序所用堆栈的段地址。

附加段寄存器ES:存放当前执行程序中一个辅助数据段的段地址。

2.4 8086微处理器的存储器管理1.存储单元的地址和内容在存储器里以字节为编址单位,地址在机器中用无符号二进制数表示。

对于字、双字、四字数据类型,其低地址中存放低位字节数据,高地址中存放高位字节数据。

在读写数据时只需给出最低单元的地址号即可,然后依次存取后续字节。

所以,同一个地址既可看作字节单元的地址,又可看作字单元、双字单元或4字单元的地址,这要根据使用时的情况来确定。

而且多字节数据在存储器中是"逆序存放"的。

在8086中,访问存储器(要求取数或存数)都是以字为单位进行的,也就是说,机器是以偶地址访问存储器的。

这样,对于奇地址的字单元,要取一个字需要访问二次存储器,这就需要花费较多的时间。

2.存储器分段管理在8086中,物理地址是指由地址引线送出的20位地址码。

这20位地址码送到存储器经过译码,最终选定一个存储单元进行读/写。

偏移地址是相对于某段首地址的段内偏移量。

逻辑地址是在程序中对存储器地址的一种表示方法,由某段的段地址和段内偏移地址组成。

写成:段地址 : 偏移地址。

存储器地址分段的具体做法是:把1MB的存储器空间分成若干段,每段的容量最大64KB,这样段内地址就可以用16位来表示。

实际上,可以根据编程的需要来确定段的大小,它可以是64K字节范围内的任意多个字节。

8086规定:从0地址开始,每16个字节为一小段,段的起始地址必须从任一小段(paragraph)的首地址开始,也就是说,段地址表示成20位的二进制地址码,其最低4位必须是"0"。

存储器采用分段管理后,每个段的首地址(称为段基地址或段地址)保存在8086内部的CS、DS、SS和ES四个16位的寄存器中,可以对段寄存器设置不同的值以指向不同的段。

16位的段地址和16位的偏移地址组合形成20位的物理地址,这就是8086的工作方式,这在80x86的寻址模式中称为实模式。

2.5 外部设备外部设备与主机(微处理器和存储器)的通信是通过外设接口进行的。

每个接口包括一组寄存器。

一般说来,这些寄存器有三种不同的用途:1. 数据寄存器:用来存放要在外设和主机间传送的数据,这种寄存器实际上起缓冲器的作用。

2. 状态寄存器:用来保存外部设备或接口的状态信息,以便微处理器在必要时测试外设状态,了解外设的工作情况。

3. 命令寄存器:CPU给外设或接口的控制命令通过此寄存器送给外部设备。

例如,CPU要启动磁盘工作,必须发出启动命令等。

各种外部设备都有以上三种类型的寄存器,只是每个接口所配备的寄存器数量是根据设备的需要确定的。

为了便于主机访问外设,外设中的每个寄存器给予一个端口地址(又称端口号),由这些端口地址组成了一个独立于内存储器的I/O地址空间。

80x86的I/O地址空间可达64KB,所以端口地址的范围是0000~FFFFH,用16位二进制代码来表示。

端口可以是8位或16位。

在80x86系列机中,由于I/O地址空间是独立编址的,所以系统提供了访问外设的输入/输出指令IN和OUT。

为了便于用户使用外设,8086提供了两种类型的例行程序供用户调用。

一种是BIOS(Basic Input/Output System),另一种是DOS(Disk Operating System)功能调用。

它们都是系统编制的子程序,通过中断方式转入所需要的子程序去执行。

第三章 8086的寻址方式和指令系统3.1 8086的寻址方式计算机中的指令由操作码字段和操作数字段两部分组成。

操作数字段可以有一个、二个或三个,通常称为一地址、二地址或三地址指令。

3.1.1 与数据有关的寻址方式3.1.1.1 立即寻址方式(Immediate addressing)操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为立即数。

如:MOV AX, 3064H指令执行后,(AX)= 3064H不能直接给段寄存器和标志寄存器赋予立即数。

如:MOV DS, 1250H是错误的。

3.1.1.2 寄存器寻址方式(Register addressing)它使用寄存器来存放要处理的操作数,寄存器号由指令指定。

如:MOV AX, BX源寄存器和目的寄存器的位数必须一致。

如:MOV CL, BX是错误指令。

有效地址EA(Effective Address)的概念:在8086里,把操作数的偏移地址称为有效地址。

3.1.1.3 直接寻址方式(Direct addressing)操作数存放在存储单元中,而这个存储单元的有效地址就在指令的操作码之后,操作数的物理地址可通过((DS)×16)再加上这个有效地址形成。

在汇编语言指令中,可以用符号地址(变量名或标号)代替数值地址。

例如: MOV AX, DATA或 MOV AX, [DATA]这里DATA是存放操作数单元的符号地址。

直接寻址方式默认操作数在数据段中,如果操作数定义在其它段中,则应在指令中指定段跨越前缀。

例如: MOV AX, ES:NUMBER或 MOV AX, ES:[NUMBER]这里NUMBER是附加段中的字变量。

3.1.1.4 寄存器间接寻址方式(Register indirect addressing)这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI来保存操作数的有效地址。

如果指令中使用的寄存器是SI、DI和BX,则操作数在数据段中,((DS)×16)再加上存器中的有效地址形成20位物理地址;如果指令中使用的寄存器是BP,则操作数在堆栈段中,((SS)×16)再加上BP中的有效地址形成20位物理地址。

相关文档
最新文档