Перевод числа в другую систему счисления - Assembler
Формулировка задачи:
Доброго времени суток, прошу помощи. Есть задача: написать программу, которая будет переводить десятичное число в другую систему счисления. В первом сниппете целое число a dw - больше 255 не будет работать. Решил написать, чтобы с большими числами тоже работало, но почему-то программа крашится, работает долго и ничего не выводит, если пробывать дебажить, то выводит "Program received signal SIGSEGV, Segmentation fault.". Программа успешно завершает работу, если закоментировать
В чем ошибка? Прошу помочь и объяснить.
mov word [rdx + 4 * rcx], dx
%include "io64.inc" section .data mas times 100 dw 0 a dw 10 b db 2 section .text global WinMain WinMain: mov rbp, rsp xor rcx, rcx mov rdx, mas start_loop: mov ax, [a] idiv byte [b] mov [a], al inc rcx mov [rdx + 4 * rcx], ah test al, al jnz start_loop CMP_: test rcx, rcx jnz PRINT jmp M_END PRINT: mov rax, [mas + 4 * rcx] PRINT_DEC 4, rax dec rcx jmp CMP_ M_END: xor rax, rax ret
%include "io64.inc" section .data mas times 100 dd 0 a dd 10 b dw 2 section .text global WinMain WinMain: mov rbp, rsp xor rcx, rcx mov rdx, mas start_loop: mov ax, [a] mov dx, [a + 2] idiv word [b] mov word [a], ax inc rcx mov word [rdx + 4 * rcx], dx test ax, ax jnz start_loop end_loop: PRINT_ARRAY: CMP_: test rcx, rcx jnz PRINT jmp M_END PRINT: mov rax, [mas + 4 * rcx] PRINT_DEC 4, rax dec rcx jmp CMP_ M_END: xor rax, rax ret
Решение задачи: «Перевод числа в другую систему счисления»
textual
Листинг программы
%include "io64.inc" section .data mas times 100 dd 0 a dq 12345798 b dd 2 section .text global WinMain WinMain: mov rbp, rsp xor rcx, rcx start_loop: mov eax, [a] mov edx, [a + 4] idiv dword [b] mov dword [a], eax inc rcx mov dword [mas + 4 * rcx], edx test rax, rax jnz start_loop end_loop: PRINT_ARRAY: CMP_: test rcx, rcx jnz PRINT jmp M_END PRINT: mov rax, [mas + 4 * rcx] PRINT_DEC 4, rax dec rcx jmp CMP_ M_END: xor rax, rax ret
Объяснение кода листинга программы
Перевод числа в другую систему счисления:
- Объявляются переменные: — mas (массив 100 чисел), — a (исходное число), — b (коэффициент перевода).
- Запускается цикл перевода чисел: — Считается значение исходного числа (eax) и его старший байт (edx). — Выполняется деление eax на b с сохранением остатка в edx. — Результат записывается в a. — Увеличивается счётчик выполнения цикла (rcx). — Значение edx записывается в массив mas[rcx]. — Проверяется, что результат деления не равен нулю. Если это так, то продолжается цикл.
- После окончания цикла выполняется вывод массива на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д