【发布时间】:2017-10-21 21:22:29
【问题描述】:
我有一个简单的 64 位汇编程序,我们正在上课。它应该接受用户输入(字符串)并将带有小写字母的字符串返回为大写字母,将大写字母返回为小写字母。
根据我所拥有的,它会读取任何内容,直到找到一个空格,之后就不会再读取了。因此,如果我输入“test”,它将输出“TEST”。如果我输入“test Test”,它将输出“TEST”。但是,如果我在第一个单词之前添加空格,它将输出第一个单词但会删除空格。例如:输入“TestT”,输出:“tESt”。 任何人都知道我该如何解决这个问题? 这是我的整个程序:
;Author: Keenan Kaufman
;Date: 10/20/2017
INCLUDELIB msvcrt.lib
printf PROTO
scanf PROTO
exit PROTO
.DATA
CRLF BYTE 0Dh, 0Ah, 0 ;carriage return
msgHeader BYTE "Enter a mixed case string: ", 0
message BYTE 20 DUP(0), 0
target BYTE SIZEOF message DUP(?), 0Dh, 0Ah, 0
msgformat BYTE "%20s", 0
.CODE
main PROC
;Display request for user input
lea rcx, msgHeader
call printf
;obtain user input
lea rcx, msgformat
lea rdx, message
call scanf
lea rsi, message
lea rdi, target
jmp GETNEXT
GETNEXT:
mov al, [rsi]
cmp al, 0
je ENDCASE
cmp al, 'z'
ja NOCHANGE
cmp al, 'A'
jb NOCHANGE
cmp al, 'a'
jae TOUPPER
cmp al, 'Z'
jbe TOLOWER
TOUPPER:
sub al, 32
mov [rdi], al
inc rdi
inc rsi
jmp GETNEXT
TOLOWER:
add al, 32
mov [rdi], al
inc rdi
inc rsi
jmp GETNEXT
NOCHANGE:
mov [rdi], al
inc rdi
inc rsi
jmp GETNEXT
ENDCASE:
jmp FINISH
FINISH:
;Display target
lea rcx, target
call printf
lea rcx, CRLF
call printf
mov rax, 0
call exit
main ENDP
END
【问题讨论】: