Изменить строку, заменив символы в дампе памяти - Assembler

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

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

Здравствуйте не могу написать программу для этого задания: 1. Ввести исходные данные шестнадцатеричных чисел в регистры AX и BX, и последовательно выполнить следующее: - найти разность регистров AX и BX; - просуммировать два байта регистра АХ; - найти сумму регистров AX и BX; - найти деление числа 06b7f3dc на регистр BX; - переслать число из младшего байта регистра DX в старший байт регистра AX. 2. Написать программу вывода строки символов на экран программой Debug, выполнить следующее: - сохранить на диске исходный и исполняющий файлы этой программы; - вывести на экран исходный код и дампа памяти программы. Продемонстрировать выполнение программы; - изменить строку, заменив символы (в соответствии с вариантом) в дампе памяти. Запустить на выполнение. Продемонстрировать выполнение программы. самое задание AX=4a5c BX=5b1c Link Paste; Paste; “; Paste;” на “(delete)” выполнять нужно через debug

Решение задачи: «Изменить строку, заменив символы в дампе памяти»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <windows.h>
  3. const char str_enter_values[] = "Введите числа через пробел: ";
  4. const char format_s[] = "%s";
  5. const char format_s_hd[] = "%s: %hd\n";
  6. const char s_sub[] = "Разность AX и BX";
  7. const char format_hd_hd[] = "%hd %hd";
  8. short int a, b, c;
  9. int main(void)
  10. {      
  11.     SetConsoleOutputCP(1251);
  12.     __asm {
  13.         mov eax, offset str_enter_values
  14.         push eax
  15.         mov eax, offset format_s
  16.         push eax
  17.         call printf
  18.         pop ebx
  19.         pop ebx
  20.         mov eax, offset b
  21.         push eax
  22.         mov eax, offset a
  23.         push eax
  24.         mov  eax, offset format_hd_hd
  25.         push eax
  26.         call scanf
  27.         pop ebx
  28.         pop ebx
  29.         pop ebx
  30.         mov ax, a
  31.         mov bx, b
  32.         sub ax, bx
  33.         push ax
  34.         mov  eax, offset s_sub
  35.         push eax
  36.         mov  eax, offset format_s_hd
  37.         push eax
  38.         call printf
  39.         pop  ebx
  40.         pop  ebx
  41.         pop  ebx
  42.     }
  43.     return 0;
  44. }

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

  1. Установка кодовой страницы консоли в 1251.
  2. Использование ассемблера для выполнения операций, которые не могут быть выполнены на языке C.
  3. Замена символов в дампе памяти.
  4. Ввод трех чисел с помощью функции scanf.
  5. Вывод строки Разность AX и BX и значений AX и BX с помощью функции printf.
  6. Использование регистров eax и ebx для временного хранения значений.
  7. Использование стека для освобождения регистров после вызова функций.
  8. Использование команды sub для выполнения операции вычитания.
  9. Вывод результата операции вычитания с помощью функции printf.
  10. Использование стека для освобождения регистров после вызова функций.
  11. Использование команды pop для восстановления регистров после использования стека.
  12. Использование команды mov для перемещения значений между регистрами.
  13. Использование команды push для отправки значений в стек.
  14. Использование команды call для вызова функции.
  15. Использование команды ret для возврата из функции.
  16. Использование констант для хранения значений.
  17. Использование символов кавычек для обозначения строк.
  18. Использование формата %s для вывода строк.
  19. Использование формата %hd для вывода значений short int.
  20. Использование формата %hd %hd для вывода значений short int в определенном формате.

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


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

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

15   голосов , оценка 3.933 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы