精灵王
- 注册日期2010-12-08
- 发帖数640
- QQ
- 火币1103枚
- 粉丝120
- 关注75
|
阅读:2336回复:0
经典汇编语言教程:5.2 指令系统
楼主#
更多
发布于:2013-01-24 14:17
| | | | 指令系统是 cpu指令的集合,CPU除了具有计算功能的指令外,还有实现其它功能的指令,也有为某种特殊的应用而增设的指令。 通常,把指令按其功能分成以下几大类: 5.2.1 数据传送指令数据传送指令又分为:传送指令、 交换指令、 地址传送指令、 堆栈操作指令、 转换指令和 I/O指令等。 除了标志位操作指令 SAHF和 POPF指令外,本类的其它指令都不影响标志位。 1、传送指令MOV(MoveInstruction) 传送指令是使用最频繁的指令,它相对于高级语言里的赋值语句。指令的格式如下: MOV Reg/Mem, Reg/Mem/Imm 其中:Reg—Register(寄存器),Mem—Memory(存储器),Imm—Immediate(立即数),它们可以是8位、16位或32位(特别指出其位数的除外)。在本网络课件的网页中,都将采用上述缩写,此后不再说明。 指令的功能是把源操作数(第二操作数)的值传给目的操作数(第一操作数)。指令执行后,目的操作数的值被改变,而源操作数的值不变。在存储单元是该指令的一个操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。 下面列举几组正确的指令例子: 在汇编语言中,主要的数据传送方式如图5.1所示。虽然一条MOV指令能实现其中大多数的数据传送方式,但也存在MOV指令不能实现的传送方式。 图5.1 MOV指令数据传送示意图 对MOV指令有以下几条具体规定,其中有些规定对其它指令也同样有效。 对于规定2、4和7,我们可以用通用寄存器作为中转来达到最终目的。表5.1列举一个可行的解决方案,尽供参考。读者可考虑用其它办法来完成同样的功能。 表5.1 MOV指令的变通方法 对于情况1:不同位数数据之间的传送问题,在80386及其以后的CPU中,增加一组新的指令—— 传送-填充指令,它可把位数少的源操作数传送给位数多的目的操作数,多出的部分按指令的规定进行填充。
| | | | |
|