gpt4 book ai didi

将三个数字中的最小到最大排序

转载 作者:行者123 更新时间:2023-12-04 05:08:36 26 4
gpt4 key购买 nike

我目前正在学习汇编语言。我已经能够创建一个快速的简短函数来从最小到最大交换两个数字。我正在应用相同的基本基础来用三个数字来做到这一点,但每次我进行比较时,它都会进入一个无限循环。我通过使用 *60 来声明这个函数.如何从最小到最大正确排序三个数字?另外,有没有办法让相同的函数在不进行任何额外更改的情况下执行两个和三个数字的排序?

几个汇编程序在语法上略有变化。 HERE是我目前正在使用的教育集会 Little Man 计算机模拟器的链接。

两个数字的工作交换:

INP     //Input x number
STO 99 //Store x number
INP //Input y number
STO 98 //Store y number
BR 60 //Jump to function *60
HLT //End run
*60 //Number SWAP function
LDA 99 //Load x
STO 87 //Move x to mailbox 87
LDA 98 //Load y
STO 86 //Move y to mailbox 86
SUB 87 //Subtract y - x
BRP 71 //Branch to line 71 if result is positive
LDA 86 //SUB 87 gives a negative result- then y is smallest number. Load y
OUT //Display y
LDA 87 //Load x- the greater number.
OUT //Display x
HLT //End here since y > x
LDA 87 //BRP 71 branches here- then x is smallest number
OUT //Display x
LDA 86 //y is the greater number
OUT * //display y

最佳答案

这是一个冒泡排序,https://en.wikipedia.org/wiki/Bubble_sort因为它使用了 3 次交换代码。

没学过小人,是基于https://en.wikipedia.org/wiki/Little_man_computer ,这应该有效。我没有看到任何关于分支到特定行号的内容,但看起来 - 基于您的第一个工作示例 - 您已经完成了,并希望可以适本地翻译标签。 (手指交叉)

维基百科条目有多个伪代码副本,但我想从维基百科条目的第一个“优化冒泡排序”伪代码中展开循环,因为我在 Little Man 中没有看到任何关于使用索引访问内存位置的内容,就像你需要的对于数组。没有检查数组是否有序。

Load the three values into registers r91-r93

// loop 1 step 1
if r92-r91>0 then
do nothing
else // swap them, using a temp register
temp=r92
r92=r91
r91=temp
end if
// loop 1 step 2
if r93-r92>0 then
do nothing
else // swap them, using a temp register
temp=r93
r93=r92
r92=temp
end if
// loop 2 step 1
if r92-r91>0 then
do nothing
else // swap them, using a temp register
temp=r92
r92=r91
r91=temp
end if

Write out the registers in order: r91, r92, r93

根据维基百科文章,这是我对 Little Man 的最佳近似中的相同代码。您可能需要修复标签。
         INP        // Read in the first value
STA 91 // store it
INP // Read in the second value
STA 92 // store it
INP // Read in the third value
STA 93 // store it
LDA 92 // LOOP 1, STEP 1:
SUB 91 //
BRP STEP2 // if r91 and r92 are in order, don't swap them
LDA 92 // Begin swapping registers
STA 99 // temp = r92
LDA 91
STA 92 // r92 = r91
LDA 99
STA 91 // r91 = temp
STEP2 LDA 93 // LOOP 1, STEP 2
SUB 92
BRP STEP3 // If r92 and r93 are in order, don't swap them
LDA 93 // Begin swapping registers
STA 99 // temp = r93
LDA 92
STA 93 // r93 = r92
LDA 99
STA 92 // r92 = temp
STEP3 LDA 92 // LOOP 2, STEP 1
SUB 91
BRP STEP4 // if r91 and r92 are in order, don't swap them
LDA 92 // Begin swapping registers
STA 99 // temp = r92
LDA 91
STA 92 // r92 = r91
LDA 99
STO 91 // r91 = temp
STEP4 LDA 91 // Write out the sorted values
OUT
LDA 92
OUT
LDA 93
OUT
HLT // stop

关于将三个数字中的最小到最大排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15183630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com