Cześć,
mam problem z prostym programem w assemblerze (Linux). Chciałbym wczytać jakąś liczbę z klawiatury, wykonać na niej jakieś działanie arytmetyczne (np. dodawanie, odejmowanie, to bez znaczenia) i wyświetlić jej wartość. Niby trywialny problem, ale nie wiem za bardzo jak się do tego zabrać.
To mój kod:
SYSEXIT = 1
EXIT_SUCC = 0
SYSWRITE = 4
SYSCALL = 0x80
SYSREAD = 3
.data
value: .space 5, 0
value_len: .long .-value
result: .long
result_len: .long .-result
.text
.global _start
_start:
movl $SYSREAD, %eax
movl $EXIT_SUCC, %ebx
movl $value, %ecx
movl value_len, %edx
int $SYSCALL
movl $0, %edx
movl value_len, %ecx
for:
movb value(, %edx, 1), %al
subb $48, %al
movb %al, result(, %edx, 1)
inc %edx
loop for
add $10, result
movl $0, %edx
movl result_len, %ecx
for1:
movb result(, %edx, 1), %al
add $48, %al
movb %al, result(, %edx, 1)
inc %edx
loop for1
movl $SYSWRITE, %eax
movl $SYSEXIT, %ebx
movl $result, %ecx
movl result_len, %edx
int $SYSCALL
movl $SYSEXIT, %eax
movl $EXIT_SUCC, %ebx
int $SYSCALL
W analogiczny sposób zaprojektowałem działający program z szyfrem Cezara oraz program zmieniający w ciągu wprowadzonym z klawiatury litery z małych na duże i na odwrót, jednak z liczbami jest trochę inaczej bo chyba nie można ich zapisywać do zmiennej jak ja to robię.
Miałem inny pomysł, aby brać po jednej cyfrze i mnożyć ją *10k albo brać cyfrę i mnożyć jej bity *2k zaczynając od najmłodszego (k = 0,1,2,...,n). Problem w tym, że nie wiem jak to zrealizować i czy to w ogóle są dobre pomysły.
Z góry dziękuję za pomoc i pozdrawiam.