У меня есть несколько примеров, которые довольно просты, за исключением концепции LABEL. Пример 1 добавляет 25 10 раз сам по себе, тогда как пример 2 принимает дополнение к регистру A 700 раз.«Ярлык» на языке ассемблера
Example-1: MOV A,#0
MOV R2,#10
AGAIN: ADD A,#25
DJNZ R2,AGAIN
MOV R5,A
Example-2:
MOV A,#55H
MOV R3,#10
NEXT: MOV R2,#70
AGAIN: CPL A
DJNZ R2,AGAIN
DJNZ R3,NEXT
Я не могу понять концепцию LABEL. В примере-1, когда запускается первая программа времени, A получает значение 25, а затем, когда R2 уменьшается с 10 на 1, выход составляет 275 вместо 250. Но если я предполагаю, что LABEL обходит, если он не вызван, тогда все в порядке и я получаю результат 250. Но если я принимаю одно и то же (минуя LABEL в пошаговом исполнении) в примере-2, то LABEL NEXT будет обходить. И «DJNZ R2, AGAIN» будет исполнен. Поскольку NEXT был обойден, тогда как R2 получит значение # 70? Поэтому мой вопрос касается выполнения LABEL. Являются ли LABELS выполненными или обходимыми?
«ЛАБОРАТОРИЯ» - это то, что вам не нужно вручную настраивать адреса для перехода. Это * не * инструкция и не занимает места (за исключением того, что ассемблер может выровнять код, чтобы сделать его действительным). – user2864740
Этикетка не является чем-то, что вы обходите или нет - это просто символическое имя для адреса, где расположена следующая инструкция. Вы можете добавить ярлык перед каждой строкой без удара - если вы не используете его для перехода к нему или для его вызова. –
Справа. Затем в примере-1, когда запускается 1-я программа времени, команда добавления добавляет 25 в A, а когда 10 раз DJNZ добавляет 25 в A, она должна выйти до 275. Но в примере ответ получается 250. Как это? –