В рамках дисциплины «Архитектуры ЭВМ» мы начали изучать новый для нас язык программирования 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 {переходим на метку}

Возможно кому то, кроме меня, данная информация тоже покажется полезной, пока что написал это здесь только для себя, чтоб всегда иметь под рукой в нужный момент. Спасибо за внимание


Posted on: 12.03.2014
4 Responses to Ассемблер
  1. Что-то с условием не так написали. По крайней мере не аккуратно. Для перехода по else не надо писать проверку условия. Тем более jn — это не верно. Надо jne.

  2. Боюсь, что такой цикл «for (int i=1; i>=10; i++)» не выполнится ни разу…

Добавить комментарий

Ваш e-mail не будет опубликован.