Witajcie,
Mam problem z wykonaniem zadania. Zadanie to polega na konwersji liczby z systemu dziesiętnego na system szesnastkowy a następnie wypisanie wartości. (Liczba początkowa jest z góry zadeklarowana).
Wszystko działa dla liczby max 8 bitowej (mniejszej niz 255) gdy naprzykład podam liczbe 280 przy próbie ponownej kompilacji występuje następujący błąd:
Warning: value 0x118 truncated to 0x18
Rozumiem,że błąd pochodził ze złej deklaracji typu danych (zamiast word wykorzystałem byte - za mała pojemnosc)
Przy próbie zmiany z byte na word program wypisuje totalne głupoty - naprzykład dla wartości 280 wypisał "0x18".
Składnia GNU Asembler - jestem totalnie zielony i jest to moja pierwsza styczność z tym językiem programowania dlatego proszee o wyrozumiałość i pomoc ! :D
Poniżej załączam kod programu - czy ktoś jest w stanie podrzucić jakieś pomysły/rozwiązanie ? Heeelp ! :D
.globl _start
.data
var: .byte 240 # jesli zamienie na .word 280 - wypisuje glupoty
outstr: .ascii "value = 0xhl\n"
.equ strlen, . - outstr
.text
_start:
#pass only the necessary arguments
mov var,%al
mov $outstr+10,%rdi
#invoke conversion
call convert_byte
#print the result
mov $1,%eax
mov $1,%edi
mov $outstr,%rsi
mov $17,%edx
syscall
#and exit
mov $60,%eax
xor %edi,%edi
syscall
#convert byte to a string (hex)
convert_byte:
mov %al,%bl
and $0x0F,%al
call convert_nibble
shl $8,%ax
mov %bl,%al
shr $4,%al
call convert_nibble
mov %ax,(%edi)
ret
convert_nibble:
cmp $10,%al
jc below10
add $55,%al
ret
below10:
add $48,%al
ret