【问题标题】:String Arrays in Assembly 8086汇编 8086 中的字符串数组
【发布时间】:2014-12-19 13:23:07
【问题描述】:

作为学校项目的一部分(主修计算机科学,我们在部分年级学习汇编语言,现在从 8086 开始)我必须使用我们“学到”的东西(我们的老师给了我们一个命令列表并告诉我们在他的帮助下自学直到月底。

所以我做了一个“游戏”,你是这个笑脸的人,你必须通过这个迷宫,星星作为障碍,让你回到起点,“>”作为下一个级别的标记。

关卡只是我打印到屏幕上的文本,每一步都将下一个输入与墙/星/'>' 的东西进行比较,然后如果是星,它会重置你的位置,如果是墙,你会留在你的地方,如果它是一个“>”的东西,那么它会打印下一个级别。除了下一个级别的下一部分,这一切都有效。

Here's the Pastebin, with my problem detailed and pointed out.

【问题讨论】:

    标签: arrays assembly x86-16


    【解决方案1】:

    这里:inc mazesIndex 你需要将 mazesIndex 增加迷宫大小 (49 * 10 + 1 = 491 bytes) 而不是 1

    【讨论】:

    • 那么添加一个 mazeSize 16 位变量然后执行add mazeIndex, mazeSize 会解决我的问题吗?另外,我将如何计算 mazeSize?我讨厌硬编码...
    • @ItamarReif,您不必对其进行硬编码。假设你的迷宫是固定类型的,你可以在第二个迷宫的开头加上label,然后计算maze1的起始地址和maze0的起始地址的差值。如果长度可能不同,则必须在运行时测量字符串长度
    • “常量类型”是什么意思?如果我理解正确,我会在迷宫数组的每个成员中的 (0;0) 处放置一个“#”符号,然后计算每个“#”之间的字符数量?我该怎么做?
    • 抱歉,我的意思是固定大小,当然。如果大小可能不同,则需要在运行时计算。另一种选择是建立一个查找表,其中将包含指向迷宫本身的指针。如果您更喜欢在运行时计算,那么您不需要添加任何特殊字符,因为您已经在每个迷宫的末尾有一个 - '$'。所以当你开始迷宫时,你可以扫描数组直到找到'$'并记住它的位置。然后,当您想切换到下一个迷宫时,将 mazeIndex 设置为先前记住的位置 + 1(以便跳过 '$' 字符本身)
    • whichMaze:mov si, mazesIndex mov bh, mazes[si] mov byte ptr indexChar, bh cmp bh, '$' je endOfMaze jne nextChar endOfMaze: inc $Count mov dx, mazeCount cmp $Count, dx je fin jne nextChar nextChar: inc mazesIndex loop whichMaze fin: inc mazesIndex mov $Count, 0h ret 类似的东西?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2013-01-08
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多