Изменить строку, заменив символы в дампе памяти - 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 в определенном формате.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д