80x86指令系统
80x86的指令系统可以分为以下6组:
数据传送类指令
算术指令
逻辑指令
串处理指令
控制转移指令
处理机控制指令
1、数据传送指令
数据传送类指令负责把数据、地址或立即数传送到寄存器或存储单元中。它又可以分为五种:
1.1、通用数据传送指令
MOV 传送
MOVSX 带符号扩展传送
MOVZX 带零扩展传送
PUSH 进栈
POP 出栈
PUSHA 所有寄存器进栈
POPA 所有寄存器出栈
XCHG 交换
(1)MOV传送指令
格式为:MOV DST,SRC
执行操作:(DST)《——(SRC)
MOV指令可以在CPU内或CPU和存储器之间传送字或字节,MOV指令不影响标志位
(2)MOVSX带符号扩展传送指令
格式为:MOVSX DST,SRC
执行操作:(DST)《——符号扩展(SRC)
该指令的源操作数可以是8位或16位的寄存器或存储单元的内容,而目的操作数则必须是16位或32位寄存器,传送时把源操作数扩展送入目的寄存器。MOVSX不影响标志位
(3)MOVZX带零扩展传送指令
格式为:MOVZX DST,SRC
执行操作:(DST)《——零扩展(SRC)
MOVSX和MOVZX指令与一般双操作数指令的差别是:一般双操作数指令的源操作数和目的操作数的长度是一致的,但MOVSX和MOVZX的源操作数长度一定要小于目的操作数长度
(4)PUSH进栈指令
格式为:PUSH SRC
执行操作:
16位指令:
(SP)《——(SP)-2
((SP)+1),(SP))《——(SRC)
32位指令:
(ESP)《——(ESP)-4
((ESP)+3),(ESP)+2),(ESP)+1)(ESP))《——(SRC)
(5)POP出栈指令
格式为:POP DST
执行操作:
16位指令:
(DST)《——((SP)+1),(SP))
(SP)《——(SP)+2
32位指令:
(DST)《——((ESP)+3),(ESP)+2),(ESP)+1)(ESP))
(ESP)《——(ESP)+4
堆栈是一种“后进先出”方式工作的一个存储区,它必须存在于堆栈段中,因而其段地址存放于SS寄存器中。它只有一个出入口,所以只有一个堆栈指针寄存器。当堆栈地址长度为16位时用SP寄存器,堆栈地址长度为32位时用ESP,SP或ESP的内容在任何时候都指向当前的栈顶,所以POP和PUSH指令都必须根据当前SP或ESP的内容来确定进栈或出栈的存储单元,而且必须及时修改指针,以保证SP或ESP指向当前的栈顶。PUSH和POP指令均不影响标志位
(5)XCHG交换指令
格式为:XCHG OPR1 OPR2
执行操作:(OPR1)《——》(OPR2)
该指令不影响标志位
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !