Pomoc z programem w Asembl'erze

Maciej Mszyca
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Muszę stworzyć program, który po wpisaniu jakiegoś znaku zmienia go na duży lub mały, np. po wpisaniu k musi wyświetlić się K. na razie zrobiłem tyle i nie wiem w czym mam błąd, mógłby ktoś pomóc?

Kopiuj
	.data
str1:	.asciiz "Podaj znak: "
str2:   .asciiz "Zmieniony znak to: "

.globl main
.text 
main:	
	li $v0, 4
	la $a0, str1 #wyswietlenie napisu
	syscall
	li $v0, 8 #wczytanie znaku
	syscall
	move $s0, $v0
	subi $s0, $s0, 0x20
	andi $s0, $s0, 0xfd
	li $v0, 4
	la $a0, str2 #wyswietlenie napisu
	syscall
	li $v0, 8 #wypisanie wyniku
	move $v0, $s0
	syscall
 	li $v0, 10 #koniec programu
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

A co dokładnie nie działa? Jak odpalisz pod debugerem to powinno być widać który fragment nie działa.

Maciej Mszyca
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0
Kopiuj
.data
str1: .asciiz "Podaj znak: "
str2: .asciiz "Zmieniony znak to: "

.globl main
.text
main:
li $v0, 4
la $a0, str1 #wyswietlenie napisu
syscall
li $v0, 12 #wczytanie znaku
syscall
move $s0, $v0
subi $s0, $s0, 0x20
andi $s0, $s0, 0xfd
addi $s0, $s0, 0x20
ori $s0, $s0, 0x20
li $v0, 4
la $a0, str2 #wyswietlenie napisu
syscall
li $v0, 11 #wypisanie wyniku
move $a0, $s0
syscall
li $v0, 10 #koniec programu
syscall

Działa teraz z dużej litery na małą, lecz na odwrót nie jak wpisuje "a" to wyskakuje również "a", ma ktoś jakiśpomysł?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

No dobra, ale czemu wg ciebie powinno zadziałać? Robisz tu jakieś (((c - 0x20) & 0xfd) + 0x20) | 0x20. Co dokładnie to miało dać? Raz że jest bardziej skomplikowane niż powinno a dwa że zamiana mała na dużą wymaga odwrotnej operacji niż zamiana dużej na małą...

chr(ord('A')+0x20)
'a'

vs.

chr(ord('a')-0x20)
'A'

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.