1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Assembly - Ajuda

Discussão em 'Programação' iniciada por Test3, 15 de Novembro de 2007. (Respostas: 4; Visualizações: 1384)

  1. Olá , surgiu me um problema e necessitava da vossa ajuda .

    Encontrei aqui no forum um programa em assembly que guarda uma string num ficheiro . Tentei altera-lo de maneira a que guarde um numero mas não consegui .
    Se guardar esse numero como string funciona mas não é esse o objectivo pois quero depois fazer somas e subtrações .
    Quando executo o programa e vou ao ficheiro.txt ver o que gravou diz que o conteudo se encontra em binário .
    Andei a ver e acho que se tem de conveter de binário para ascii e vice-versa , certo?
    Tentei com alguns exemplos que vi mas sem sucesso .

    Tá aqui o código :

    section .data
    fich: db ´Ficheiro.txt´
    num: dd 6
    tam_num: equ $ - num

    section .text
    global _start

    _start:

    mov eax,8
    mov ebx,fich
    mov ecx,00644Q
    int 80h

    test eax,eax

    js skipwrite
    call fileWrite

    skipwrite:
    mov ebx,eax
    mov eax,1
    int 80h

    fileWrite:
    mov ebx,eax
    mov eax,4
    mov ecx,num
    mov edx,tam_num
    int 80h

    mov eax,6
    int 80h
    ret


    Se alguem me souber ajudar ou conhecer algum site que explique isto agradecia .
    Entretanto vou continuando à procura .

    Obrigado .
     
  2. Já consegui resolver este problema :)

    Por exemplo somar dois números e gravar para ficheiro tinha de fazer assim:

    mov al,[num1]
    add al,[num2]
    aaa
    or al,30h ; <----- esta instrução é que converte o valor em al para ascii .
    mov [result],eax

    e agora mandar para ficheiro o que tinha em result


    Mas agora tenho outro problema :(

    Agora queria fazer o contrário , ler um numero dum ficheiro e utiliza-lo numa soma mas não estou a conseguir . Se alguém puder ajudar ... Obrigado
     
  3. reise

    reise Power Member

    Consegues explicar-me como como é que fazendo or do valor no registo al com 30h "transforma em ascii"?

    Imagino que o que queiras fazer é se tiver 100 no registo al, escrever "d" para ao ficheiro e não "100".
     
  4. Não te consigo dizer o porquê de ser assim . Apenas vi num exemplo e dizia lá que convertia o que estivesse em al para ascii .

    O que eu pretendia fazer era mesmo dado o valor por exemplo 6 , escrever mesmo 6 num ficheiro de texto . E já consigo , não consigo é o contrário , ler um numero de um ficheiro txt e usa-lo numa soma ou subtracção .
     
  5. Consu

    Consu Power Member

    Isso é verdade no caso do número contido em al estar no intervalo 0-9. O código ASCII destes caracteres em hexadecimal é 0x30-0x39. Desta forma, ao fazeres o OU lógico estás a transformar 0x0d em 0x3d e é por isso que funciona.
    Vê o caso de estar em al 17, que em binário é 00010001. 00010001 | 00110000 = 00110001 => 0x31 (não me parece que seja isso que pretendas... :p)

    Quando se vê algo que não se compreende convém perceber o porquê...
     

Partilhar esta Página