Почему добавление 3 BYTE не выполняется, но DWORDs успешно [дублирует]

Чтобы отступить абзац, используйте text-indent:1em;

Вы не можете создавать пробелы в HTML, как вы показываете, поскольку пробелы всегда сворачиваются в одно пространство в текстовой области.

1
задан rkhb 7 January 2016 в 09:25
поделиться

1 ответ

Эти две строки являются вашей проблемой:

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

eax - 32 бита, но оба my1337Sk1LLz и Difference - 16 бит.

Есть два вы можете обойти это:

  1. Изменение размера my1337Sk1LLz и Difference. Сейчас у вас есть типы как WORD и SWORD, соответственно. Вы можете изменить их на DWORD и SDWORD, чтобы сделать их 32-разрядными.
  2. Нулевое расширение и усечение. Вам понадобится другой реестр. Я буду использовать edx, так как вы, кажется, не используете его там. Во-первых, вам нужно будет подписать-продлить my1337Sk1LLz:
    movzx edx, my1337Sk1LLz  ; move, zero-extended, my1337Sk1LLz into EDX
    
    Затем вы можете выполнить вычитание:
    sub eax, edx  ; they're the same size now so we can do this
    
    Затем вы можете сохранить низкое слово eax в Difference, отбросив высокое слово:
    mov Difference, ax
    
2
ответ дан icktoofay 18 August 2018 в 16:55
поделиться
  • 1
    как обычно, проблема заключается именно в том, что сказал ассемблер: P – tay10r 29 April 2013 в 03:15
  • 2
    Итак, что мне нужно сделать, чтобы устранить это? Есть ли способ разрешить 16-битной системе принимать 32-битную переменную? – Shawn 29 April 2013 в 03:32
  • 3
    @Shawn: вы не можете поместить 32 бита в 16 бит, не теряя других 16 бит, но вы можете поместить 16-битное значение в 32-разрядный регистр. Я отредактировал свой ответ, чтобы показать две возможные исправления. – icktoofay 29 April 2013 в 03:37
  • 4
    @icktoofay Спасибо, вы очень помогли, и это очень ценится. Отлично работает сейчас :) – Shawn 29 April 2013 в 03:42
Другие вопросы по тегам:

Похожие вопросы: