ASM Zliczanie cyfr, liter, spacji

0

Witam.
Mam kawałek kodu i problem (jestem zielony w asemblerze) jak go rozwinąć żeby po wpisaniu znaków z klawiatury komputer podał na wyjściu ilość małych, dużych liter, ilość cyfr, spacji i wszystkich znaków.

.data
bufor: .space 100
.text
li $v0,8
li $a1,100
la $a0,bufor
syscall
li $t0,0
la $a0,bufor
loop: lb $t1,0 ($a0) #wczytanie do t1 pierwszy znak bufora  a0
beq $t1,0,print
blt $t1,'a',next
bgt $t1,'z',next
$t0,$t0,1 #t0 +++ licznik


next:
addi $a0,$a0,1 #kolejny znak słowa
b loop
print: 
li $v0,1
move $a0,$t0

0

Wiesz czym jest ASCII?

0

Wiem. Ale nie wiem jak dodać w tej pętli loop żeby sprawdzało jeszcze liczby od 0 do 9 i ta resztę

0

Musisz napisac cos ala

switch(c)
    case 'a'...'z':
        ...
    case 'A'...'Z':
        ...
    case '0'...'9':
        ...
    .
    .
    .

Jak juz cos wpada w jeden case to wiadomo ze w zaden inny i tak nie wpada wiec skokami latwo to zrobic

0

No tak jeśli był by to C to bym to napisał raz dwa , a tak potrzebuje chociaż wzorca jak do tego dodać zliczanie cyfr np

0

dla uproszczenia nie pisze assemblerem bo jest straszny, koncept jest wazniejszy

Np sprawdzasz
cyfry:
c <=? '9' else jump duze_litery
c >=? '0' else jump duze_litery
cyfr++
jump next

duze_litery:
c <=? 'Z' else jump male_litery
c >=? 'A' else jump male_litery
duzych_liter++
jump next

@Edit
Oczywiscie skok "c <=? 'Z' else jump male_litery" jest bez sensu (patrz ASCII) ale koncept jest taki

0

No tak jeśli był by to C to bym to napisał raz dwa

to napisz a potem gcc -S albo wrzuć do jakiegoś godbolta

1 użytkowników online, w tym zalogowanych: 0, gości: 1