【发布时间】:2017-02-08 11:14:32
【问题描述】:
我正在尝试计算一个字符出现的次数,包括大写和小写以及从键盘输入的字符串中的空格字符。
我知道在 ASCII 中,a-z 是 97 - 122,A-Z 是 65-90。我不确定如何在汇编中实现这个算法,因为我对它很陌生,这个概念让我很困惑。
我的伪代码类似于:
// Uppercase
array[0] = -65
if (character read from string > 64) {
if (character read from string < 91) {
increment array[i] based on character
}
}
// Print out integers stored in array (the frequency)
我不确定这是否是解决问题的方法。
.data
prompt: .asciiz "Please enter a string: \n"
userString: .space 104
occLow: .space 104
occUpp: .space 104
newLine: .asciiz "\n"
#######################
# t0 = string
# t1 = char being looked at
# t2 = counter
# s0 = array lower (occLow)
# s1 = array upper (occUpp)
#######################
.text
main: li $v0, 4
la $a0, prompt # Prompts the user for string
syscall
li $v0, 8 # Save string to $a0
la $a0, userString
move $t0, $a0 # Move $a0 to $t0
syscall
test: lb $t1, 0($t0) # Load each individual character
beqz $t1, end # If it is null, end program
addi $t0, $t0, 1 # Next char
beq $t1, 32, space # If the character is a space
blt $t1, 91, upper # Uppercase character, 90 = 'Z'
bgt $t1, 96, lower # Lowercase character
b test
upper1: bgt $t1, 64, upper2 # 65 = 'A'
b test
upper2: # UPPERCASE ADDITIONS HERE
# la $s0, occUpp
# add $t0, $t0, 4
# lw $t1, 0($s0)
# addi $t2, 1
# sw $t1,
【问题讨论】:
-
你的伪代码太伪了。在 C 中编写一个工作实现,仅使用:1)
goto2) 仅单个赋值(例如,没有y = 2*x+z)
标签: assembly ascii mips frequency