您的位置:首页单片机51单片机
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

汇编语言指令

[日期:2008-06-22 ] [来源:net 作者:佚名] [字体: (投递新闻)

指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。如果不熟悉汇编指令的功能及其有关规定,那么,肯定不能灵活运用汇编语言。所以,本章的内容是学习本课程的重点和难点。
5.1 
汇编语言指令格式
为了介绍指令系统中指令的功能,先要清楚汇编语言是如何书写指令的,这就象在学习高级语言程序设计时,要清楚高级语言语句的语义、语法及其相关规定一样。
5.1.1 
指令格式
汇编语言的指令格式如下:
指令助忆符 [操作数1 [, 操作数2 [, 操作数3]]]   [;注释]
指令助忆符体现该指令的功能,它对应一条二进制编码的机器指令。指令的操作数个数由该指令的确定,可以没有操作数,也可以有一个、二个或三个操作数。绝大多数指令的操作数要显式的写出来,但也有指令的操作数是隐含的,不需要在指令中写出。
当指令含有操作数,并要求在指令中显式地写出来时,则在书写时必须遵守:
指令助忆符和操作数之间要有分隔符,分隔符可以是若干个空格或TAB键;
如果指令含有多个操作数,那么,操作数之间要用逗号""分开。 
指令后面还可以书写注释内容,不过,要在注释之前书写分号""
5.1.2 
了解指令的几个方面
学习汇编指令时,指令的功能无疑是我们学习和掌握的重点,但要准确、有效地运用这些指令,我们还要熟悉系统对每条指令的一些规定或约束。
归纳起来,对指令还要掌握以下几个方面内容:
、要求指令操作数的寻址方式;
、指令对标志位的影响、标志位对指令的影响;
、指令的执行时间,对可完成同样功能的指令,要选用执行时间短的指令

 

 

 

汇编指令系统

指令系统是CPU指令的集合,CPU除了具有计算功能的指令外,还有实现其它功能的指令,也有为某种特殊的应用而增设的指令。
通常,把指令按其功能分成以下几大类:
数据传送指令 
标志位操作指令 
算术运算指令 
逻辑运算指令 
移位操作指令 
位操作指令 
比较运算指令 
下面,我们逐一介绍每类指令中的指令。循环指令 
转移指令 
条件设置字节指令 
字符串操作指令 
ASCII-BCD
码运算调整指令 
处理器指令 


5.2.1 
数据传送指令 
数据传送指令又分为:传送指令、交换指令、地址传送指令、堆栈操作指令、转换指令和I/O指令等。
除了标志位操作指令SAHFPOPF指令外,本类的其它指令都不影响标志位。
1
、传送指令MOV(Move Instruction)
传送指令是使用最频繁的指令,它相对于高级语言里的赋值语句。指令的格式如下:
MOV  Reg/Mem, Reg/Mem/Imm
其中:Reg—Register(寄存器)Mem—Memory(存储器)Imm—Immediate(立即数),它们可以是8位、16位或32(特别指出其位数的除外)。在本网络课件的网页中,都将采用上述缩写,此后不再说明。
指令的功能是把源操作数(第二操作数)的值传给目的操作数(第一操作数)。指令执行后,目的操作数的值被改变,而源操作数的值不变。在存储单元是该指令的一个操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。
下面列举几组正确的指令例子:
源操作数是寄存器
MOV  CH, ALMOV  BP, SPMOV  ECX, EBX
MOV  DS, AXMOV  [BX], CHMOV  [BX+SI], AX
源操作数是存储单元
MOV  AL, [100H]MOV  BX, ES:[DI]MOV  EDX, [BX]
MOV  BX, VARWMOV  AX, [BX+SI]MOV  CH, [BX+DI+100H]
其中:VARW是字类型内存变量(下同)
源操作数是立即数
MOV  AL, 89HMOV  BX, -100HMOV  EDX, 12345678H
MOV  VARW, 200HMOV  [BX], 2345HMOV  [BX+DI], 1234H

在汇编语言中,主要的数据传送方式如图5.1所示。虽然一条MOV指令能实现其中大多数的数据传送方式,但也存在MOV指令不能实现的传送方式。

5.1 MOV指令数据传送示意图
MOV指令有以下几条具体规定,其中有些规定对其它指令也同样有效。
1)
、两个操作数的数据类型要相同,要同为8位、16位或32位;如:MOV  BL, AX等是不正确的;
2)
、两个操作数不能同时为段寄存器,如:MOV  ES, DS等;
3)
、代码段寄存器CS不能为目的操作数,但可作为源操作数,如:指令MOV  CS, AX等不正确,但指令MOV  AX, CS等是正确的;
4)
、立即数不能直接传给段寄存器,如:MOV  DS, 100H等;
5)
、立即数不能作为目的操作数,如:MOV  100H, AX等;
6)
、指令指针IP,不能作为MOV指令的操作数;
7)
、两个操作数不能同时为存储单元,如:MOV  VARA, VARB等,其中VARAVARB是同数据类型的内存变量。

