error A2022: instruction operands must be the same size

旧城冷巷雨未停 提交于 2019-12-02 07:01:55

These two lines are your problem:

sub eax,my1337Sk1LLz    ;subtracts 1337h from usPop in eax
mov Difference, eax     ;stores eax into Difference

eax is 32 bits, but both my1337Sk1LLz and Difference are 16 bits.

There are two ways you might get around this:

  1. Changing the size of my1337Sk1LLz and Difference. Right now you have the types as WORD and SWORD, respectively. You can change those to DWORD and SDWORD to make them 32-bit.

  2. Zero-extending and truncating. You'll need another register. I'll use edx since you don't seem to be using it there. First, you'll need to sign-extend my1337Sk1LLz:

    movzx edx, my1337Sk1LLz  ; move, zero-extended, my1337Sk1LLz into EDX
    

    Then you can do the subtraction:

    sub eax, edx  ; they're the same size now so we can do this
    

    Then you can store the low word of eax into Difference, discarding the high word:

    mov Difference, ax
    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!