有关汇编的一些基本问题。

来源:百度知道 编辑:UC知道 时间:2024/05/24 11:39:29
什么是32位指令?什么是16位指令?
在MOVSX/MOVZX指令中如果目的操作数是个32位寄存器,而源操作数是个存储器地址,这时机器如何决定是从这个地址中取一个字还是一个字节呢?非常感谢!!

取一个字。

传送—填充指令是把位数短的源操作数传送给位数长的目的操作数。指令格式如下:

MOVSX/MOVZX Reg/Mem, Reg/Mem/Imm ;80386+

指令的主要功能和限制与MOV指令类似,不同之处是:在传送时,对目的操作数的高位进行填充。根据其填充方式,又分为:符号填充和零填充。

1、符号填充指令MOVSX(Move with Sign-Extend)
MOVSX的填充方式是:用源操作数的符号位来填充目的操作数的高位数据位。

2、零填充指令MOVZX(Move with Zero-Extend)
MOVZX的填充方式是:恒用0来填充目的操作数的高位数据位。

试举一例
已知:AL=87H,指令MOVSX CX, AL,MOVZX DX, AL执行后,问CX和DX的值是什么?

解:根据传送-填充指令的填充方式可知:
指令MOVSX CX, AL执行后,(CX)=0FF87H,指令MOVZX DX, AL执行后,(DX)=0087H。

从上例可看出,两条指令的源操作数完全一样,但因为它们的填充方式不同,所得到的结果也就不同。

有相应的伪指令