Jorge Luiz_ Posted August 13, 2024 at 07:20 PM Share Posted August 13, 2024 at 07:20 PM Olá! Queria saber como colocar if, elseif e else no Assembly? Quote Link to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted August 14, 2024 at 06:00 PM Administrators Share Posted August 14, 2024 at 06:00 PM Oi @Jorge Luiz_, Construções como if, else, for, while, etc são de alto nível. Em Assembly, elas são implementadas utilizando saltos (em x86, são as instruções começando com "J", de "jump"). Por exemplo, analise o código abaixo: cmp eax, 0 jne exit ; código se EAX é zero exit: ; resto do código No exemplo, há uma comparação de EAX com zero. Se não for zero, o programa vai saltar (JNE - Jump If Not Equals) para o rótulo (label) exit. Mas se EAX for zero, o código logo abaixo do salto (JNE) será executado (e depois o que está sob o rótulo exit também). O que acontece é que alguns compiladores de Assembly possuem macroinstruções que facilitam este trabalho e funcionam de forma similar às instruções de alto nível. Por exemplo, no fasm você pode fazer: .if eax = 0 ; código se EAX é zero .endif ; resto do código Mas no binário compilado, você verá os saltos de qualquer maneira, pois estas são instruções "reais" que o processador entende (enquanto .if só o compilador Assembly entende). Além disso, os rótulos somem pois os destinos da maioria dos saltos são deslocamentos (X bytes para frente ou para trás), o que na prática vira endereços de memória. Veja: Dá uma olhada: http://flatassembler.net/docs.php?article=win32#2.2 Abraço! 1 Quote Link to comment Share on other sites More sharing options...
Jorge Luiz_ Posted August 17, 2024 at 12:21 AM Author Share Posted August 17, 2024 at 12:21 AM Olá? Entendi o comando IF em baixo nível! Como é em Assembly ELSEIF e ELSE em baixo nível? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.