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