




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理与汇编语言第4章8086指令系统及寻址方式
4.1汇编语言的基本概念4.2寻址方式4.3指令集4.4伪指令4.5表达式与操作符.第4章MASM汇编基础及上机4.1MASM汇编语言基础4.1.1汇编语言的基本概念计算机语言的发展机器语言FORTRANBASICCOBOLPASCALC/C++JAVA...汇编语言高级语言.
#include"stdafx.h"#include"stdio.h"intmain(intargc,char*argv[]){inta,b,c;a=1; b=2; c=a+b; printf("c=%d\n",c); return0;}例1编程实现c=a+b,并在屏幕上显示出结果。编译后的目标文件达到3.59KB.datasegmentadb?bdb?cdb?stringdb'c=$'dataendscodesegmentmainprocfarassumecs:code,ds:data,es:datastart:pushdssubax,axpushaxmovax,datamovds,axmoves,ax
mova,1movb,2moval,aaddal,bmovc,alleadx,stringmovah,09int21haddc,30hmovdl,cmovah,2int21hmovdl,0ahint21hmovdl,0dhint21hretmainendpcodeendsendstart例2.C=a+b汇编后的目标文件只有638字节.第4章MASM汇编基础及上机4.1MASM汇编语言基础4.1.1汇编语言的基本概念机器语言机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。指令:01010000电平脉冲:.第4章MASM汇编基础及上机4.1MASM汇编语言基础4.1.1汇编语言的基本概念机器语言程序员们将0、1数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。示例用8086CPU完成运算:S=768+12288–1280.第4章MASM汇编基础及上机4.1MASM汇编语言基础4.1.1汇编语言的基本概念机器语言S=768+12288-1280机器码:101100000000000000000011000001010000000000110000001011010000000000000101假如将程序错写成以下这样,请找处错误:101100000000000000000011000001010000000000110000000101101000000000000101.第4章MASM汇编基础及上机4.1MASM汇编语言基础4.1.1汇编语言的基本概念机器语言在显示器上输出“welcometomasm”。
机器码看到这样的程序,你会有什么感想?如果程序里有一个“1”被误写为“0”,又如何去查找呢?.0001111010111000000000000000000001010000101110001100011000001111100011101101100010110100000001101011000000000000101101110000011110111001000000000000000010110110000110001011001001001111110011010001000010110100000000101011011100000000101101100000000010110010000000001100110100010000101101000000100110001101000101100010101000000000110011010010000110110100000010101000110100010110001100010000000011001101001000011011010000000110101100000001010010110111000110011011010100001011101100010001001110110110000011011011001000111100110011010001000011010100000000101101011100000000110100000000110011010010000101001100110100010000101101000000100110001101000101100000000000000000110011010010000111001011welcometomasm机器码:.第4章MASM汇编基础及上机4.1MASM汇编语言基础4.1.1汇编语言的基本概念机器语言与汇编语言汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。汇编指令是机器指令的助记符。.第4章MASM汇编基础及上机4.1MASM汇编语言基础4.1.1汇编语言的基本概念机器语言与汇编语言机器指令:1000100111011000操作:寄存器BX的内容送到AX中汇编指令:MOVAX,BX这样的写法与人类语言接近,便于阅读和记忆。.汇编语言的特点
面向机器的低级语言,通常是为特定的计算机或计算机系列专门设计的。保持了机器语言的优点,具有直接和简捷的特点。可有效地访问、控制计算机的各种硬件设备,
如磁盘、存储器、CPU、I/O端口等。目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。经常与高级语言配合使用,应用十分广泛。.汇编语言的应用系统程序、效率代码、I/O驱动程序
70%以上的系统软件是用汇编语言编写的。某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。高级绘图程序、视频游戏程序一般是用汇编语言编写的。.第4章MASM汇编基础及上机4.1MASM汇编语言基础4.1.1汇编语言的基本概念机器语言与汇编语言计算机能读懂的只有机器指令,那么如何让计算机执行程序员用汇编指令编写的程序呢?.第4章MASM汇编基础及上机4.1MASM汇编语言基础4.1.2MASM汇编语言Assembly
LanguageMASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开人员必须在Windows下进行开发。MASM版本至今在不断的更新,现有最高版本号为MASM3212.0
.第4章MASM汇编基础及上机4.1MASM汇编语言基础4.1.3汇编语言语句格式.第4章MASM汇编基础及上机4.1MASM汇编语言基础4.1.4语句类别汇编语言由以下3类组成:1、指令语句2、伪指令语句3、宏指令语句宏指令就是基本汇编指令的某种特定集合,这意味着一串复杂而常用的汇编指令往往可以化为一条简单易懂的宏指令。
汇编语言的核心是指令语句,它决定了汇编语言的特性。.第4章8086指令系统及寻址方式4.2寻址方式操作数操作数:指令中的常数,代表常数的一个标识符或表达式,或者是存放操作数的地址。源操作数SRC:操作过程中保持不变,可使用累加器、寄存器、存储单元和立即数。目的操作数DST:操作后被源操作数替代,可使用累加器、寄存器和存储单元。操作数OPRD:可使用通用寄存器和存储单元。操作数Reg:必须是一个16位的通用寄存器表达式是操作数中的一种,它是由常量、变量、寄存器、标号与一些操作符相组合的序列,可以有数值表达式和地址表达式两种.第4章8086指令系统及寻址方式4.2寻址方式当数据存放在内存中的时候,我们可以用多种方式来给定这个内存单元的偏移地址,这种定位内存单元的方法一般被称为寻址方式操作数的寻址方式用确定操作数地址的方式找到操作数。立即寻址寄存器寻址存储器寻址.第4章8086指令系统及寻址方式4.2寻址方式1.立即寻址方式操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数成为立即数。立即寻址方式用来表示常数,经常用于给寄存器赋初值,并且只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应与目的操作数长度一致。 MOVAX,3064H6430AX.第4章8086指令系统及寻址方式4.2寻址方式2.寄存器寻址方式操作数在寄存器中,指令指定寄存器号。这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以得到较高的运算速度。 MOVAX,BX指令执行前(AX)=3046H,(BX)=1234H则指令执行后(AX)=1234H,(BX)=1234H.第4章8086指令系统及寻址方式4.2寻址方式3.存储器寻址方式操作数在存储器中,需通过不同的方式求得操作数的地址,从而获得操作数。操作数的地址即为物理地址。寻址得到的地址为偏移地址。直接寻址方式:MOVAX,[2000H]默认在DS寄存器中,如果(DS)=3000H,则指令执行后(AX)=3050H5030AX3200030000.3.存储器寻址方式.第4章8086指令系统及寻址方式4.2寻址方式演示1、直接寻址演示2、寄存器间接寻址演示3、寄存器相对寻址演示4、基址变址寻址演示5、相对基址变址寻址......第4章8086指令系统及寻址方式4.3指令集不同机器的指令系统各不相同,但是它们要执行的基本操作、寻址方式等,是共性的。数据传送类指令程序控制类指令标志处理和CPU控制类指令系统功能调用.第4章8086指令系统及寻址方式4.3指令集4.3.1数据传送类指令1.数据通路与类型匹配(DST←SRC)通用寄存器←通用寄存器通用寄存器←段寄存器通用寄存器←内存通用寄存器←立即数段寄存器←通用寄存器段寄存器←内存内存←通用寄存器内存←段寄存器内存←立即数.第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指令:传送指令指令格式:MOVDST,SRC指令功能:DST←(SRC).第4章8086指令系统及寻址方式4.3指令集4.3.1数据传送类指令1.MOV指令:传送指令表达方式:(1)将数据直接送入寄存器。
MOVAX,20H(2)将一个寄存器中的内容送入另一个寄存器中。
MOVAX,BX(3)将一个内存单元中的内容送入一个寄存器。MOVAX,[1000H]其中,[…]表示一个内存单元,1000H表示内存单元的偏移地址,段地址默认放在DS中。(4)将一个寄存器中的内容送入一个内存单元。MOV[1000H],BX(5)将一个段寄存器中的内容送入一个寄存器。MOVAX,DS.第4章8086指令系统及寻址方式4.3指令集4.3.1数据传送类指令2.XCHG指令:数据交换指令指令格式:XCHGOPR1,OPR2指令功能:(OPR1)←→(OPR2)OPR表示操作数。不能同时都为内存操作数。任何一个操作数都不能为段寄存器。任何一个操作数不能为立即数。通用寄存器之间的数据交换XCHGDI,BX通用寄存器与存储器之间的数据交换XCHGBYTE_VALUE,BL.第4章8086指令系统及寻址方式4.3指令集4.3.1数据传送类指令3.PUSH、POP、PUSHF和POPF指令堆栈指令使用规则:堆栈处于堆栈段中,因而其段地址存放于SS寄存器中。堆栈只有一个出口,所以只有一个堆栈指针寄存器SP。SP总指向当前的栈顶。这四条堆栈指令只能做字操作。PUSH和POP指令可以使用除立即数以外的其他寻址方式。PUSH和POP指令可以指定段寄存器作为操作数,但POP指令不允许使用CS寄存器。堆栈指令均不影响标志位。.push、pop指令push和pop指令是可以在寄存器和内存之间传送数据的。栈空间当然也是内存空间的一部分,它只是一段可以以一种特殊的方式进行访问的内存空间。push和pop指令的格式(1)push寄存器:将一个寄存器中的数据入栈pop寄存器:出栈,用一个寄存器接收出栈的数据例如:pushaxpopbx.push和pop指令的格式(2)push段寄存器:将一个段寄存器中的数据入栈pop段寄存器:出栈,用一个段寄存器接收出栈的数据例如:pushdspopespush和pop指令的格式(3)push内存单元:将一个内存单元处的字入栈(栈操作都是以字为单位)pop内存单元:出栈,用一个内存字单元接收出栈的数据例如:push[0]pop[2]指令执行时,CPU要知道内存单元的地址,可以在push、pop指令中给出内存单元的偏移地址,段地址在指令执行时,CPU从ds中取得。.编程:
将10000H~1000FH这段空间当作栈,初始状态是空的,将AX、BX、DS中的数据入栈。.编程:(1)将10000H~1000FH这段空间当作栈,初始状态是空的;(2)设置AX=001AH,BX=001BH;(3)将AX、BX中的数据入栈;(4)然后将AX、BX清零;(5)从栈中恢复AX、BX原来的内容。.分析结论从上面的程序我们看到,用栈来暂存以后需要恢复的寄存器中的内容时,出栈的顺序要和入栈的顺序相反,因为最后入栈的寄存器的内容在栈顶,所以在恢复时,要最先出栈。.编程:
(1)将10000H~1000FH这段空间当作栈,初始状态是空的;(2)设置AX=002AH,BX=002BH;(3)利用栈,交换AX和BX中的数据。.push、pop指令我们如果要在10000H处写入字型数据2266H,可以用以下的代码完成:movax,1000Hmovds,axmovax,2266Hmov[0],ax补全下面的代码,完成同样的功能: 在10000H处写入字型数据2266H。______________________________movax,2266Hpushax要求:不能使用“mov内存单元,寄存器”这类指令.问题分析我们看需补全代码的最后两条指令,将ax中的2266H压入栈中,也就是说,最终应由pushax将2266H写入10000H处。问题的关键就在于:如何使pushax访问的内存单元是10000H。Push指令是入栈指令。(注意执行过程)完成程序movax,1000Hmovss,axmovsp,0010Hmovax,2266Hpushax.问题分析(续)结论push、pop实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,而是由SS:SP指出的。同时,push和pop指令还要改变SP中的内容。我们要十分清楚的是,push和pop指令同mov指令不同,CPU执行mov指令只需一步操作,就是传送,而执行push、pop指令却需要两步操作。执行push时:先改变SP,后向SS:SP处传送。执行pop时:先读取SS:SP处的数据,后改变SP。.注意push、pop等栈操作指令,修改的只是SP。也就是说,栈顶的变化范围最大为:0~FFFFH。提供:SS、SP指示栈顶;改变SP后写内存的入栈指令;读内存后改变SP的出栈指令。这就是8086CPU提供的栈操作机制。.第4章8086指令系统及寻址方式4.3指令集4.3.1数据传送类指令4.LEA、LDS和LES地址传送指令:把地址送到指定寄存器。LEAreg,src;将源操作数的偏移地址送入寄存器LDSreg,src;将源操作数中的双字内容送入寄存器及段寄存器DS中LESreg,src;将源操作数中的双字内容送入寄存器及段寄存器ES中.地址传送类指令装入有效地址指令格式:LEADST,SRC功能:将源操作数的有效地址传送到目标寄存器中说明:源操作数一定为存储器操作数,目的操作数为16位通用寄存器。例如:LEABX,VALUE[BX]如果(BX)=2000H,VALUE的偏移地址为1000H,则指令执行后(BX)=2000H+1000H=3000HEA=VALUE+(BX)=1000H+2000H=3000H→BX0000H3000H34H12HDS:2000H.地址传送类指令装入地址指针指令格式:LDSDST,SRCLESDST,SRC功能:将段基值和偏移量分别送到DST和SRC说明:一个存储单元的逻辑地址是由16位段地址和16位偏移地址组成的,可用4个存储单元存放,其中段地址存放在两个高字节单元,偏移地址存放在两个低字节单元。DS中存放段地址,DST存放偏移地址。如果是LES指令,则段地址存放在ES段寄存器中。例如:LDSAX,[2000H],若(DS)=2000H,则指令执行后,(DS)=5678H,(AX)=1234H。}}偏移量段基值22000H34H12H78H56H偏移量段基值32位地址指针.例:LEABX,[BX+SI+0F62H]LDSSI,[10H]LESDI,[BX]40H00H00H30HTABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEABX,TABLE;(BX)=1000HLDSBX,TABLE;(BX)=0040H
;(DS)=3000HLESBX,TABLE;(BX)=0040H
;(ES)=3000H注意:
*不影响标志位*REG不能是段寄存器*SRC必须为存储器寻址方式.第4章8086指令系统及寻址方式4.3指令集4.3.1数据传送类指令5.IN、OUT和XLAT累加器专用传输指令:OUT和IN在汇编中是端口读写操作指令。端口是主机与外设进行数据交换使用的,分为数据端口,状态端口和控制端口三种。PC机给每一个端口分配了一个地址,所有端口成线性排列,形成一个独立于内存空间的I/O地址空间,一般用十六进制表示。8086中,端口地址的范围是0000H-FFFFH。例如:INAL,21H表示从21H端口读一个字节数据到AL;OUT21H,AL表示将AL持有的数据写入21H端口需要注意的是:数据输入输出时的地址要放在DX中,数据以AX作传输媒介,具体需要根据传输位来决定是否选用AL、AH或DL、DH。.
累加器专用传送指令(只限使用AX或AL)
输入指令IN(I/OCPU)
长格式:INAL,PORT(字节)INAX,PORT(字)执行操作:(AL)(PORT)(字节)(AX)(PORT+1,PORT)(字)
短格式:INAL,DX(字节)INAX,DX(字)执行操作:(AL)((DX))(字节)(AX)((DX)+1,(DX))(字)
.输出指令OUT(CPUI/O)长格式:OUTPORT,AL(字节)OUTPORT,AX(字)执行操作:(PORT)(AL)(字节)(PORT+1,PORT)(AX)(字)短格式:OUTDX,AL(字节)OUTDX,AX(字)执行操作:((DX))(AL)(字节)((DX)+1,(DX))(AX)(字).注意:*不影响标志位*
前256个端口号00H~FFH可直接在指令中指定(长格式)*如果端口号256,端口号DX(短格式)例:INAX,28H;表示从28H端口读一个字节数据到AX
MOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX;表示从3FCH地址中取出的数字所代表的
端口读一个字节数据到AX
例:OUT21H,AL;表示将AL持有的数据写入21H端口
例:测试某状态寄存器(端口号27H)的第2位是否为1INAL,27HTESTAL,00000100BJNZERROR;若第2位为1,转ERROR处理.第4章8086指令系统及寻址方式4.3指令集4.3.1数据传送类指令5.IN、OUT和XLAT换码指令XLAT:课本102页指令功能将BX和AL内容之和指出的存储器字节单元的内容送到AL中,即(AL)←((BX)+(AL))。指令格式:XLATOPRXLAT说明:该指令的操作数是隐含的,目的操作数是AL,源操作数是用变址方法寻址的存储单元,即BX和AL的内容之和指定的存储单元。.第4章8086指令系统及寻址方式换码指令XLAT:该指令常用来实现查表操作,首先把表格存放在存储器中,表格首地址存放在基址寄存器BX中,待查元素在表格中的位置存放在AL中,然后执行指令,结果是将表格中查到元素的内容送入AL中。例如:DATASEGMENTTABLEBD‘abcdefghijklmnopqrstuvwxyz’DATAENDSMOVBX,OFFSETTABLE;将变量TABLE的偏移地址送BXMOVAL,05H;TABLE表中的第6项的位移量05H送AL中XLAT;查表后,将f的ACXⅡ码66H送AL中.(BX)30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H换码指令:XLAT或XLATOPR执行操作:(AL)((BX)+(AL))例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,03HXLATTABLE指令执行后(AL)=33H注意:
*不影响标志位*字节表格(长度不超过256)
首地址(BX)*需转换的代码位移量(AL).第4章8086指令系统及寻址方式4.3指令集4.3.2程序控制类指令(课本第6、7章)
无条件转移指令JMP
条件转移指令JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ
循环指令
LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE
子程序调用和返回指令
CALL、RET
中断与中断返回指令
INT、INTO、IRET.无条件转移指令:段内直接短转移:JMPSHORTOPR执行操作:(IP)←(IP)+8位位移量段内直接近转移:JMPNEARPTROPR执行操作:(IP)←(IP)+16位位移量段内间接转移:JMPWORDPTROPR执行操作:(IP)←(EA)段间直接远转移:JMPFARPTROPR执行操作:(IP)←OPR的段内偏移地址(CS)←OPR所在段的段地址段间间接转移:JMPDWORDPTROPR执行操作:(IP)←(EA)(CS)←(EA+2).条件转移指令:注意:只能使用段内直接寻址的8位位移量(1)根据单个条件标志的设置情况转移
格式测试条件JZ(JE)OPRZF=1JNZ(JNE)OPRZF=0JSOPRSF=1JNSOPRSF=0JOOPROF=1JNOOPROF=0JPOPRPF=1JNPOPRPF=0JCOPRCF=1JNCOPRCF=0.(2)比较两个无符号数,并根据比较结果转移*
格式测试条件<JB(JNAE,JC)OPRCF=1≥JNB(JAE,JNC)OPRCF=0≤
JBE(JNA)OPRCF∨ZF=1>JNBE(JA)OPRCF∨ZF=0*
适用于地址或双精度数低位字的比较.(3)比较两个带符号数,并根据比较结果转移*
格式测试条件<JL(JNGE)OPRSFOF=1
≥JNL(JGE)OPRSFOF=0
≤JLE(JNG)OPR(SFOF)∨ZF=1>JNLE(JG)OPR(SFOF)∨ZF=0*
适用于带符号数的比较(4)测试CX的值为0则转移
格式测试条件
JCXZOPR(CX)=0.例:如果X>50,转到TOO_HIGH;否则|X-Y|→RESULT,如果溢出转到OVERFLOW,
JGJOJNS
MOVAX,XCMPAX,50TOO_HIGHSUBAX,YOVERFLOWNONNEGNEGAXNONNEG:MOVRESULT,AXTOO_HIGH:……OVERFLOW:……;如果X大于Y,转到TOO_HIGH;如果有溢出,转到OVERFLOW;如果为正数,转到NONNEG.例:、是双精度数,分别存于DX,AX及BX,CX中,
>时转L1,否则转L2
CMPDX,BXJGL1JLL2CMPAX,CXJAL1L2:……L1:……;如果DX中的值大于BX中的值时转L1
;如果DX中的值小于BX中的值时转L1
;如果AX中的值大于CX中的值时转L1
(无符号数).循环指令:LOOPLOOPZ/LOOPELOOPNZ/LOOPNE
执行步骤:(1)(CX)←(CX)-1(2)检查是否满足测试条件,如满足则(IP)←(IP)+8位位移量,实行循环;不满足则IP不变,退出循环。注意:*CX中存放循环次数*只能使用段内直接寻址的8位位移量.循环指令:LOOPOPR测试条件:(CX)0为零或相等时循环指令:LOOPZ(LOOPE)OPR测试条件:ZF=1且(CX)0不为零或不相等时循环指令:LOOPNZ(LOOPNE)OPR测试条件:ZF=0且(CX)0LOOPAGAIN
DECCXJNZAGAIN.例:求首地址为ARRAY的M个字之和,结果存入TOTALMOVCX,MMOVAX,0MOVSI,AXAGAIN:ADDAX,ARRAY[SI]ADDSI,2LOOPAGAINMOVTOTAL,AX.子程序调用和返回指令:code1segmentmainprocfar……
callfarptrsubp……retmainendpcode1endscode2segmentsubpprocfar……
retsubpendpcode2ends段间调用和返回codesegmentmainprocfar……callsubp……retmainendpsubpprocnear……
retsubpendpcodeends段内调用和返回.
CALL调用指令段内直接近调用:CALLDST执行操作:PUSH(IP)(IP)←(IP)+16位位移量段内间接近调用:CALLDST执行操作:PUSH(IP)(IP)←(EA)段间直接远调用:CALLDST执行操作:PUSH(CS)PUSH(IP)(IP)←偏移地址(CS)←段地址段间间接远调用:CALLDST执行操作:PUSH(CS)PUSH(IP)(IP)←(EA)(CS)←(EA+2).RET返回指令段内近返回:RET执行操作:(IP)←POP()段内带立即数近返回:RETEXP执行操作:(IP)←POP()(SP)←(SP)+16位位移量段间远返回:RET执行操作:(IP)←POP()段间带立即数远返回:RETEXP执行操作:(IP)←POP()(SP)←(SP)+16位位移量.例:带立即数返回(SP)
堆栈段codesegmentmainprocfar……pushaxpushbxpushcxcallsub……retmainendpsubprocnear……ret6subendpcodeends(IP)(cx)(bx)(ax)(SP)(SP).中断指令:
类型0的(IP)
类型0的(CS)
类型1的(IP)
类型1的(CS)
类型N的(IP)
类型N的(CS)
类型255的(IP)
类型255的(CS)00000000044*N003FC中断向量表中断向量:中断例行程序的入口地址,存放于中断向量区。
00000H003FFHA0000HC0000HF0000H640K(RAM)128K(RAM)192K(ROM)64K(ROM).中断指令:INTTYPE或INT执行操作:PUSH(FLAGS)IF←0TF←0AC←0PUSH(CS)PUSH(IP)(IP)←(TYPE*4)(CS)←(TYPE*4+2)溢出中断指令:INTO执行操作:若OF=1,PUSH(FLAGS)IF←0TF←0AC←0PUSH(CS)PUSH(IP)(IP)←(10H)(CS)←(12H)从中断返回指令:IRET执行操作:(IP)←POP()(CS)←POP()(FLAGS)←POP()
注意:*TYPE(0~255)是中断类型号,隐含的类型号为3*INT指令还把IF和TF置0,但不影响其它标志位*IRET指令执行完,标志位由堆栈中取出的值确定.第4章8086指令系统及寻址方式4.3指令集4.3.3标志处理和CPU控制类指令标志处理指令CLC、STC、CMC、CLD、STD、CLI、STICPU控制类指令NOP、HLT、WAIT、ESC、LOCK.标志处理指令:
CLCCF←0进位位置0指令CMCCF←CF进位位置求反指令STCCF←1进位位置1指令CLDDF←0方向标志位置0指令STDDF←1方向标志位置1指令CLIIF←0中断标志置0指令STIIF←1中断标志置1指令注意:*只影响本指令指定的标志.CPU控制类指令:
NOP无操作
(机器码占一个字节)HLT暂停机
(等待一次外中断,之后继续执行程序)WAIT等待
(等待外中断,之后仍继续等待)ESC换码
LOCK封锁
(维持总线的锁存信号,直到其后的指令执行完)
注意:*不影响条件标志
.第4章8086指令系统及寻址方式4.3指令集4.3.4系统功能调用1.DOS功能调用DOS功能调用使用INT21H指令,AH中存放功能号,表示需要完成的功能。调用方法:入口参数→指定寄存器功能号→AH(00H~68H)INT21HMOVAX,4c00hINT21h等价于MOVAH,4CHINT21H作用:调用INT21H的4CH号中断,该中断就是安全退出程序。.第4章8086指令系统及寻址方式4.3指令集4.3.4系统功能调用1.DOS功能调用常用的系统功能调用1号功能调用——从键盘输入单个字符MOVAH,1INT21H2号功能调用——在显示器上显示输出单个字符MOVDL,41HMOVAH,2INT21H.第4章8086指令系统及寻址方式4.3指令集4.3.4系统功能调用1.DOS功能调用常用的系统功能调用9号功能调用——在显示器上显示输出字符串LEADX,DTRINGMOVAH,9INT21H10号功能调用——从键盘输入字符串LEADX,MAXLENMOVAH,10INT21H.第4章8086指令系统及寻址方式4.3指令集4.3.4系统功能调用2.BIOS中断调用当DOS尚未启动或不允许采用DOS调用的情况下,采用ROM-BIOS功能调用。调用方法:入口参数→指定寄存器功能号→AH(00H~68H)输入功能调用INT16H输出功能调用INT10H.第4章8086指令系统及寻址方式4.3指令集4.3.4系统功能调用2.BIOS中断调用0号功能调用——从键盘输入一个字符MOVAH,0INT16H1号功能调用——判断键盘是否有输入MOVAH,01HINT16HOEH功能调用——输出字符.第4章8086指令系统及寻址方式指令与伪指令.第4章8086指令系统及寻址方式4.4伪指令伪指令又称伪操作命令,伪指令知识提供给汇编程序一种操作,在汇编程序对汇编语言程序进行汇编时由汇编程序处理的操作,汇编结束,伪指令的使命也就结束了,它没有对应的机器码。伪指令是一种辅助操作,它使我们编写的汇编语言程序在机器上运行。主要功能有:符号定义,变量定义,数据定义及分配存储单元,程序分段,过程定义,程序模块定义与通信,指示程序的开始和结束等。.第4章8086指令系统及寻址方式4.4伪指令1.数据定义及存储分配伪指令数据定义及存储分配伪指令可将其后跟着的数据存入指定的存储单元,或只分配存储空间而并不存入确定的数值。格式为[变量名]{DB/DW/DD/DQ/DT}操作数DB定义字节DW定义字DD定义双字DQ定义4个字DT定义10个字节DW和DD可以存储偏移地址或完整的地址.第4章8086指令系统及寻址方式4.4伪指令2.表达式赋值伪指令给表达式赋予一个名字。格式为:名字EQU表达式3.符号定义伪指令定义一个变量或标号并指定其属性。格式为:名字LABEL类型当LABEL与变量连用时,类型为BYTE、WORD或DWORD当LABEL与标号连用时,类型为NEAR或FAR..第4章8086指令系统及寻址方式4.4伪指令4.段定义伪指令为存储器分段。格式为:段名SEGMENT段名ENDS5.程序开始和结束伪指令END.第4章8086指令系统及寻址方式4.4伪指令完整的段定义格式datasegment;定义数据段…dataends;----------------------------------------extrasegment;定义附加段…extraends;----------------------------------------codesegment;定义代码段assumecs:code,ds:data,es:extrastart:movax,datamovds,ax;段地址段寄存器…codeendsendstart.第4章8086指令系统及寻址方式4.5表达式与操作符常量、变量、标号常量:又叫常数,有时也叫立即数,即源程序中出现的固定值,在程序运行期间其值不会改变。数字常量二进制数:以字母B结尾的一串由0和1所组成的数字序列,如10110101B八进制数:以字母O结尾的由数字0~7所组成的数字序列,如176O十进制数:以字母D结尾的由数字0~9所组成的数字序列,如359D十六进制数:以字母H结尾的由数字0~9及字母A~F组成的数字序列,如1A3CH.第4章8086指令系统及寻址方式4.5表达式与操作符常量、变量、标号汇编程序默认的数为十进制数,所以在书写十进制常数时,可以省略结尾字母D;在书写十六进制常数时,如果第一个字符是字母A~F时,应在其前面加上数字0,以免与标号或变量名发生混淆,如0FFFFH、0A6H为十六进制数,而FFFFH、A6F则为标号名或变量名。.第4章8086指令系统及寻址方式4.5表达式与操作符常量、变量、标号常量字符串常量用单引号‘’、或者双引号“”括起来的一个或多个ASCⅡ字符,如‘A1’、‘B’、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产品服务购销合同范例
- 住宅物业前期合同范例
- 员工j就职合同范本
- 买房交订金合同范本
- 刑事代理诉讼合同范本
- 合同范例几个部分
- 个人购买古董合同范本
- 关于医院合作合同范本
- 兵团劳动合同范本
- 单位修建公路合同范本
- 医学教材成人高尿酸血症与痛风食养指南(2024年版)解读课件
- 金川集团股份有限公司招聘笔试题库2024
- 小学数学北师大版三年级下长方形的面积教案
- 2024年全国职业院校技能大赛高职组(中药传统技能赛项)考试题库(含答案)
- DGJ32 J 67-2008 商业建筑设计防火规范
- 2024年上海交通大学招考聘用高频考题难、易错点模拟试题(共500题)附带答案详解
- 浙江省金华市2024年初中毕业升学适应性检测 科学试题卷
- 延长石油招聘笔试试题
- DB-T 29-22-2024 天津市住宅设计标准
- 2024年赣州职业技术学院单招职业适应性测试题库及答案解析
- DL∕T 5209-2020 高清版 混凝土坝安全监测资料整编规程
评论
0/150
提交评论