Specyfikacja jaką podałeś nie jest szczególnie precyzyjna, ale trudno, będę się domyślał.
Więc pomijając wszystkie szczegóły związane z wczytywaniem danych, masz w zasadzie trzy rzeczy do zrobienia:
- rozpoznanie systemu
- obliczenie wartości
- wypisanie wyniku.
Z 3) sobie poradzisz mając podstawy asemblera.
Jeśli chodzi o 1) to to kilka if-ów (w przypadku asm, skoków warunkowych, ale polecam myśleć strukturalnie/w kategoriach if-ów na przykład), coś w rodzaju:
if (word[0] != '0') {
result = convert(10, word);
} else if (word[0] == 'o') { // nitpick: tutaj wypadałoby jeszcze sprawdzić czy liczba to nie "" (ciąg pusty)
result = convert(8, word + 2);
} else if (word[0] == 'x') {
result = convert(16, word + 2);
} else {
print("nieznany system");
return 1;
}
A jeśli chodzi o 2), istnieje prosty algorytm na obliczenie wartości liczby zapisanej w dowolnym systemie pozycyjnym (OT: 'obliczenie wartości zapisanej liczby to sensowne sformułowanie? Jak to wyrazić lepiej? ).
mając liczbę "12345" (12345 zapisane w systemie 10kowym), znamy jej wartość bo możemy obliczyć:
12345 = 5 * 10^0 + 4 * 10^1 + 3 * 10^2 + 2 * 10^3 + 1 * 10^4
Analogicznie 0x89AB = 11160 + 1016</sup>1 + 9162 + 816</sup>3
Więc żeby znaleźć liczbę zapisaną w stringu, idziesz od końca po jej cyfrach i sumujesz cyfra*baza^potęga jak powyżej.