我有一个我正在研究的程序。尝试在Visual Studio 2010中使用MASM在程序集中进行选择排序,我遇到了问题。每当我改变条件以从降序排序到升序时,程序给出错误的答案。我正在尝试纠正这个我有代码,但我也有我想要转换的另一种语言的选择排序代码。该语言是网站上的C ++。我想知道如何使用min作为汇编中数组的索引来翻译语句。我等了两天。我需要帮助的人。我还在研究算法。这是代码:
.386
.model flat,stdcall
.stack 100h
printf proto c arg1:ptr byte, printlist:vararg
.data
printmessage db "Selection Sort",0
fmtmsg1 db "%d",0
fmtmsg2 db 0dh,0ah,0
array dword 9,4,6,8,1,0
arraylength dword 5
temp dword ?
min dword ?
.code
public main
main proc
;invoke printf,addr fmtmsg1,addr printmessage
;invoke printf,addr fmtmsg2
mov esi,offset array
mov ecx,0 ; outerloop
mov edx,0 ; innerloop
mov edx,ecx ; innerloop for loop condition variables
innerloop:
mov ebx,5
sub ebx,1 ; outerloop for loop condition variables
add edx,1 ; innerloop for loop condition variables
cmp edx,5
jge outerloop
mov eax,[esi] ;9 9,4,6,8,1,0
cmp eax,[esi + 4] ;4
Jge noexchange
mov min,edx
cmp min,ecx
je noexchange
;exchange values
xchg eax,[esi + 4]
mov [esi],eax
noexchange:
add esi,4
jmp innerloop
outerloop:
mov esi,offset array
mov edx,0 ; reset innerloop counter
inc ecx
cmp ecx,ebx
jne innerloop
mov esi,offset array
loop3:
mov eax,[esi]
push edx
invoke printf,addr fmtmsg1,eax
pop edx
add esi,4
inc edx
cmp edx,5
jne loop3
ret
main endp
end main
C ++代码我试图理解如何使用最小值作为MASM中数组的索引。
以下是我正在使用的代码:
void selectionSort(int arr[], int n) {
int i, j, minIndex, tmp;
for (i = 0; i < n - 1; i++)
{
minIndex = i;
for (j = i + 1; j < n; j++)
if (arr[j] < arr[minIndex])
minIndex = j;
if (minIndex != i)
{
tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
}
}
答案 0 :(得分:1)
我试过但我无法修复汇编代码,因此我将您的C ++算法直接转换为Visual Studio 2010 C ++控制台项目中的汇编。重要的是:
以下是代码:
foreach (string PortName in System.IO.Ports.SerialPort.GetPortNames())
{
PortBox.Items.Add(PortName);
}