2014-10-19 3 views
3

바이트 배열을 써야하지만 그다지 얻지 못합니다. [matrix + 0][matrix + 1] (EAX는 0301070F과 같아야합니다.) 무엇을 잘못하고 있습니까? Assembly에 바이트 배열을 올바르게 쓰는 방법은 무엇입니까?

내 코드입니다 :

%include "asm_io.inc" 
segment .data 
    matrix times 4 db 0 

segment .bss 

segment .text 

    global asm_main 

asm_main: 
    enter 0,0 
    pusha 
    mov eax, 0 

    mov dword [matrix + 3], 15 
    mov dword [matrix], 3 
    mov dword [matrix + 1], 1 
    mov dword [matrix + 2], 7 

    mov ah, [matrix] 
    mov al, [matrix + 1] 
    rol eax, 16 
    mov ah, [matrix + 2] 
    mov al, [matrix + 3] 

    dump_regs 1 

    popa 
    mov eax, 0 
    leave 
    ret 

이것은 dump_regs 1의 출력 : 편집

int main() { 
    int ret_status; 
    ret_status = asm_main(); 
    return ret_status; 
} 

:

Register Dump # 1 
EAX = 03010000 EBX = B774FFF4 ECX = BFF7C924 EDX = BFF7C8B4 
ESI = 00000000 EDI = 00000000 EBP = BFF7C868 ESP = BFF7C848 
EIP = 080484D8 FLAGS = 0282  SF 

호출자는 간단한 C 프로그램입니다 I 이 코드를 실행하면 잘못된 것을 발견했습니다. 모두

mov dword [matrix], 3 
    mov dword [matrix + 1], 1 
    mov dword [matrix + 2], 7 
    mov dword [matrix + 3], 15 

을하지만 난 이것을 실행하면 작동하지 않습니다 : 노력

mov dword [matrix + 3], 15 
    mov dword [matrix], 3 
    mov dword [matrix + 1], 1 
    mov dword [matrix + 2], 7 

이유는 무엇입니까?

+0

왜 '매트릭스'는 1 바이트입니까? '매트릭스 '의 주소를 넘어서서 데이터 세그먼트에서 무엇을 처리 할 계획입니까? 왜'matrix times 8 db 0'이 아니겠습니까? –

+0

Mmm이고'matrix times 8 db 0'은 무엇입니까? –

+0

'matrix db 00000000'과 동일합니다.'times n' 길이의 레이블을 만드는 편리한 방법입니다. –

답변

3

그것은 시간이 좀 지났지 만

mov dword [matrix], 3 

오히려 일정 3는 32 비트 값으로 처리되어

mov byte [matrix], 3 

같은 것을 방지하기 위해 안?

+0

정말 고마워요! –

관련 문제