繁体   English   中英

反向汇编中数组的内容

[英]Reverse contents of array in assembly

我正在做一些组装作业,并为上一个程序感到困惑。 如果有x86汇编知识的人潜伏,请随时评论我可能是如何开始的。 谢谢!

问题

使用具有间接寻址或索引寻址的循环将原位整数数组的元素反转。 不要将元素复制到任何其他数组。 还可以使用SIZEOF,TYPE和LENGTHOF运算符来使程序灵活地适应不同的数组。

到目前为止的代码:

.data
array BYTE 10h,20h, 30h, 40h

.code
main PROC
    call Clrscr

        ;no clue... 

    exit
main ENDP

END main

我的汇编能力不是很好,因此可能会有更好的答案(此方法可行)。

TITLE Reversing an array without using oneother array
INCLUDE Irvine32.inc

.data
    array1 DWORD 10d,20d,30d,40d,50d,60d,70d,80d,90d
.code
main PROC
        mov ESI, OFFSET array1  ;ESI now points to the first item of array1
        mov EDI, SIZEOF array1
        add EDI, OFFSET array1
        sub EDI, TYPE array1    ;EDI now points to the last item of array1

        mov ECX, LENGTHOF array1
        shr ECX, 1          ;now ecx is half the length of the array1
L1:     mov EAX, [ESI]          ;in this loop we reverse the items of the array
        mov EBX, [EDI]
        mov [EDI],EAX
        mov [ESI],EBX
        add ESI, TYPE array1
        sub EDI, TYPE array1
        LOOP L1

        mov ECX, LENGTHOF array1;here we just print the array
        mov ESI, OFFSET array1
L2:     MOV EAX, [ESI]
        call WriteInt
        call Crlf
        add ESI, TYPE array1
        LOOP L2
        exit        
main ENDP
END main

好吧,将数组的开头指向esi,将结尾指向edi,加载两个..元素(?),交换它们,然后相应地更改esi和edi并重复直到....提示:您不必交换任何事情,因为您正在组装中= P

专业人士会使用特殊的字符串指令以及源和目标寄存器; 但这看起来像是您骗了作业。

以下是可用于实现目标的基本备忘录:

  • MOV目标来源

    MOV eax,数组将数组的地址加载到eax中

    MOV edx,[eax]将eax指向的值加载到edx中

  • INC eax将eax的值增加一

  • 或eax,eax(如果eax为零,则设置零标记)

  • JZ标签(如果设置了零标记,则跳转到标签)

通过添加冒号“:”来设置label:

INCLUDE Irvine32.inc
.data
arr1 word 1,3,4,6,7,8,9
.code
main PROC
mov esi,offset arr1
mov ax,offset arr1
mov ecx,lengthof arr1-1
l1:
mov ax,type arr1
loop l1

mov ecx,lengthof arr1
l2:
mov eax,[esi]
mov ebx,[ax]
xchg eax,ebx
mov esi,eax
mov ebx,ax

add esi,type arr1
sub ax,type arr1
dec ecx
loop l2


call dumpRegs
exit 
main ENDP
END main

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM