Ir ao conteúdo
  • Cadastre-se

Compilar um código Assembler em 32-bits


FBorges22

Posts recomendados

  • Membro VIP

Saudações

Possuo aqui um código assembler que estou tentando compilar, usei o Magic Assembler 1.12 e tive sucesso, mas esse compilador só consegue compilar em 16-bits, e eu não consigo executar esse programa no Windows, existe algum outro compilador que eu consiga compilar ele para 32-bits?

OBS: Esse meu programa que estou fazendo é de linha de comando (DOS) e precisa ser 32-bits para ser usado no Windows 2000 e XP.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Meu código .ASM não está compilando com ele! O código é esse:

mov ax,5301
xor bx,bx
int 15
mov ax,530e
mov cx,0102
int 15
mov ax,5307
mov bl,01
mov cx,0003
int 15
END

E ele me da um erro assim: (usando o MASM32 como compilador)

C:\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"C:\Masm32\Include" "D:\Pwrdown\pwrdown.asm"

Assembling: D:\Pwrdown\pwrdown.asm

D:\Pwrdown\pwrdown.asm(1) : error A2034: must be in segment block

D:\Pwrdown\pwrdown.asm(2) : error A2034: must be in segment block

D:\Pwrdown\pwrdown.asm(3) : error A2034: must be in segment block

D:\Pwrdown\pwrdown.asm(4) : error A2048: nondigit in number

D:\Pwrdown\pwrdown.asm(5) : error A2034: must be in segment block

D:\Pwrdown\pwrdown.asm(6) : error A2034: must be in segment block

D:\Pwrdown\pwrdown.asm(7) : error A2034: must be in segment block

D:\Pwrdown\pwrdown.asm(8) : error A2034: must be in segment block

D:\Pwrdown\pwrdown.asm(9) : error A2034: must be in segment block

D:\Pwrdown\pwrdown.asm(10) : error A2034: must be in segment block

Make error(s) occured.

Total compile time 78 ms

O que pode estar errado?

Link para o comentário
Compartilhar em outros sites

Está faltando as diretivas iniciais. Para o seu caso poderia ficar:


.model tiny
.code
ORG 100H

start:

mov ax,5301
xor bx,bx
int 15
mov ax,530eH
mov cx,0102
int 15
mov ax,5307
mov bl,01
mov cx,0003
int 15

END start



Outra coisa, esses valores colocados nos registradores são em decimal mesmo? Porque onde tem "mov ax,530e" parece ser em Hex. Então não esqueça de acrescentar o "H" no final deles para indicar que são números hexadecimal. Se o número for "530e" mesmo será obrigatório o uso do "H" no final.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Ainda não deu certo!!

Na hora de dar Build no RedASM ele fala assim:

C:\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"C:\Masm32\Include" "D:\Pwrdown\pwrdown.asm"

Assembling: D:\Pwrdown\pwrdown.asm

D:\Pwrdown\pwrdown.asm(18) : warning A4023: with /coff switch, leading underscore required for start address : start

C:\Masm32\Bin\LINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 /LIBPATH:"C:\Masm32\Lib" "D:\Pwrdown\pwrdown.obj"

Microsoft ® Incremental Linker Version 5.12.8078

Copyright © Microsoft Corp 1992-1998. All rights reserved.

pwrdown.obj : warning LNK4078: multiple ".data" sections found with different attributes (C0220040)

LINK : error LNK2001: unresolved external symbol _start

pwrdown.exe : fatal error LNK1120: 1 unresolved externals

Make error(s) occured.

Total compile time 94 ms

Link para o comentário
Compartilhar em outros sites

Perceba que não está havendo erro na compilação e sim na linkagem. Isso porque você está tentando compilar um código feito pra DOS com o linker pra Win32. No primeiro post citei o Linker563 pra fazer programas em 16bits.

Se você colocar a diretiva ".486" na primeira linha e mudar a linha onde tem ".model tiny" para ".model flat, stdcall", o código será linkado e o executável será gerado sem problemas mesmo usando o Linker para Win32. Mas esse código compilado pra Win32 não pode ser rodado corretamente no Windows, pois há interrupções como "int 15" sendo executadas.

Link para o comentário
Compartilhar em outros sites

oi, não sei se este é o seu problema, mas acho que os programas de linha de comando deveriam funcionar direito nestas versões de windows, porém tem alguns que é preciso configurar a "compatibilidade" no menu propriedades do arquivo, e também o windows xp e 2000 tem umas frescuras de "modulos de memória, no qual tem que fazer umas paradas em assembler para se ter acesso a memória real...

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...