指令系统及寻址方式.ppt
《指令系统及寻址方式.ppt》由会员分享,可在线阅读,更多相关《指令系统及寻址方式.ppt(103页珍藏版)》请在三一办公上搜索。
1、微机原理与汇编语言,第4章 8086指令系统及寻址方式 4.1 汇编语言的基本概念 4.2 寻址方式 4.3 指令集 4.4 伪指令 4.5 表达式与操作符,第4章 MASM汇编基础及上机,4.1 MASM汇编语言基础4.1.1 汇编语言的基本概念计算机语言的发展,#include stdafx.h#include stdio.h int main(int argc,char*argv)int a,b,c;a=1;b=2;c=a+b;printf(c=%dn,c);return 0;,例1 编程实现 c=a+b,并在屏幕上显示出结果。,编译后的目标文件达到3.59KB,data segment
2、a db?b db?c db?string db c=$data endscode segmentmain proc far assume cs:code,ds:data,es:datastart:push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,ax,mov a,1 mov b,2 mov al,a add al,b mov c,al lea dx,string mov ah,09 int 21h add c,30h mov dl,c mov ah,2 int 21h mov dl,0ah int 21h mov dl,0dh in
3、t 21h retmain endpcode ends end start,例 2.C=a+b,汇编后的目标文件只有638字节,第4章 MASM汇编基础及上机,4.1 MASM汇编语言基础4.1.1 汇编语言的基本概念机器语言机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。指令:01010000电平脉冲:,第4章 MASM汇编基础及上机,4.1 MASM汇编语言基础4.1.1 汇编语言的基本概念机器语言程序员们将 0、1 数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。示例用8086CPU完成运算:S=768+12
4、288 1280,第4章 MASM汇编基础及上机,4.1 MASM汇编语言基础4.1.1 汇编语言的基本概念机器语言S=768+12288-1280机器码:假如将程序错写成以下这样,请找处错误:,第4章 MASM汇编基础及上机,4.1 MASM汇编语言基础4.1.1 汇编语言的基本概念机器语言在显示器上输出“welcome to masm”。机器码看到这样的程序,你会有什么感想?如果程序里有一个“1”被误写为“0”,又如何去查找呢?,welcome to masm 机器码:,第4章 MASM汇编基础及上机,4.1 MASM汇编语言基础4.1.1 汇编语言的基本概念机器语言与汇编语言汇编语言的主
5、体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。汇编指令是机器指令的助记符。,第4章 MASM汇编基础及上机,4.1 MASM汇编语言基础4.1.1 汇编语言的基本概念机器语言与汇编语言机器指令:操作:寄存器BX的内容送到AX中汇编指令:MOV AX,BX这样的写法与人类语言接近,便于阅读和记忆。,汇编语言的特点 面向机器的低级语言,通常是为特定的计算 机或计算机系列专门设计的。保持了机器语言的优点,具有直接和简捷 的特点。可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。目标代码简短,占用内存少,执行速度快,是高效
6、的程序设计语言。经常与高级语言配合使用,应用十分广泛。,汇编语言的应用系统程序、效率代码、I/O驱动程序 70%以上的系统软件是用汇编语言编写的。某些快速处理、位处理、访问硬件设备等 高效程序是用汇编语言编写的。高级绘图程序、视频游戏程序一般是用汇 编语言编写的。,第4章 MASM汇编基础及上机,4.1 MASM汇编语言基础4.1.1 汇编语言的基本概念机器语言与汇编语言计算机能读懂的只有机器指令,那么如何让计算机执行程序员用汇编指令编写的程序呢?,第4章 MASM汇编基础及上机,4.1 MASM汇编语言基础4.1.2 MASM汇编语言Assembly LanguageMASM是微软公司开发的
7、汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开人员必须在Windows下进行开发。MASM版本至今在不断的更新,现有最高版本号为MASM32 12.0,第4章 MASM汇编基础及上机,4.1 MASM汇编语言基础4.1.3 汇编语言语句格式,第4章 MASM汇编基础及上机,4.1 MASM汇编语言基础4.1.4 语句类别汇编语言由以下3类组成:1、指令语句2、伪指令语句 3、宏指令语句宏指令就是基本汇编指令的某种特定集合,这意味着一串复杂而常用的汇编指令往往可以化
8、为一条简单易懂的宏指令。汇编语言的核心是指令语句,它决定了汇编语言的特性。,第4章 8086指令系统及寻址方式,4.2 寻址方式操作数操作数:指令中的常数,代表常数的一个标识符或表达式,或者是存放操作数的地址。源操作数SRC:操作过程中保持不变,可使用累加器、寄存器、存储单元和立即数。目的操作数DST:操作后被源操作数替代,可使用累加器、寄存器和存储单元。操作数OPRD:可使用通用寄存器和存储单元。操作数Reg:必须是一个16位的通用寄存器表达式是操作数中的一种,它是由常量、变量、寄存器、标号与一些操作符相组合的序列,可以有数值表达式和地址表达式两种,第4章 8086指令系统及寻址方式,4.2
9、 寻址方式当数据存放在内存中的时候,我们可以用多种方式来给定这个内存单元的偏移地址,这种定位内存单元的方法一般被称为寻址方式操作数的寻址方式用确定操作数地址的方式找到操作数。立即寻址寄存器寻址存储器寻址,第4章 8086指令系统及寻址方式,4.2 寻址方式1.立即寻址方式操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数成为立即数。立即寻址方式用来表示常数,经常用于给寄存器赋初值,并且只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应与目的操作数长度一致。MOV AX,3064H,第4章 8086指令系统及寻址方式,4.2 寻址方式2.寄存器寻址
10、方式操作数在寄存器中,指令指定寄存器号。这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以得到较高的运算速度。MOV AX,BX 指令执行前(AX)=3046H,(BX)=1234H 则指令执行后(AX)=1234H,(BX)=1234H,第4章 8086指令系统及寻址方式,4.2 寻址方式3.存储器寻址方式操作数在存储器中,需通过不同的方式求得操作数的地址,从而获得操作数。操作数的地址即为物理地址。寻址得到的地址为偏移地址。直接寻址方式:MOV AX,2000H默认在DS寄存器中,如果(DS)=3000H,则指令执行后(AX)=3050H,5 0,3 0,AX,320
11、00,30000,3.存储器寻址方式,第4章 8086指令系统及寻址方式,4.2 寻址方式演示1、直接寻址演示2、寄存器间接寻址演示3、寄存器相对寻址演示4、基址变址寻址演示5、相对基址变址寻址,第4章 8086指令系统及寻址方式,4.3 指令集不同机器的指令系统各不相同,但是它们要执行的基本操作、寻址方式等,是共性的。数据传送类指令程序控制类指令标志处理和CPU控制类指令系统功能调用,第4章 8086指令系统及寻址方式,4.3 指令集4.3.1 数据传送类指令1.数据通路与类型匹配(DSTSRC)通用寄存器通用寄存器通用寄存器段寄存器通用寄存器内存通用寄存器立即数段寄存器通用寄存器段寄存器内
12、存内存通用寄存器内存段寄存器内存立即数,第4章 8086指令系统及寻址方式,4.3 指令集4.3.1 数据传送类指令大多数指令必须遵守以下规则:SRC和DST的类型必须匹配(8位对8位,16位对16位)立即数不能作为DST,立即数不能送段寄存器SRC和DST不能同时为内存操作数(串指令除外)SRC和DST不能同时为段寄存器段寄存器CS不能作为DST,第4章 8086指令系统及寻址方式,4.3 指令集4.3.1 数据传送类指令1.MOV指令:传送指令指令格式:MOV DST,SRC指令功能:DST(SRC),第4章 8086指令系统及寻址方式,4.3 指令集4.3.1 数据传送类指令1.MOV指
13、令:传送指令表达方式:(1)将数据直接送入寄存器。MOV AX,20H(2)将一个寄存器中的内容送入另一个寄存器中。MOV AX,BX(3)将一个内存单元中的内容送入一个寄存器。MOV AX,1000H 其中,表示一个内存单元,1000H表示内存单元的偏移地址,段地址默认放在DS中。(4)将一个寄存器中的内容送入一个内存单元。MOV 1000H,BX(5)将一个段寄存器中的内容送入一个寄存器。MOV AX,DS,第4章 8086指令系统及寻址方式,4.3 指令集4.3.1 数据传送类指令2.XCHG指令:数据交换指令指令格式:XCHG OPR1,OPR2指令功能:(OPR1)(OPR2)OPR
14、表示操作数。不能同时都为内存操作数。任何一个操作数都不能为段寄存器。任何一个操作数不能为立即数。通用寄存器之间的数据交换XCHG DI,BX通用寄存器与存储器之间的数据交换XCHG BYTE_VALUE,BL,第4章 8086指令系统及寻址方式,4.3 指令集4.3.1 数据传送类指令3.PUSH、POP、PUSHF和POPF指令堆栈指令使用规则:堆栈处于堆栈段中,因而其段地址存放于SS寄存器中。堆栈只有一个出口,所以只有一个堆栈指针寄存器SP。SP总指向当前的栈顶。这四条堆栈指令只能做字操作。PUSH和POP指令可以使用除立即数以外的其他寻址方式。PUSH和POP指令可以指定段寄存器作为操作
15、数,但POP指令不允许使用CS寄存器。堆栈指令均不影响标志位。,push、pop指令,push和pop指令是可以在寄存器和内存之间传送数据的。栈空间当然也是内存空间的一部分,它只是一段可以以一种特殊的方式进行访问的内存空间。push和pop指令的格式(1)push 寄存器:将一个寄存器中的数据入栈pop寄存器:出栈,用一个寄存器接收出栈的数据例如:push ax pop bx,push和pop指令的格式(2)push 段寄存器:将一个段寄存器中的数据入栈pop段寄存器:出栈,用一个段寄存器接收出栈的数据例如:push ds pop espush和pop指令的格式(3)push内存单元:将一个内
16、存单元处的字入栈(栈操作都是以字为单位)pop 内存单元:出栈,用一个内存字单元接收出栈的数据例如:push 0 pop 2 指令执行时,CPU 要知道内存单元的地址,可以在 push、pop 指令中给出内存单元的偏移地址,段地址在指令执行时,CPU从ds中取得。,编程:将10000H1000FH 这段空间当作栈,初始状态是空的,将 AX、BX、DS中的数据入栈。,编程:(1)将10000H1000FH 这段空间当作栈,初始状态是空的;(2)设置AX=001AH,BX=001BH;(3)将AX、BX中的数据入栈;(4)然后将AX、BX清零;(5)从栈中恢复AX、BX原来的内容。,分析,结论从上
17、面的程序我们看到,用栈来暂存以后需要恢复的寄存器中的内容时,出栈的顺序要和入栈的顺序相反,因为最后入栈的寄存器的内容在栈顶,所以在恢复时,要最先出栈。,编程:(1)将10000H1000FH 这段空间当作栈,初始状态是空的;(2)设置AX=002AH,BX=002BH;(3)利用栈,交换 AX 和 BX 中的数据。,push、pop指令,我们如果要在10000H处写入字型数据2266H,可以用以下的代码完成:mov ax,1000H mov ds,ax mov ax,2266H mov 0,ax补全下面的代码,完成同样的功能:在10000H处写入字型数据2266H。_ _ _ mov ax,2
18、266H push ax要求:不能使用“mov 内存单元,寄存器”这类指令,问题分析,我们看需补全代码的最后两条指令,将ax中的2266H压入栈中,也就是说,最终应由push ax将2266H写入10000H处。问题的关键就在于:如何使push ax访问的内存单元是10000H。Push指令是入栈指令。(注意执行过程)完成程序 mov ax,1000H mov ss,ax mov sp,0010H mov ax,2266H push ax,问题分析(续),结论push、pop 实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的
19、地址不是在指令中给出的,而是由SS:SP指出的。同时,push和pop指令还要改变 SP 中的内容。我们要十分清楚的是,push和pop指令同mov指令不同,CPU执行mov指令只需一步操作,就是传送,而执行push、pop指令却需要两步操作。执行push时:先改变SP,后向SS:SP处传送。执行pop时:先读取SS:SP处的数据,后改变SP。,注意,push、pop 等栈操作指令,修改的只是SP。也就是说,栈顶的变化范围最大为:0FFFFH。提供:SS、SP指示栈顶;改变SP后写内存的入栈指令;读内存后改变SP的出栈指令。这就是8086CPU提供的栈操作机制。,第4章 8086指令系统及寻址
20、方式,4.3 指令集4.3.1 数据传送类指令4.LEA、LDS和LES地址传送指令:把地址送到指定寄存器。LEA reg,src;将源操作数的偏移地址送入寄存器LDS reg,src;将源操作数中的双字内容送入寄存器及段寄存器DS中LES reg,src;将源操作数中的双字内容送入寄存器及段寄存器ES中,地址传送类指令,装入有效地址指令格式:LEA DST,SRC功能:将源操作数的有效地址传送到目标寄存器中说明:源操作数一定为存储器操作数,目的操作数为16位通用寄存器。例如:LEA BX,VALUEBX 如果(BX)=2000H,VALUE的偏移地址为1000H,则指令执行后(BX)=200
21、0H+1000H=3000H,EA=VALUE+(BX)=1000H+2000H=3000HBX,0000H,3000H,34H12H,DS:2000H,地址传送类指令,装入地址指针指令格式:LDS DST,SRC LES DST,SRC功能:将段基值和偏移量分别送到DST和SRC说明:一个存储单元的逻辑地址是由16位段地址和16位偏移地址组成的,可用4个存储单元存放,其中段地址存放在两个高字节单元,偏移地址存放在两个低字节单元。DS中存放段地址,DST存放偏移地址。如果是LES指令,则段地址存放在ES段寄存器中。例如:LDS AX,2000H,若(DS)=2000H,则指令执行后,(DS)=
22、5678H,(AX)=1234H。,偏移量,段基值,22000H,34H,12H,78H,56H,偏移量,段基值,32位地址指针,例:LEA BX,BX+SI+0F62H LDS SI,10H LES DI,BX,40 H00 H00 H30 H,TABLE(DS):1000H,MOV BX,TABLE;(BX)=0040HMOV BX,OFFSET TABLE;(BX)=1000HLEA BX,TABLE;(BX)=1000HLDS BX,TABLE;(BX)=0040H;(DS)=3000HLES BX,TABLE;(BX)=0040H;(ES)=3000H,注意:*不影响标志位*REG
23、不能是段寄存器*SRC 必须为存储器寻址方式,第4章 8086指令系统及寻址方式,4.3 指令集4.3.1 数据传送类指令5.IN、OUT和XLAT累加器专用传输指令:OUT 和 IN 在汇编中是端口读写操作指令。端口是主机与外设进行数据交换使用的,分为数据端口,状态端口和控制端口三种。PC机给每一个端口分配了一个地址,所有端口成线性排列,形成一个独立于内存空间的I/O地址空间,一般用十六进制表示。8086中,端口地址的范围是0000H-FFFFH。例如:IN AL,21H 表示从21H端口读一个字节数据到AL;OUT 21H,AL 表示将AL持有的数据写入21H端口 需要注意的是:数据输入输
24、出时的地址要放在DX中,数据以AX作传输媒介,具体需要根据传输位来决定是否选用AL、AH或DL、DH。,累加器专用传送指令(只限使用AX或AL)输入指令 IN(I/O CPU)长格式:IN AL,PORT(字节)IN AX,PORT(字)执行操作:(AL)(PORT)(字节)(AX)(PORT+1,PORT)(字)短格式:IN AL,DX(字节)IN AX,DX(字)执行操作:(AL)(DX)(字节)(AX)(DX)+1,(DX)(字),输出指令 OUT(CPU I/O)长格式:OUT PORT,AL(字节)OUT PORT,AX(字)执行操作:(PORT)(AL)(字节)(PORT+1,PO
25、RT)(AX)(字)短格式:OUT DX,AL(字节)OUT DX,AX(字)执行操作:(DX)(AL)(字节)(DX)+1,(DX)(AX)(字),注意:*不影响标志位*前256个端口号00HFFH可直接在指令中指定(长格式)*如果端口号 256,端口号 DX(短格式)例:IN AX,28H;表示从28H端口读一个字节数据到AX MOV DATA_WORD,AX例:MOV DX,3FCH IN AX,DX;表示从3FCH地址中取出的数字所代表的 端口读一个字节数据到AX 例:OUT 21H,AL;表示将AL持有的数据写入21H端口 例:测试某状态寄存器(端口号27H)的第2位是否为1 IN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指令系统 寻址 方式

链接地址:https://www.31ppt.com/p-5980063.html