【发布时间】:2017-05-02 10:28:11
【问题描述】:
我有一个简单的循环,它接受一个名称并打印该名称而不保存它。
looptext getc ;starts text get loop for name
;since name isn't re-used, we don't have to save it
add r1, r0, -10 ;Test for enter character
brz finishloop1 ;if enter, cancel the text loop
OUT ;If it's not enter, print out the character typed
br looptext ;Go back to loop
finishloop1
然后程序会要求输入由空格分隔的 ID 号。所有这些值都保存到一个数组中,每个循环都会检查新输入是“新”最低值还是“新”最高值,并将其设置到相应的寄存器中。
[出于版权原因删除代码]
在代码的最后,我需要添加一个排序算法,我只剩下一个字符数组。
我需要遍历数组的每个索引,并按照数字顺序(从小到大)重新排列字符。
【问题讨论】:
-
如果只允许从 1 到 9 的数字,则它们的 ASCII 值是从 48+1 到 48+9 的正确顺序。因此,如果您将字符而不是数字存储到数组中,您可以对字符进行排序,并且您将获得正确的顺序。然后您可以将它们输出为字符。保存 ASCII 字符串和数值之间的所有这些转换。这也适用于多位数字,只要两个数字具有相同的字符串长度。对于不同的字符串长度,当您将额外的前导零添加到较短的字符串时,词典比较将起作用。所以做一些 1 char 排序。
-
好的.. 是的,我们只允许 1 到 9。我可能会这样做。摆脱所有转换并将它们保留为字符。但是“数字”排序它们的组装算法是什么?如,从最小到最大?
-
有很多 sorting algorithms... 用汇编编写它们与任何其他编程语言都非常相似,只是需要更多的指令,因为您必须明确地编写从/到内存的所有数据传输进入 CPU 寄存器和
if块通常需要比较(看起来 LC3 正在使用加法,例如您对“输入”的测试是add r1, r0, -10,然后有条件地跳转“当零”为真),条件跳转和代码块根据检测到的条件执行/跳过。尝试想象值会发生什么 -
顺便说一句,汇编中的“按字符排序”意味着仍然对数字进行排序,因为
'1'是字节值 49.. 所以只需对数组中的字节值进行排序,您的值将在 49-57 范围内(并且这些值在用于某些 ASCII 输出时,将显示为字符“1”到“9”的字体字形)。所以在排序过程中你会说:“49 比 54 小吗?在是/否时做这个/那个。”而不是“1 小于 6”。 -
谢谢@Ped7g。通过您的链接,我设法找到了已经在汇编中编写了冒泡排序算法的人。
标签: algorithm sorting assembly lc3