【发布时间】:2016-12-09 18:33:18
【问题描述】:
所以,这里的第二个问题(这个问题很模糊),我被赋予的任务之一是创建一个检查回文的东西,然后如果是则显示是,如果不是则显示否。我的问题是,你将如何尝试实现它?我能想到让它工作的唯一方法是遍历字符串,计算字符,总数的一半以便找到单词的中间,然后递增 1 递减 1,然后比较两个字符看看它们是否相同(然后递减 2,3,依此类推,直到到达字符串的末尾。)。我曾尝试实施但不知道如何实施。
因此,如果任何人都可以给我任何很棒的指示,我将留下一个链接,指向我正在使用的 8 位模拟器以及我目前拥有的(这只是代码打印是/否 ATM。)
代码:
JMP begin
input: DB "PALINDROMEEMORDNILAP"
DB 0
begin:
MOV C, input ;Points to var input
MOV D, 232 ;Points to output
CALL check ;Skips to check
HLT
check:
;This is where my method of checking whether it is or isn't a
;palindrome would go
.NO:
MOV C, NO ; Points to var NO
MOV A, [C] ; Gets first char
MOV [D], A ; Write to output
INC D
JMP .NO2
.NO2:
MOV C, NO
INC C ; Increments the char that it is pointing to in var NO
MOV A, [C] ; Gets second char
MOV [D], A ; Write to output
RET ; Terminates
.YES:
MOV C, YES ;Points to var YES
MOV A, [C] ; Gets first char
MOV [D], A ; Puts 1st letter in output
INC D ; Increments D so it doesn't overwrite
JMP .YES2
.YES2:
MOV C, YES
INC C ; Increments the char that it is pointing to in var YES
MOV A, [C] ; Gets second char
MOV [D], A ; Puts 2nd letter in output
INC D
JMP .YES3
.YES3:
MOV C, YES
INC C ;Increments the char that it is pointing to in var YES
INC C
MOV A, [C] ; Gets third char
MOV [D], A ; Puts 3rd letter in output
RET ; Terminates
YES: DB "YES" ; Var for yes
NO: DB "NO" ; Var for no
模拟器链接:http://schweigi.github.io/assembler-simulator/
任何帮助/指针/建议都会很棒。
提前致谢!
【问题讨论】:
-
从优化您的打印程序开始——它们太“天真”了 尝试使用循环并编写一个通用程序来打印单词。当您实现它时,您将更容易编写回文程序。
-
只需做人类所做的事情:检查第一个字符与最后一个字符,第二个字符与倒数第二个字符,依此类推。直到您没有更多的字符要检查,或者您正在检查一个字符本身。换句话说:str[0] == str[len-1-0], str[1] == str[len-1-1], str[2] == str[len-1-2],。 ..你看到模式了吗?