0 / 0 / 0
Регистрация: 08.02.2017
Сообщений: 18
|
|
1 | |
Ассемблер и вывод строк11.04.2019, 23:46. Показов 522. Ответов 8
Метки нет (Все метки)
Вопрос в следующем: даны два почти полностью схожих участка кода на ассемблере. Изменение одно - расположение строки относительно части кода с выводом этой самой строки. Но при запуске кода, изображённого на первом скрине - пустота, второй же код отрабатывает нормально. Разве может зависеть исполнение от того, где строка объявляется?
0
|
11.04.2019, 23:46 | |
Ответы с готовыми решениями:
8
Внешний ассемблер для обработки строк Ассемблер вывод на экран Разбор исходных строк программы ассемблер на поля Вывод побочной диагонали, ассемблер |
0 / 0 / 0
Регистрация: 08.02.2017
Сообщений: 18
|
|
12.04.2019, 08:51 [ТС] | 3 |
Я с ассемблером не особо хорошо ещё знаком. Но разве метка не исполняется в любом случае, как код? В ассемблере, в плане "хода" по коду, ничего нового же нет - команды идут последовательно. То есть, получается, что суть только в том, "когда" эта часть кода исполнится?
0
|
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
||||||
12.04.2019, 10:03 | 4 | |||||
Правильно.
Но, смотрите сами: Элементарный код
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
|
|
13.04.2019, 00:15 | 5 |
Если исполнение кода процессором выедет на строку, то он начнет молотить ее как какой-то бессмысленный код. Когда у тебя строка расположена сразу после int 10h так и произойдет. Надо располагать строку там где исполнение на нее никогда не выедет.
Добавлено через 7 минут Метка вообще никогда не исполняется. Она - сущность которая существует только в исходнике программы. А для процессора существует уже скомпилированная программа в которой нет меток. Зато есть точка старта. Вот начиная с нее процессор и начинает молотить все подряд как код и ему все едино что встретится при этом на пути, встретятся данные и он будет молотить их как какой-то бессмысленный код. Надо просто программу писать так, чтобы такого никогда не происходило.
2
|
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
|
|
13.04.2019, 03:26 | 6 |
0
|
0 / 0 / 0
Регистрация: 08.02.2017
Сообщений: 18
|
|
13.04.2019, 12:36 [ТС] | 7 |
Добавлено через 1 минуту
Не подскажешь тогда, что представляет собой выполнение кода метки? И почему это влияет на ход выполнения программы?
0
|
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
|
13.04.2019, 12:53 | 8 |
Метка - это адрес. У Вас это : puts, end_puts и т.д..
Переменная -это адрес и длина в байтах. У Вас это строка loading_str. Потому, что есть подпрограммы и переходы условные и безусловные. В любом случае когда происходит переход на метку(см. выше), в процессор загружается адрес следующей выполняемой команды, который "закреплен компилятором" за этой меткой.
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
|
|
13.04.2019, 21:33 | 9 |
Метка - это текущий адрес в исходнике которому ты даешь имя, метишь его. Когда выполняется jmp metka в счетчик команд процессора загружается адрес которому ты дал имя metka и процессор продолжает исполнение кода уже с этого адреса. Программист об этом говорит, что команда jmp metka прыгает (осуществляет переход) на метку metka или говорит команда прыгает на адрес который он пометил меткой metka, адрес которому он дал имя metka. Но никто не говорит, что осуществляется выполнение кода метки.
0
|
13.04.2019, 21:33 | |
13.04.2019, 21:33 | |
Помогаю со студенческими работами здесь
9
Перенос и вывод строки Ассемблер Вывод переменной из C на экран через ассемблер. Вывод пикселя через встроенный ассемблер (C++) Вывод группы одинаковых символов. Ассемблер, tasm Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |