Microsoft Assembly Language Irvine Library 搜索程序,我的代码有什么问题吗?

问题描述 投票:0回答:0

所以这些是我的代码的目标: 本作业的目的是让您体验使用循环、数组以及创建和使用您自己的过程的经验。您需要创建一个程序,允许用户输入一个字符串并在该字符串中搜索用户指定的字符。程序将返回该字符在字符串中出现的次数,该字符的第一次出现和最后一次出现。

要求: 允许用户输入要在搜索中使用的字符。 您必须创建一个搜索过程,该过程接收对用户输入的字符串的引用(指针)、字符串的大小以及要在搜索中使用的字符。此过程无法获得用户的输入或将输出显示到屏幕。它必须简单地查看字符串,找到必要的信息,并使用寄存器返回输出(出现次数、第一次出现和最后一次出现)。 您必须使用变量来存储所有用户输入和值。 您必须在代码中使用注释和良好的编程习惯(适当的间距、适当的代码缩进和良好的命名)。

示例程序:

输入字符串: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 次。”

assembly masm irvine32
© www.soinside.com 2019 - 2024. All rights reserved.