知识点:
MOVSX符号扩展传送
MOVZX零扩展传送 一、MOVSX与MOVZX格式
MOVSX 操作数A ,操作数B
MOVZX 操作数A ,操作数B
相同点:操作数B 空间必须小于 操作数A
、格式与MOV基本相同
、能完成小存储单元向大存储单元的数据传送 比如 movsx eax,bx movzx ebx,ax movsx eax,bx MOVSX,MOVZX 与MOV指令区别:
、MOVSX,MOVZX的操作数B所占空间必须小于操作数A.
、MOV指令是原值传送,不会改动。而MOVSX与MOVZX有可能会改动
MOVSX与MOVZX的区别:
、MOVSX将用操作数B的符号位扩展填充操作数A的余下空间,如果是负数则符号位为1,如果是正数则和MOVZX功能相同
、MOVZX将用0来扩展填充操作数A的余下空间。 操作数A 操作数B 二、代码测试
int i=0x888;
char ci=-;
printf("\n");
i=ci; //111111111111111111111111 11001101
i=(unsigned char)ci; // 11001101
printf(""); char -FF //FF/2
DWORD -0xFFF 8F8F 三、作业:
、测试一下,下边的写法是否正确,想一想为什么?
mov eax,cx
movsx bx,bl
movzx bh,bl
movsx ax,byte ptr ds:[ebx]
movzx [ebx],ax