ASM Zliczanie cyfr, liter, spacji

Odpowiedz Nowy wątek
2019-06-06 15:54
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

Pozostało 580 znaków

2019-06-07 19:06
0

Wiesz czym jest ASCII?


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110

Pozostało 580 znaków

2019-06-07 19:10
0

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

Pozostało 580 znaków

2019-06-07 19:19
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


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110

Pozostało 580 znaków

2019-06-07 19:28
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

Pozostało 580 znaków

2019-06-07 19:34
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


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 2x, ostatnio: stivens, 2019-06-07 19:47

Pozostało 580 znaków

2019-06-07 20:22
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


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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