Jorge Luiz_ Postado Agosto 13, 2024 em 19:20 Compartilhar Postado Agosto 13, 2024 em 19:20 Olá! Queria saber como colocar if, elseif e else no Assembly? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Administradores Fernando Mercês Postado Agosto 14, 2024 em 18:00 Administradores Compartilhar Postado Agosto 14, 2024 em 18:00 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Jorge Luiz_ Postado Agosto 17, 2024 em 00:21 Autor Compartilhar Postado Agosto 17, 2024 em 00:21 Olá? Entendi o comando IF em baixo nível! Como é em Assembly ELSEIF e ELSE em baixo nível? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.