按升序代码发行

时间:2013-01-24 11:34:19

标签: assembly x86

我的代码中有什么问题?如果你看下面的代码,我试图用简单的方法进行升序排序,但它无法运行。

我们在代码中使用了一个数组。它是一个预定义的数组,在每个数组的单元格中包含几个成员。所以我们试图对arr1进行排序。

datasg segment para 'data'
  arr1 db 8,2,7,4,3
datasg ends

codesg segment para 'code'   

main proc far
  Assume cs:codesg, ds:datasg
    mov ax, datasg
    mov ds, ax
    mov es, ax
    mov bx, OFFSET arr1
    mov cx, 5
    mov dx, cx
    L1:      
       mov si, 0
       mov ax, si
       inc ax
       mov di, ax
       mov dx, cx
    L2:
       mov al, [bx][si]
       cmp al, [bx][di]
       jg L4
    L3:
       inc si
       inc di
       dec dx
       cmp dx, 00
       je L1
       jg L2
    L4:
       mov al, [bx][si]
       mov ah, [bx][di]
       mov [bx][si], ah
       mov [bx][di], al
       inc si
       inc di       
       dec dx
       cmp dx, 00
       je L1
       jg L2
    Exit:
       mov ax, 4c00h
       int 21h
main endp
codesg ends
End main

我正在使用的环境是emu8086。

修改1:

似乎只是经常在L1L2L3之间跳跃,有点无限循环。实际上,运行时没有错误。如果代码没有问题, 我怎么能打印排序数组(最后)到用户导出?

0 个答案:

没有答案