所以这些是我的代码的目标: 本作业的目的是让您体验使用循环、数组以及创建和使用您自己的过程的经验。您需要创建一个程序,允许用户输入一个字符串并在该字符串中搜索用户指定的字符。程序将返回该字符在字符串中出现的次数,该字符的第一次出现和最后一次出现。
要求: 允许用户输入要在搜索中使用的字符。 您必须创建一个搜索过程,该过程接收对用户输入的字符串的引用(指针)、字符串的大小以及要在搜索中使用的字符。此过程无法获得用户的输入或将输出显示到屏幕。它必须简单地查看字符串,找到必要的信息,并使用寄存器返回输出(出现次数、第一次出现和最后一次出现)。 您必须使用变量来存储所有用户输入和值。 您必须在代码中使用注释和良好的编程习惯(适当的间距、适当的代码缩进和良好的命名)。
示例程序:
输入字符串:CSC203 RCSJ 输入要在搜索中使用的字符:C
执行搜索... 搜索完成。
搜索结果: 字符“C”在字符串中出现了 3 次。 第一次出现:1 最后一次出现:9
我的代码是这样的: 包括 Irvine32.inc
.数据 输入字符串 BYTE 100 DUP(0) ;为用户的输入字符串定义一个缓冲区 搜索字符字节? ;定义一个变量来存储要搜索的字符 ;strLength DWORD ? ;定义一个变量来存储字符串的长度 计数 DWORD 0 ;定义一个变量来存储出现次数 第一个索引 DWORD 0 ;定义一个变量来存储第一个的索引 最后索引 DWORD 0 ;定义一个变量来存储最后一次出现的索引 promptString BYTE "请输入字符串:",0 promptChar BYTE "输入要在搜索中使用的字符:",0 searchStart BYTE "执行搜索...",0 searchEnd BYTE "搜索完成。",0 resultsTitle BYTE "搜索结果:",0 foundCountString BYTE “在字符串中找到字符 '%c' %d 次。”,0dh, 0ah, 0 firstOccurString BYTE "第一次出现:%d",0 lastOccurString BYTE "最后一次出现:%d",0
.代码 主进程 ;提示用户输入字符串 mov edx, OFFSET 提示字符串 调用 WriteString mov edx, OFFSET 输入字符串 mov ecx, SIZEOF inputString 调用 ReadString
; prompt the user for search character
mov edx, OFFSET promptChar
call WriteString
call ReadString
call Crlf
mov searchChar, al
call Crlf
; perform the search
mov edx, OFFSET searchStart
call WriteString
mov count, 0 ; initialize count to 0
call SearchForChar
call Crlf
call Crlf
mov edx, OFFSET searchEnd
call WriteString
call Crlf
call Crlf
; display the results
mov edx, OFFSET resultsTitle
call WriteString
call Crlf
mov eax, 计数 movzx ecx, 搜索字符 mov edx,OFFSET foundCountString 调用 WriteString 打电话给Crlf 调用 WriteChar ;添加此行以打印 searchChar 值 调用 WriteDec ;添加此行以打印计数值
mov edx, OFFSET firstOccurString 调用 WriteString mov eax, firstIndex 调用 WriteDec 打电话给Crlf
mov edx, OFFSET lastOccurString 调用 WriteString mov eax, lastIndex 调用 WriteDec 打电话给Crlf
exit
主要结束
SearchForChar 过程 ;初始化变量 移动 ecx, edx mov esi, OFFSET 输入字符串 movzx ebx, 搜索字符 移动计数,0 移动第一个索引,-1 mov lastIndex,-1
; loop through the string
mov edi, 0
searchLoop:
cmp BYTE PTR [esi+edi], 0 ; check for end of string
je endSearchLoop
cmp BYTE PTR [esi+edi], bl ; compare current character with
jne nextChar
add count, 1 ; increment count
cmp firstIndex, -1 ; check if first occurrence has been found
jne nextChar
mov firstIndex, edi ; set first occurrence
nextChar:
mov lastIndex, edi ; update last occurrence
inc edi ; move to next character
jmp searchLoop
endSearchLoop:
; return the results in registers
mov eax, count
mov ebx, firstIndex
mov ecx, lastIndex
ret
SearchForChar 结束 结束主要 其结果是在调试屏幕上显示: 输入字符串:泰迪 输入要在搜索中使用的字符:d
执行搜索...
搜索完成。
搜索结果: 字符“%c”在字符串中出现 %d 次。
0第一次出现:%d4294967295 最后一次出现:%d4
我需要帮助来格式化代码并将“%c”和 %d 替换为正确的值。所以它会说“字符‘d’在字符串中被找到了 2 次。”