Witam, mam tutaj program do obliczania podwójnej silni, działa on poprawnie jak chodzi o logikę. Wiem to, ponieważ wartości dla 1,2,3,4 są dobrze wypisywane. Rzecz w tym, że gdy dostaję wynik w rejestrze ax, to w instrukcji add ax,30h
dodaje to 30h
do jednego znaku, stąd, gdy wartość dla 5 jest 15, to program drukuje jakieś krzaczki zamiast oczekiwanej liczby. Stąd moje pytanie, jak zastąpić tą instrukcję, żeby wyniki dwu i więcej cyfrowe mogłyby zostać drukowane?
I jeszcze takie pytanie, ten program poniżej ma działać na liczbach 128 bitowych, jest coś takiego w ogóle możliwe?
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov bx, 4 ;for calculating factorial 3
call proc_fact
add ax, 30h
mov [fact], ax
mov edx,1 ;message length
mov ecx,fact ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
proc_fact:
cmp bl, 1
jg do_calculation
mov ax, 1
ret
do_calculation:
dec bl
dec bl
call proc_fact
inc bl
inc bl
mul bl
ret
section .data
section .bss
fact resb 1