Команда lea вводит меня в недоуменее - Assembler
Формулировка задачи:
Я складываю числа разными способами и вдруг получаю разные ответы:
lea используется механизм блока адресации процессора (а не арифметико-логического блока) и что он настолько плох, что считать не умеет??
.model flat
.code
public main
main proc
; здесь все четко
mov eax, 4292870144
lea eax, [eax+4294951040+4294967168]
; и здесь все без нареканий
mov ebx, 4292870144
add ebx, 4294951040
add ebx, 4294967168
; НО ЗДЕСЬ МОЙ РАЗУМ ОСТАВЛЯЕТ МЕНЯ
mov esi, 4292870144
mov ecx, 4294951040
mov edx, 4294967168
lea ecx, [esi+ecx+edx] ; здесь ошибка ecx <> eax = ebx
xor eax, eax
ret
main endp
endРешение задачи: «Команда lea вводит меня в недоуменее»
textual
Листинг программы
mov eax, 1 011F103B mov eax,1 mov ecx, 2 011F1040 mov ecx,2 mov edx, 3 011F1045 mov edx,3 lea ecx, [edx+ecx+eax] 011F104A lea ecx,[eax+ecx]
Объяснение кода листинга программы
- mov eax, 1
- mov ecx, 2
- mov edx, 3
- lea ecx, [edx+ecx+eax] В данном коде используются следующие переменные: — eax, ecx, edx (регистры процессора) Постановка задачи: выполнить сложение переменных eax, ecx и edx и сохранить результат в переменной ecx. Обратите внимание, что в данном коде есть непонятные моменты: — Почему используется команда lea, а не mov для сложения? — Откуда берется значение переменной eax в команде lea?