Ассемблер
В рамках дисциплины “Архитектуры ЭВМ” мы начали изучать новый для нас язык программирования Assembler, для тех кто уже на этом этапе не понял о чем речь, либо вообще не имеет смысла продолжать читать дальше, либо просвещайтесь, специально для Вас прикрепил ссылку на википедию. Лично для меня сей язык показался чем то непонятным и нелогичным, особенно после того, как в течение полутора лет изучаешь схожие по синтаксису языки. Заранее предупреждаю, что пишу в первую очередь для себя, то есть для начинающего, поэтому человеку, который хорошо знает Ассемблер, будет не очень то интересно.
Первая проблема с которой я столкнулся при изучении языка, а как же пользоваться условиями? Если в большинстве случаев все просто, например в C#:
1 2 3 4 5 6 7 8 | if (a == b) { // ... } else { // ... } |
Однако в ассемблере эти простые строки пишутся совершенно иначе:
1 2 3 4 5 6 7 | cmp ax, bx {сравниваем ax и bx} jne loop2 {если неравно то выполняем метку loop2} ... {выполняется если равно} jmp loopend {перепрыгиваем в конец} loop2: ... loopend: |
Вторая проблема это циклы
Цикл с предусловием на C#:
1 2 3 4 | while (a==10) { //... } |
Пример на ассемблере:
1 2 3 4 5 6 7 | loop1: cmp a, 10 jne loop2 {если не равно десяти то выходим из цикла} ... jmp loop1 {если равно повторяем цикл} loop2: ... |
Последним мы рассмотрим цикл с счетчиком
C#:
1 2 3 4 | for (int i=1; i<=10; i++) { // ... } |
Ассемблер:
1 2 3 4 5 6 | mov ax, 1 {задаем значение 1} loop1: ... inc ax {прибавляем единичку increment} cmp ax, 10 {даем циклу выполнится до 10} jg loop1 {переходим на метку} |
Возможно кому то, кроме меня, данная информация тоже покажется полезной, пока что написал это здесь только для себя, чтоб всегда иметь под рукой в нужный момент. Спасибо за внимание
Что-то с условием не так написали. По крайней мере не аккуратно. Для перехода по else не надо писать проверку условия. Тем более jn – это не верно. Надо jne.
Исправил немного, теперь правильно? Спасибо за найденную ошибку
Боюсь, что такой цикл “for (int i=1; i>=10; i++)” не выполнится ни разу…
Меня как всегда подводит моя же невнимательность
Спасибо, очень понятно написано. Реально не хватает проведения аналогий с другими “НОРМАЛЬНЫМИ” ЯП.