我目前正在VS2013中使用MASM进行x64程序集编程。我知道当你为汇编程序提供一个整数(在C ++中定义为extern“C”)时,整数进入rcx寄存器。在这种情况下,整数是32位,即双字的大小。我唯一不确定的是,如果编译器在将dword放入rcx或零扩展时执行符号扩展(将高32位置零并丢失dword的符号)。如果有人可以确认编译器在这个实例中做了什么(因为我不能手动使用movsxd并自己保留标志),我们将不胜感激。
答案 0 :(得分:2)
32位整数在寄存器的32位部分(ecx
等)中传递,这意味着上半部分为零。这没关系,标志不会丢失,它只是没有无用地复制到32位高位。如果你只使用寄存器的32位部分(在32位数据上运行时是正常的),一切都是应该的。只有当向上转换到64位时才需要符号扩展名。