对于规定247,我们可以用通用寄存器作为中转来达到最终目的。表5.1列举一个可行的解决方案,尽供参考。读者可考虑用其它办法来完成同样的功能。
5.1 MOV指令的变通方法 
功能描述不正确的指令可选的解决方法
DS的值传送给ESMOV  ES, DSMOV  AX, DS
MOV  ES, AX
100H传给DSMOV  DS, 100HMOV  AX, 100H
MOV  DS, AX
把字变量VARB的值传送给字变量VARAMOV  VARA, VARBMOV  AX, VARB
MOV  VARA, AX

对于情况1:不同位数数据之间的传送问题,在80386及其以后的CPU中,增加一组新的指令——传送-填充指令,它可把位数少的源操作数传送给位数多的目的操作数,多出的部分按指令的规定进行填充。

 

 

传送填充指令(MOVe-and-Fill Instruction)

2、传送填充指令(MOVe-and-Fill Instruction)
传送填充指令是把位数短的源操作数传送给位数长的目的操作数。指令格式如下:
MOVSX/MOVZX  Reg/Mem, Reg/Mem/Imm
     ;80386+
其中:80386+表示80386及其之后的CPU,其它类似符号含义类同,不再说明。
指令的主要功能和限制与MOV指令类似,不同之处是:在传送时,对目的操作数的高位进行填充。根据其填充方式,又分为:符号填充和零填充。
传送填充指令的功能如图5.2所示。
 
(a). MOVSX
的执行效果 
(b). MOVZX
的执行效果

5.2 传送填充指令执行过程示意图
、符号填充指令MOVSX(Move with Sign-Extend)
MOVSX
的填充方式是:用源操作数的符号位来填充目的操作数的高位数据位。
、零填充指令MOVZX(Move with Zero-Extend)
MOVZX
的填充方式是:恒用0来填充目的操作数的高位数据位。
5.1 已知:AL=87H,指令MOVSX  CX, ALMOVZX  DX, AL执行后,问CXDX的值是什么?
解:根据传送-填充指令的填充方式可知:
指令MOVSX CX, AL执行后,(CX)=0FF87H,指令MOVZX DX, AL执行后,(DX)=0087H
从上例可看出,两条指令的源操作数完全一样,但因为它们的填充方式不同,所得到的结果而就不同。
试比较下列指令,分析它们执行结果的相同和不同之处:
MOV
 AX, 87H   MOVSX AX, 87H   MOVZX AX, 87H
3
、交换指令XCHG(Exchange Instruction)
交换指令XCHG是两个寄存器,寄存器和内存变量之间内容的交换指令,两个操作数的数据类型要相同。其指令格式如下:
XCHG  Reg/Mem, Reg/Mem
该指令的功能和MOV指令不同,后者是一个操作数的内容被修改,而前者是两个操作数都会发生改变。寄存器不能是段寄存器,两个操作数也不能同时为内存变量。
XCHG
指令的功能如图5.3所示。
5.3 XCHG指令的执行功能示意图

5.2 已知:AX=5678HBX=1234H,指令XCHG  AX, BX执行后,AXBX的值是什么?
解:这是两个寄存器内容进行交换,指令执行后,有:(AX)=1234H(BX)=5678H

 

 

 

HTTP协议状态码的含义

"100" : Continue
"101" : witching Protocols
"200" : OK
"201" : Created
"202" : Accepted
"203" : Non-Authoritative Information
"204" : No Content
"205" : Reset Content
"206" : Partial Content
"300" : Multiple Choices
"301" : MOVed Permanently
"302" : Found
"303" : See Other
"304" : Not Modified
"305" : Use Proxy
"307" : Temporary Redirect
"400" : Bad Request
"401" : Unauthorized
"402" : Payment Required
"403" : Forbidden
"404" : Not Found
"405" : Method Not Allowed
"406" : Not Acceptable
"407" : Proxy Authentication Required
"408" : Request Time-out
"409" : Conflict
"410" : Gone
"411" : Length Required
"412" : Precondition Failed
"413" : Request Entity Too Large
"414" : Request-URI Too Large
"415" : Unsupported Media Type
"416" : Requested range not satisfiable
"417" : Expectation Failed
"500" : Internal Server Error
"501" : Not Implemented
"502" : Bad Gateway
"503" : Service Unavailable
"504" : Gateway Time-out
"505" : HTTP Version not supported

阅读:
录入:petta

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
赞助商广告