傳送—填充指令(Move-and-FillInstruction)

字號(hào):

傳送—填充指令(Move-and-Fill Instruction)
    傳送—填充指令是把位數(shù)短的源操作數(shù)傳送給位數(shù)長(zhǎng)的目的操作數(shù)。指令格式如下:
    MOVSX/MOVZX Reg/Mem, Reg/Mem/Imm     ;80386+
    其中:80386+表示80386及其之后的CPU,其它類(lèi)似符號(hào)含義類(lèi)同,不再說(shuō)明。
    指令的主要功能和限制與MOV指令類(lèi)似,不同之處是:在傳送時(shí),對(duì)目的操作數(shù)的高位進(jìn)行填充。根據(jù)其填充方式,又分為:符號(hào)填充和零填充。
    (a). MOVSX的執(zhí)行效果
    (b). MOVZX的執(zhí)行效果
    、符號(hào)填充指令MOVSX(Move with Sign-Extend)
    MOVSX的填充方式是:用源操作數(shù)的符號(hào)位來(lái)填充目的操作數(shù)的高位數(shù)據(jù)位。
    、零填充指令MOVZX(Move with Zero-Extend)
    MOVZX的填充方式是:恒用0來(lái)填充目的操作數(shù)的高位數(shù)據(jù)位。
    例5.1 已知:AL=87H,指令MOVSX CX, AL,MOVZX DX, AL執(zhí)行后,問(wèn)CX和DX的值是什么?
    解:根據(jù)傳送-填充指令的填充方式可知:
    指令MOVSX CX, AL執(zhí)行后,(CX)=0FF87H,指令MOVZX DX, AL執(zhí)行后,(DX)=0087H。
    從上例可看出,兩條指令的源操作數(shù)完全一樣,但因?yàn)樗鼈兊奶畛浞绞讲煌?,所得到的結(jié)果而就不同。
    試比較下列指令,分析它們執(zhí)行結(jié)果的相同和不同之處:
    MOV AX, 87H   MOVSX AX, 87H   MOVZX AX, 87H
    3、交換指令XCHG(Exchange Instruction)
    交換指令XCHG是兩個(gè)寄存器,寄存器和內(nèi)存變量之間內(nèi)容的交換指令,兩個(gè)操作數(shù)的數(shù)據(jù)類(lèi)型要相同。其指令格式如下:
    XCHG Reg/Mem, Reg/Mem
    該指令的功能和MOV指令不同,后者是一個(gè)操作數(shù)的內(nèi)容被修改,而前者是兩個(gè)操作數(shù)都會(huì)發(fā)生改變。寄存器不能是段寄存器,兩個(gè)操作數(shù)也不能同時(shí)為內(nèi)存變量。
    例5.2 已知:AX=5678H,BX=1234H,指令XCHG AX, BX執(zhí)行后,AX和BX的值是什么?
    解:這是兩個(gè)寄存器內(nèi)容進(jìn)行交換,指令執(zhí)行后,有:(AX)=1234H,(BX)=5678H。