Возник спор,какой код вернее? - Assembler

Узнай цену своей работы

Формулировка задачи:

Была поставлена задача написать программу сложения 3-х числе,но что бы _a dw (любое число) ; _b dw (любое число) ; _c dd (любое число) В итоге,было написано 2 кода. Оба кода запускаются,но какой из них правильно работает. Я начинающий,написал 2 кода,но сам не понимаю что написано.(странновато знаю) 1-й код
title Vlad Denisov KiT 12
.686                                       ; директива визначення типу мікропроцесора
.model flat              ; завдання лінійної моделі пам’яті
.data                      ; директива визначення даних
_a dw 7                 ; 
_b dw 16        ;    
_c dd 95      
.code                               ; директива початку сегмента команд
_start:                                ; мітка початку програми з ім’ям _start
mov ax,_a
mov bx,_b
add ax,bx
push eax
pop ebx
add eax,_c
ret                     ; повернення керування ОС
end _start                   ; закінчення програми з ім’ям _start
2-й код
title Vlad Denisov KiT 12
.686                                       ; директива визначення типу мікропроцесора
.model flat              ; завдання лінійної моделі пам’яті
.data                      ; директива визначення даних
_a dw 7                 ; 
_b dw 16        ;    
_c dd 95 
res1 dw 0
res dd 0
      
.code                               ; директива початку сегмента команд
_start:  
 
mov ax,_a
mov bx,_b
add ax,bx  ; результат в ах
mov res1, ax
mov ax, word ptr _c
mov bx, word ptr _c+2
add ax, word ptr res1 ; соединил регистры
mov word ptr res, ax
mov word ptr res+2, bx
 
ret                     ; повернення керування ОС
end _start                   ; закінчення програми з ім’ям _start
Если можно аргументируйте почему именно "этот" код.

Решение задачи: «Возник спор,какой код вернее?»

textual
Листинг программы
movzx eax,[_a]
movzx ebx,[_b]
movzx ecx,[_c]
add   eax,ebx
add   eax,ecx

Объяснение кода листинга программы

  1. Первый элемент списка: movzx eax, [_a]
    • Переменная _a содержит значение, которое будет использовано в коде.
    • Команда movzx используется для копирования значения из памяти в регистр eax.
    • Значение в регистре eax будет использоваться в последующих операциях.
  2. Второй элемент списка: movzx ebx, [_b]
    • Переменная _b содержит значение, которое будет использовано в коде.
    • Команда movzx используется для копирования значения из памяти в регистр ebx.
    • Значение в регистре ebx будет использоваться в последующих операциях.
  3. Третий элемент списка: movzx ecx, [_c]
    • Переменная _c содержит значение, которое будет использовано в коде.
    • Команда movzx используется для копирования значения из памяти в регистр ecx.
    • Значение в регистре ecx будет использоваться в последующих операциях.
  4. Четвертый элемент списка: add eax, ebx
    • Операция сложения выполняется между значениями в регистрах eax и ebx.
    • Результат будет сохранен в регистре eax.
  5. Пятый элемент списка: add eax, ecx
    • Операция сложения выполняется между значениями в регистрах eax и ecx.
    • Результат будет сохранен в регистре eax. В данном коде выполняются операции сложения с использованием регистров eax, ebx и ecx, а также переменных _a, _b и _c. Результат каждой операции сохраняется в регистре eax.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5