Изменить строку, заменив символы в дампе памяти - 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
Листинг программы
#include <stdio.h> #include <windows.h> const char str_enter_values[] = "Введите числа через пробел: "; const char format_s[] = "%s"; const char format_s_hd[] = "%s: %hd\n"; const char s_sub[] = "Разность AX и BX"; const char format_hd_hd[] = "%hd %hd"; short int a, b, c; int main(void) { SetConsoleOutputCP(1251); __asm { mov eax, offset str_enter_values push eax mov eax, offset format_s push eax call printf pop ebx pop ebx mov eax, offset b push eax mov eax, offset a push eax mov eax, offset format_hd_hd push eax call scanf pop ebx pop ebx pop ebx mov ax, a mov bx, b sub ax, bx push ax mov eax, offset s_sub push eax mov eax, offset format_s_hd push eax call printf pop ebx pop ebx pop ebx } return 0; }
Объяснение кода листинга программы
- Установка кодовой страницы консоли в 1251.
- Использование ассемблера для выполнения операций, которые не могут быть выполнены на языке C.
- Замена символов в дампе памяти.
- Ввод трех чисел с помощью функции scanf.
- Вывод строки
Разность AX и BX
и значений AX и BX с помощью функции printf. - Использование регистров eax и ebx для временного хранения значений.
- Использование стека для освобождения регистров после вызова функций.
- Использование команды sub для выполнения операции вычитания.
- Вывод результата операции вычитания с помощью функции printf.
- Использование стека для освобождения регистров после вызова функций.
- Использование команды pop для восстановления регистров после использования стека.
- Использование команды mov для перемещения значений между регистрами.
- Использование команды push для отправки значений в стек.
- Использование команды call для вызова функции.
- Использование команды ret для возврата из функции.
- Использование констант для хранения значений.
- Использование символов кавычек для обозначения строк.
- Использование формата %s для вывода строк.
- Использование формата %hd для вывода значений short int.
- Использование формата %hd %hd для вывода значений short int в определенном формате.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д