任务描述
本关任务:编写一个能统计字符串中各种字符数量的小程序。
编程要求
在寄存器RSI
中存放有一个以符号$
结尾的字符串的地址,请在数据段中定义一个字节型变量Result
,长度为3
个字节。
然后统计这个字符串中数字,字母,其他字符(即除数字、字母外的)的数量,并将结果依次存放到Result
的三个字节中。
注意:字符串末尾的$
不算在内。
输入数据由评测系统读取,并存放到指定寄存器中,程序运行结果也由评测系统读取并输出,学员只需要实现任务逻辑即可。
测试说明
平台会对你编写的代码进行测试:
测试输入:041AC$
预期输出:010200
测试输入:0EHello World!$
预期输出:000A02
输入数据的前两个字符是字符串长度的十六进制表示,之后则是字符串的内容。
预期输出每两个字符组成一个十六进制数,分别代表Result
变量的三个字节的内容。
section .data
Result db 0,0,0
Count:
;在ascii表中,小写字母>大写字母>数字
mov al, byte [rsi]
cmp al, '$'
je end
;判断是不是小写字母
cmp al,'z'
jg other
cmp al, 'a'
jl up
mov ah, byte [Result + 1]
inc ah
mov byte [Result + 1],ah
jmp loopEnd
up:
;判断是不是大写字母
cmp al,'Z'
jg other
cmp al,'A'
jl dig
mov ah, byte [Result + 1]
inc ah
mov byte [Result + 1],ah
jmp loopEnd
dig:
;判断是不是数字
cmp al,'9'
jg other
cmp al,'0'
jl other
mov ah, byte [Result ]
inc ah
mov byte [Result],ah
jmp loopEnd
other:
;否则是其他符号
mov ah, byte [Result + 2]
inc ah
mov byte [Result + 2],ah
loopEnd:
inc rsi
jmp Count
end:
ret