因此,我们目前正在研究教授向我们展示的英特尔 8086 插入排序代码。他想让我们弄清楚为什么代码会从他从网上获取的代码中跳过数组中的第 0 个元素和数组中的第 3 个元素。
; void isort(int *a, int n)
; sorts the first n elements of a
;
; Parameters
; a - pointer to the array
; n - number of elements to sorts
%define a [ebp + 8]
%define n [ebp + 12]
isort:
enter 0, 0
pusha
mov ecx, 1
for:
mov ebx, ecx
imul ebx, 4
add ebx, a
mov ebx, [ebx]
mov edx, ecx
dec edx
while:
cmp edx, 0
jl while_quit
mov eax, edx
imul eax, 4
add eax, a
cmp ebx, [eax]
jge while_quit
mov esi, [eax]
mov dword [eax + 4], esi
dec edx
jmp while
while_quit:
mov [eax], ebx
inc ecx
cmp ecx, n
jl for
popa
leave
ret
样本数组为 {5, 8, 12, 2, 1, 7}。自从我们几天前刚开始以来,这更有助于理解 8086 语言,我想知道是否有人可以解释如何以及可能出了什么问题。