Jorge Luiz_ Posted August 13, 2024 Posted August 13, 2024 Olá! Queria saber como colocar if, elseif e else no Assembly? Quote
Administrators Fernando Mercês Posted August 14, 2024 Administrators Posted August 14, 2024 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
Jorge Luiz_ Posted August 17, 2024 Author Posted August 17, 2024 Olá? Entendi o comando IF em baixo nível! Como é em Assembly ELSEIF e ELSE em baixo nível? Quote
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.