微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将代码覆盖到x86 MASM中的过程中

如何解决将代码覆盖到x86 MASM中的过程中

我有一个x86 MASM汇编语言的程序,可以对数组进行排序。但是,我想将其转换为一个过程,以便能够将其用于多个阵列。您可以帮助我将这些代码转换为过程吗?而且,在该过程中,您能否告诉我如何将排序后的数组打印到黑屏上(这是我想要的功能,但由于我缺乏汇编语言的知识而无法实现)。

INCLUDE Irvine32.inc

    .data
    arrayD       dword          5,9,10,2,3
    .code
    main PROC
        mov ebx,5
    OuterLoop: ; sorting the array in descending order
        mov esi,offset arrayD
    
        mov ecx,ebx       
    InnerLoop:
        Lodsd
        mov edx,[esi]
        cmp eax,edx
        jl Skip
        mov [esi],eax
        mov [esi-4],edx 
    
    Skip:
        dec ecx
        jnz InnerLoop
        dec ebx
        jnz OuterLoop

解决方法

将程序看作是可调用的代码段( blackbox ),该文件具有记录的输入,输出和功能。确定您的过程应如何接受输入参数(调用约定),创建其文档,然后编写代码,并辅以RET指令(使其可调用)。如果代码中使用了PUSH和POP指令,请确保堆栈保持平衡。

BubbleSort: ; Procedure to sort an array of double-words.
; Input:  EDI is pointer to the unsorted array of DWORDs.
;         EBX is number of DWORDs in the input array.
; Output: The array is sorted in descending order.
;         EAX,EBX,ECX,EDX,ESI are clobbered.
 OuterLoop: ; sorting the array in descending order
        mov esi,edi
        mov ecx,ebx       
    InnerLoop:
        Lodsd
        mov edx,[esi]
        cmp eax,edx
        jl Skip
        mov [esi],eax  ; Swap neighbouring DWORDs.
        mov [esi-4],edx 
    Skip:
        dec ecx
        jnz InnerLoop
        dec ebx
        jnz OuterLoop
        RET 

您的程序的示例性调用:

mov edi,offset arrayD 
mov ebx,5
CALL BubleSort

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。