PDA

Просмотр полной версии : asm


rubik-nerubik
08.10.2007, 17:42
люди как реализовать что-то вроде цикла на асме? типа если один регистр больше другого, то перейти на метку, допуситм а1?

Kaimi
08.10.2007, 17:46
Читай http://ha.hoha.ru/a/Assembler/stats12/stat.php

Sn@k3
08.10.2007, 17:49
cmp ax, bx
jg a1
a1: ......

rubik-nerubik
08.10.2007, 17:59
во. резпект. спасибо

slesh
08.10.2007, 20:02
Берешь Fasm и юзаешь макрос цикла ;)

Ni0x
08.10.2007, 20:14
slesh, не катит. Из-за таких вот советов, люди начинают ассоциировать ассемблер с каким-то макро-извращением. Теряется красота... но это мое мнение.

slesh
08.10.2007, 23:38
2 Ni0x я знаю. Но судя по задаваемому вопрос топикстартер не читал описание инструкций j* jn* я просто предлогаю альтернативное решение.
я конечно сам не сторонник макросов, но бывает легче написать в макросном виде нежели в обычном.
типа условие (ecx<>0 and ((ecx>10) and (eax<20) or (ecx>100) and (eax<200) or (ecx>1000) or (eax<2000)) легче в виде макроса написать.

grinay
09.10.2007, 02:18
Цикл издревне в сияруси юзается посредством регистра cx-сейчас ecx
Делается метка цикла например
loop1:
и далее идет тело цикла
например
cmp eax,0
jz end_loop;перейти если eax=0
inc eax;инкремент eax к примеру
loop loop1;как дойдет до этого места декриментируется ecx и переход обратно на метку loop1 и вот тебе и весь цикл
П.С.В ecx должно быть нужное тебе значение.Тоесть сколько циклов например 10=10h

_Great_
09.10.2007, 08:15
Цикл издревне в сияруси
Вообще говоря использовать можно хоть ESP как счетчик.. если сместо loop loop1 поставить dec esp / jnz loop1

П.С.В ecx должно быть нужное тебе значение.Тоесть сколько циклов например 10=10h
Поправка - если в ECX был ноль, цикл выполнится 4294967295 раз.

ЗЫ. Топикстартеру - читать описание инструкций loop, jmp, j*/jn*.
Тема закрыта