Assembly - Ajuda

Test3

Membro
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 .
 
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
 
or al,30h ; <----- esta instrução é que converte o valor em al para ascii .

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".
 
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 .
 
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ê...
 
Back
Topo