您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第三章 汇编语言指令系统
第三章汇编语言指令系统•汇编语言伪指令•寻址方式•传送指令•堆栈操作指令•算术运算指令•逻辑与移位指令•串操作指令•分支转移指令•其它指令3.1汇编语言伪指令1、标号概述由几个符号组成。作用:用来表示存储单元或指令的位置。用法:先定义后使用。定义规则:(1)不能以数字0-9开头。(2)不能和系统默认符号同名。(3)字母不分大小写。2、常量标号的定义用符号来表示一个指定的常数或数值表达式为常量标号。一般用“=”或“EQU”连接。如:Num1equ78hCont1=963、变量标号的定义用来定义存储单元的位置。使用DB、DW、DD、DF、DQ、DT各种变量的数据类型见P—38表3.1定义的格式:变量标号数据类型初始值应用举例:P—39~⑤DATA1DW9999H4、伪指令汇总P-40表3.35、程序的段结构8086分成4个段,分别是代码段、数据段、堆栈段和附加段。这几个段的定义如下:实模式汇编语言源程序的结构DATASEGMENT…...DATAENDSSTACKSEGMENTSTACK…...STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:……CODEENDSENDSTART定义数据段定义堆栈段定义代码段1.常量、变量和表达式常量二进制xxxxxxxxB01000101B八进制xxxO或xxxQ721O或721Q十进制xxxx或xxxxD1991或1991D十六进制xxxxH0F1D4H字符串‘xxx’或“xxx”‘AB’数值常量、符号常量(用EQU或=定义)变量内存单元的名字,由DB/DW/DD/DQ/DT定义BUFDB?MOVBUF,AL变量的三种属性:段值SEG偏移量OFFSET类型BYTE(字节)/WORD(字)/...标号指令存放单元的符号地址,是转移/调用/循环指令的操作数标号的三种属性:段值SEG偏移量OFFSET类型NEAR/FAR表达式由操作数和运算符组成的序列操作数可以是寄存器、常量(数值常量、符号常量)、存储器操作数(标号、变量)运算符包括:算术运算符、逻辑运算符、关系运算符、数值返回运算符和属性运算符数值返回运算符(分析运算符)SEG变量/标号OFFSET变量/标号TYPE变量/标号变量返回类型:1字节、2字、4双字标号返回类型:-1NEAR、-2FARLENGTH变量SIZE变量属性运算符(合成运算符)•PTR类型PTR表达式MOVWORDPTR[BX],0•THISTHIS类型MY_BYTEEQUTHISBYTEMY_WORDDW100DUP(?)3.伪指令语句名字伪操作命令操作数;注释符号定义语句定义符号常量PRICEEQU281PORT=6PORT=PORT+1数据定义语句定义变量、分配存储单元等变量名DB/DW/DD/DQ/DT操作数,…,操作数操作数可以是:数值表达式或表、字符串、?、NDUP表达式VARDW?ARRAYDB100DUP(0)3.28088/8086CPU的寻址方式•什么是指令系统一台CPU全部指令的集合。指令的组成:操作码:说明该指令要做什么。操作数:参加运算的数或数的地址。操作码操作数(数或地址码)•寻址方式:指数或数的地址的产生方法。一、立即寻址操作数就在指令中。如:MOVAX,267MOVAL,10010011BAND0FEHMOVAX,1234H如p-43图3-1所示1234B81234AHAL存储器二、寄存器寻址方式操作数在某个寄存器中,指令中给出了寄存器的名字。如:MOVEAX,EBXMOVAX,BXMOVAL,BL优点:指令执行时间短,节省存储空间。三、存储器直接寻址方式数据在存储器中,指令中给出了存储器的地址。如:操作数地址在指令中直接给出。如:MOVAL,[TABLE]MOVAL,[1000H]MOVAL,DS:[2000H]其操作示意图如p-44图3.22000A0564000200056+42000DSAL四、寄存器间接寻址1、间址寄存器寻址操作数地址放在某个寄存器中,如BX、BP、SI、DI。如:MOVAX,[BX]MOVAX,[SI]MOVAX,[BX](DS)=4000H,(BX)=0100H,(40100H)=25H,(40101H)=34H执行示意图P-45图3.4所示。图3.4寄存器间接寻址示意图078B2540000010025+40100HDS3434AXBX代码段数据段40101H2、间址寄存器加位移量寻址操作数的偏移地址是某个寄存器加上指令中给定的一个整数。如:MOVAX,[BX+5]P-45图3.505478B446000200044+62005DS88885AXBX62005620063、基址加变址寻址基址寄存器加上变址寄存器的内容形成操作数地址。MOVAX,[BX][SI]MOVAX,[BX+SI]MOVCX,[BX+SI]P-46图3.65000008BAB200056+52006DSCDCD0006BXSICX4、基址加变址加位移量寻址操作数的偏移地址由基址寄存器+变址寄存器+指令中给定的一个整数。如:MOV[BX+SI+1234H],AXP-46图3.7123480682000AB+53334DSAB680100BXSIAX5000891234533355、比例变址寻址偏移量有效地址EA=基址寄存器+变址寄存器*比例因子+位移量只能用于32位地址的特殊寻址方式。如P-47图3.83.3传送指令执行后不影响标志位,源操作数不变。1.MOV指令格式:MOV目标操作数,源操作数功能:将源操作数内容送目标操作数所指的位置。1)源操作数可以是8/16/32位的立即数、寄存器操作数、内存操作数。目标操作数不允许为立即数,其余同源操作数。源、目不能同时为内存操作数。2)源、目操作数类型必须匹配MOVBYTEPTR[BX],12H;12H→(BX)其中BYTEPTR说明本次为字节操作。如果是WORDPTR,则说明本次为字操作。如果是DWORDPTR,则说明本次为双字操作。3)不能向段寄存器写立即数MOVDX,2000H×应写成;•MOVAX,2000H•MOVDX,AX4)以CS为目标的一切传送指令都是非法的,不用给CS送任何值。•MOVSX目标寄存器,源操作数;串传送指令MOV指令的类型如P-49表3.5所示数据传送指令示意图如P-48图3.9所示立即数imm存储器mem通用寄存器reg段寄存器sreg2.地址传送指令•LEA目标寄存器,源操作数有效地址传送指令,源操作数为内存操作数,将内存单元的有效地址(而不是内容)传送到目标寄存器LEAAX,[SI];SI→AX•LDS/LES/LFS/LGS/LSS目标寄存器,源操作数指针传送指令ADDRDD1A2B3C4DHLDSSI,ADDR;(ADDR)→SI,(ADDR+2)→DS其它在地址传送指令见P-50表3.63.I/O数据传送指令完成累加器和I/O端口之间的数据传送输入指令:IN累加器,端口号端口号为8位时,直接寻址,最多可访问256个端口。INAX,PORT端口地址为16位时,间接寻址,端口地址必须放在DX寄存器中,最多可访问65536个端口。INAL,DX输出指令:OUT端口号,累加器3.4堆栈操作指令堆栈:用来保存子程序或中断服务程序入口地址及中间结果等。PUSH源操作数进栈指令,先调整堆栈指针,再把源操作数压栈。PUSHAXPUSHBX•POP目标操作数出栈指令,先将栈顶2/4字节送目标操作数,再调整堆栈指针。POPAXPOPBX例3.4举例说明堆栈操作的编程规则PUSHAXPUSHBX:POPBXPOPAXPUSHAXPUSHBX入堆栈0247H0246H0245H0244HAHALBHBLSP出栈PopaxPOPBX3.5算术运算与BCD调整指令加、减、乘、除,运算对象8/16/32位有符号/无符号整数,以及BCD码影响标志位1.加法指令不带进位加法:ADD目标操作数,源操作数源操作数+目标操作数→目标操作数带进位加法:ADC目标操作数,源操作数源操作数+目标操作数+CF→目标操作数影响A,C,O,P,S,Z6个标志位加1指令:INC目标操作数目标操作数+1→目标操作数影响A,O,P,S,Z5个标志位加法指令见p-53表3.7例3.5用寄存器对EBX:EAX和EDX:ECX分别表示64位数,将它们相加后结果存放于EBX:EAX中。ADDEAX,ECX;EAX+ECX→EAXADCEBX,EDX;EBX+EDX+CF→EBX例:BX内容加1送BXINCBX;BX+1→BX2.减法指令不带借位减法:SUB目标操作数,源操作数目标操作数-源操作数→目标操作数带借位减法:SBB目标操作数,源操作数目标操作数-源操作数-CF→目标操作数减1指令:DEC目标操作数目标操作数-1→目标操作数比较指令:CMP目标操作数,源操作数目标操作数-源操作数影响A,C,O,P,S,Z6个标志位例3.6用寄存器对EBX:EAX和ESI:EDI分别表示64位数,将EBX:EAX中减去ESI:EDI后结果存放于EBX:EAX中。SUBEAX,EDI;EAX-EDI→EAXSBBEBX,ESI;EBX-EDI-CF→EBX常用减法指令见P-54表3.83.乘法指令无符号乘法MULSRC;ACC*SRC→ACC有符号乘法IMULSRC;ACC*SRC→ACC全部指令的格式P-54表3.9,说明P-55①~②例3.7编写将BL与CL相乘并将乘积放在DX中的程序段。MOVBL,40MOVCL,11MOVAL,CLMULBLMOVDX,AX4、除法指令无符号除法DIV除数;acc/除数→ACC有符号除法IDIV除数;acc/除数→ACC除法操作默认的寄存器见P-55表3.10例3.8编写32位÷16位的带符号数除法程序段。MOVAX,DATA1;取16位被除数CWD;扩展成DX:AX组成32位数IDIVDATA2;做DATA1÷DATA2MOVDATA3,AX;商送DATA3MOVDATA4,DX;余数送DATA45.十进制调整指令功能:当参加运算的数为十进制时,将运算结果调整成十进制,此指令一般跟在运算指令之后。BCD码调整指令见P-57表3.12加法的压缩BDC码调整指令DAA加法的非压缩BDC码调整指令AAA减法的压缩BDC码调整指令DAS减法的非压缩BDC码调整指令AAS•AAM乘法的非压缩BDC码调整指令•AAD除法的非压缩BDC码调整指令3.6逻辑与移位和位操作指令1、逻辑运算指令AND目标操作数,源操作数;目标操作数^源操作数→目标操作数OR目标操作数,源操作数;目标操作数V源操作数→目标操作数XOR目标操作数,源操作数;目标操作数源操作数→目标操作数NOT目标操作数;目标操作数→目标操作数NEG目标操作数;目标操作数+1→目标操作数+位操作逻辑与指令AND主要用于将二进制数的某些位清0,将需要清0的位与上0。ANDBL,0FHxxxxxxxx(BL)000011110F0000xxxx结果AND位操作逻辑或指令OR要用于将二进制数的某些位置1,将需要置1的位或上1。ORBL,0FHxxxxxxxx(BL)000011110Fxxxx1111结果OR位操作逻辑异或指令XOR主要用于将二进制数的某些位求反,将需要求反的位异或上1。XORBL,0FHxxxxxxxx(BL)000011110Fxxxxxxxx结果XOR2、移位操作逻辑左移指令格式:SHL目标操作数,计数移1位时,计数值可以为立即数1移多位时,计数值必须先存入CL寄存器MOVCL,3;移位次数送CLSHLAX,CL;AX的内容左移3位其它移位指令见P-60表3.13和P-61表3.143、位测试指令TEST用于测试二进制数的某些位(一般为1位)TESTAL,1;ALΛ01HJNZRIGHT;AL最低位=1转RIGHTTESTAL,128;ALΛ80HJNZLEFT;AL最高位=1转LEFT当被测试为为0时,ZF置位(ZF=1);当被测
本文标题:第三章 汇编语言指令系统
链接地址:https://www.777doc.com/doc-3189837 .html