Сейчас на форуме: Rio, tyns777, zombi-vadim (+5 невидимых) |
eXeL@B —› Программирование —› Вопрос по компилю масма |
Посл.ответ | Сообщение |
|
Создано: 10 мая 2015 10:42 · Поправил: Rainbow · Личное сообщение · #1 |
|
Создано: 10 мая 2015 11:34 · Личное сообщение · #2 |
|
Создано: 10 мая 2015 11:45 · Поправил: dosprog · Личное сообщение · #3 Так это и есть опрерация с ЕСХ, а не с СХ: Code:
Code:
Смысла в этом макросе мало, почти нету: он не умеет изменять код в зависимости от величины лоопа. То-есть, если имеем вот такой код: Code:
Code:
А вот так будет работать по-любому: Code:
-- Добавлено -- Ну, кажется, понял - претензия как раз к ближнему прыжку.. С .UNTILCXZ ничего не выйдет. Но можно навоять собственных макросов (вроде UNTILеCXZ), которые будут творить что угодно. Только зачем?.. А можно вот так написать, будет работать: Code:
- но смысл? - Только усложняет понимание и ухудшает переносимость. В общем, это отголоски бытовавшего в своё время мнения, что-де "метки - это зло". |
|
Создано: 10 мая 2015 12:45 · Поправил: Rainbow · Личное сообщение · #4 |
|
Создано: 10 мая 2015 13:58 · Поправил: dosprog · Личное сообщение · #5 |
|
Создано: 11 мая 2015 13:41 · Поправил: Rainbow · Личное сообщение · #6 Вообщем мне кажется мну не совсем поняли. dosprog пишет: А вот так будет работать по-любому Будет, будет. Смысл в чем. Твой пример показан на низком уровне, только вместо адресов метки. На высоком масме такой цикл может быть записан так: .repeat <SOME OPERATIONS> .BREAK .IF ECX==0 .until FALSE Алгоритмически правильно будет закомпилено по-любому. Но из особенностей компиля, он сгенерит так же, как и у тебя в примере, только вместо jecxz(E3) будет сперва TEST ECX, ECX, JE ADDR = 2+2(5) bytes jecxz=2bytes; TEST+JE=2+2 bytes; 2+2 - 2 = 2 bytes economy Не, ну я конечно понимаю, что энто все можно закодить через DEC REG+.break .if zero?, например, но опять же, 1+2 - 2 = 1 bytes economy Вопрос: не юзает чтоли инструкцию в high-lev вовсе ?.. Кондишна под инструккцию, типа .ifcxz или .if cxz? Ведь .untilcxz(LOOPD) по факту есть... |
|
Создано: 11 мая 2015 14:36 · Личное сообщение · #7 Если счёт идёт на байты, то тогда надо уже не стандартные макросы применять, а собственные. Где всё желаемое реализуется через директиву 'DB'. | Сообщение посчитали полезным: Rainbow |
|
Создано: 11 мая 2015 14:40 · Личное сообщение · #8 |
|
Создано: 11 мая 2015 19:20 · Поправил: dosprog · Личное сообщение · #9 Использование макросов для условий/циклов имеет целью избежать применение меток, когда, вставив в текст программы кусок другой программы (или размножив кусок этой же), почти наверняка (при копировании куска этой же программы - наверняка) получим конфликт имён меток, а это путь наделать ошибок. Тогда как при использовании директив вроде .IF, .WHILE, .UNTIL в программах меток нет, и куски кода легко компоновать. Другого обоснования применению этих директив нет. То есть, если заранее смириться с вознёй с метками, то можно обходиться и без макросов, тем более, что наглядности они добавляют сомнительной. |
eXeL@B —› Программирование —› Вопрос по компилю масма |