Comunidade OSDevBrasil.net
Maio 22, 2012, 06:58:23 *
Bem-vindo, Visitante. Por favor faça o Login ou Registro.

Login com nome de usuário, senha e duração da sessão
Notícias: Anuncie a nossa comunidade a amigos, fóruns...
 
   Home   Ajuda Pesquisa Login Registrar  
Páginas: [1]
  Imprimir  
Autor Tópico: Assembly em C,no GCC dá erro! Alguem tem alguma solução?  (Lida 448 vezes)
cianos
OS Newbie
*

Karma: 0
Mensagens: 8


Projetando o Futuro

ciano@ymail.com
Ver Perfil WWW Email
« : Abril 17, 2010, 07:43:18 »

int readsec(char driver, unsigned int setor, unsigned char quant, void far *buf)
{
    int stat = reset(driver);

    if (!stat)
    {
        unsigned segm = FP_SEG(buf); /* Obtem-se o segmento de buf */
        unsigned ofs = FP_OFF(buf); /* Obtem-se o offset de buf */

        asm{
            mov ax, WORD PTR[setor] /* Poem o setor em ax */
            mov si, SectorsPerTrack /* Poem o valor dos setores por trilha em si*/
            div si /* Divide o valor do setor por setores por trilha*/
            inc dl  /* dl = modulo da divisao mais um */
            mov cl, dl /* Poem o valor de dl para cl */
            xor dx, dx /* zera dx */
            mov si, NumHeads /* si = numero de cabecas */
            div si /* divida o conteudo de ax por si (ax = setor/setores por trilha) */
            mov ch, al /* move a parte baixa do quociente em ch */
            shl ah, 6 /* shift para a esquerda em 6 bits */
            or cl, ah /* cl |= ah */
            xchg dl, dh /* troca o valor de dl por dh e vice-versa */
            mov dl, BYTE PTR[driver] /* dl = driver */
            MOV AL, BYTE PTR[quant] /* al = 2 | setores para leitura */
            MOV AH, 2 /* ah = 2 | funcao de leitura de disco */
            push es /* salva es para a pilha */
            mov bx, WORD PTR[segm] /* bx = segmento de buf */
            mov es, bx /* es = bx */
            mov bx, WORD PTR[ofs] /* bx = offset de buf */
            PUSH DS /* salva ds para pilha */
            INT 0x13 /* Chama a bios */
            POP DS /* carrega ds da pilha */
            pop es /* carrega es da pilha */
            mov BYTE PTR[stat], al /* stat = al | al = setores lidos */
            jnc CERTO /* se tudo ocorreu bem vai para o label CERTO */
            mov BYTE PTR[stat], ah /* senao stat = ah */
        }
        return -stat;
        CERTO:
            return stat;
    }

    return -stat;
}
Registrado
cacio jg
OS Newbie
*

Karma: 1
Mensagens: 12


caciojg@hotmail.com
Ver Perfil Email
« Responder #1 : Abril 17, 2010, 08:46:44 »

olá amigo, qual erro ocorre? é erro na hora de compilar? ou no momento da execução do código?

Outro detalhe, os comentarios em Assembly são feitos com (Piscar ponto e virgula. Pode ser que o Gcc não esteja reconhecendo os marcadores /*, como marcadores de comentario, afinal aquele bloco do código está em assembly (isso ocorre em alguns compiladores C).

De qualquer forma, por favor detalhe o erro que ocorre.
Registrado
cianos
OS Newbie
*

Karma: 0
Mensagens: 8


Projetando o Futuro

ciano@ymail.com
Ver Perfil WWW Email
« Responder #2 : Abril 18, 2010, 11:17:16 »

Acho que esse código usa um compilador DM, no gcc dá erro! Alguem sabe como transcrever para o formato que o gcc reconhece??
TIPO:
asc("assmbler code");
Registrado
Mounter
Administrador
OS Sr. Member
*****

Karma: 12
Mensagens: 432


mrjostz@hotmail.com
Ver Perfil WWW Email
« Responder #3 : Abril 18, 2010, 06:05:20 »

Opa, tudo certo cianos?

De uma olhada nesse link que vai lhe esclarecer bastante...

http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

Abraços
Registrado

╔╗╔╦══╦╗╔╦══╦╗
║╚╝║╔╗║╚╝║╔╗║║
║╔╗║╠╣║╔╗║╠╣╠╣
╚╝╚╩╝╚╩╝╚╩╝╚╩╝

Projeto SOmBRA - http://code.google.com/p/projeto-sombra

S.O.: Ubuntu 10.04
Browser: Google Chrome 10

Páginas: [1]
  Imprimir  
 
Ir para:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006-2009, Simple Machines XHTML 1.0 Válido! CSS Válido!