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
이유는 무엇입니까?
왜 '매트릭스'는 1 바이트입니까? '매트릭스 '의 주소를 넘어서서 데이터 세그먼트에서 무엇을 처리 할 계획입니까? 왜'matrix times 8 db 0'이 아니겠습니까? –
Mmm이고'matrix times 8 db 0'은 무엇입니까? –
'matrix db 00000000'과 동일합니다.'times n' 길이의 레이블을 만드는 편리한 방법입니다. –