Ассамблея печатает второе сообщение дважды ⇐ Linux
Ассамблея печатает второе сообщение дважды
Я изучал подпрограммы на ассемблере Nasm для Linux (работает на машине Kali). Я написал приведенный ниже код, и на выходе дважды выводится «Hello World 2\n», и я не могу понять, почему. Может кто-нибудь объяснить?
раздел .data msg db "Привет, мир", 0Ah ; сообщение 1 msg2 db "Привет, мир 2", 0Ah ; сообщение 2 раздел .текст глобальный _start _начинать: переместить eax, сообщение; загрузить сообщение для регистрации вызвать стрлен; получить длину строки с помощью подпрограммы mov edx, eax ; устанавливает длину строки переместить eax, 4; код ядра для записи мов ebx, 1; использовать стандартный переместить ecx, сообщение; буфер - это сообщение интервал 80ч переместить eax, msg2 ; делает то же самое с msg2 позвонить стрлену мов edx, eax мов Еакс, 4 мов ebx, 1 перемещение ecx, msg2 интервал 80ч; по какой-то причине это запускается дважды? перемещение eax, 1 ; выйти с кодом 0 мов ebx, 0 интервал 80ч стрлен: нажать ebx; использовать стек для сохранения регистра ebx мов ebx, eax ; перемещает eax в сохраненный регистр следующийсимвол: cmp байт [eax], 0 ; сравнивает байт с 0, если это правда, джз закончил; прыгает вниз или увеличивает единицу и вкл. eax; начинает эту часть заново JMP следующий символ законченный: суб-eax, ebx; вычитает два значения, чтобы получить поп ebx; длину строки, затем восстанавливает ebx и возвращает РЭТ; туда, где это называлось
Я изучал подпрограммы на ассемблере Nasm для Linux (работает на машине Kali). Я написал приведенный ниже код, и на выходе дважды выводится «Hello World 2\n», и я не могу понять, почему. Может кто-нибудь объяснить?
раздел .data msg db "Привет, мир", 0Ah ; сообщение 1 msg2 db "Привет, мир 2", 0Ah ; сообщение 2 раздел .текст глобальный _start _начинать: переместить eax, сообщение; загрузить сообщение для регистрации вызвать стрлен; получить длину строки с помощью подпрограммы mov edx, eax ; устанавливает длину строки переместить eax, 4; код ядра для записи мов ebx, 1; использовать стандартный переместить ecx, сообщение; буфер - это сообщение интервал 80ч переместить eax, msg2 ; делает то же самое с msg2 позвонить стрлену мов edx, eax мов Еакс, 4 мов ebx, 1 перемещение ecx, msg2 интервал 80ч; по какой-то причине это запускается дважды? перемещение eax, 1 ; выйти с кодом 0 мов ebx, 0 интервал 80ч стрлен: нажать ebx; использовать стек для сохранения регистра ebx мов ebx, eax ; перемещает eax в сохраненный регистр следующийсимвол: cmp байт [eax], 0 ; сравнивает байт с 0, если это правда, джз закончил; прыгает вниз или увеличивает единицу и вкл. eax; начинает эту часть заново JMP следующий символ законченный: суб-eax, ebx; вычитает два значения, чтобы получить поп ebx; длину строки, затем восстанавливает ebx и возвращает РЭТ; туда, где это называлось
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему этот код печатает " " вместо "." однако он правильно печатает другие элементы?
Anonymous » » в форуме C++ - 0 Ответы
- 125 Просмотры
-
Последнее сообщение Anonymous
-