2014-03-01 4 views
1

8 비트 BYTE 배열에서 10 진 정수를 가져 오는 방법을 고민하고 어떻게 든 루프 내에서 32 비트 DWORD 배열로 옮길 수 있습니다. 나는 그것이 OFFSET과 Movezx로 무언가를해야한다는 것을 알고 있지만 이해하기는 조금 혼란 스럽다. 초보자가 이해할 수있는 유용한 정보가 있습니까? 편집 : 예를 들어 :8 비트 정수 배열을 32 비트 배열 어셈블리로 옮깁니다.

Array1 Byte 2, 4, 6, 8, 10 
    .code 
    mov esi, OFFSET Array1 
    mov ecx, 5 
    L1: 
    mov al, [esi] 
    movzx eax, al 
    inc esi 
    Loop L1 

이 올바른 접근 방식인가? 아니면 완전히 잘못하고있는 것입니까? 어셈블리 x86입니다. (Visual Studio 사용)

+0

그 다음 당신은 더 나은 타겟팅하는 것을 아키텍처 지정 것, 조립 질문하는 경우 :

어쨌든, 여기가 (FASM 구문)입니다. x86, x64, ARM (6/11) 등 ... –

+0

웁스! 고마워요, 어떤 건축술을 말하기 위하여 그것을 편집했습니다. – Biowin92

+0

귀하의 질문에 더 많은 세부 사항이 부족합니다 : "정수"의 크기는 무엇입니까? 첫 번째 배열의 각 바이트는 두 번째 배열의 두 단어와 어떤 관련이 있습니까? – m0skit0

답변

1

코드가 거의 맞습니다. 바이트 배열에서 값을 가져와 dword로 변환 할 수있었습니다. 이제 dword 배열에 넣기 만하면됩니다 (프로그램에서도 정의되지 않았습니다).

; data definitions 
Array1 db 2, 4, 6, 8, 10 
Array2 rd 5    ; reserve 5 dwords for the second array. 

; the code 
    mov esi, Array1 
    mov edi, Array2 
    mov ecx, 5 

copy_loop: 
    movzx eax, byte [esi] ; this instruction assumes the numbers are unsigned. 
          ; if the byte array contains signed numbers use 
          ; "movsx" 

    mov [edi], eax  ; store to the dword array 

    inc esi 
    add edi, 4  ; <-- notice, the next cell is 4 bytes ahead! 

    loop copy_loop ; the human-friendly labels will not affect the 
        ; speed of the program. 
관련 문제