Assembler - язык неограниченных возможностей

         

Перенос проверки условия в конец цикла


Циклы типа WHILE или FOR, которые так часто применяются в языках высокого уровня, оказываются менее эффективными по сравнению с циклами типа UNTIL из-за того, что в них требуется лишняя команда перехода:

; цикл типа WHILE mov si,counter ; число повторов mov dx,start_i ; начальное значение loop_start: cmp dx,si ; пока dx < si - выполнять jbn exit_loop

; [тело цикла]

inc dx jmp loop_start

; почти такой же цикл типа UNTIL mov si,counter mov dx,start_i loop_start: ; выполнять

; [тело цикла]

inc dx cmp dx,si ; пока dx < si jb loop_start

Естественно, цикл типа UNTIL, в отличие от цикла типа WHILE, выполнится по крайней мере один раз, так что, если это нежелательно, придется добавить одну проверку перед телом цикла, но в любом случае даже небольшое уменьшение тела цикла всегда оказывается необходимой операцией.



Содержание раздела