汇编-指针
一个变量如果包含的是另一个变量的地址, 则该变量就称为指针(pointer) 。指针是操作数组和数据结构的极好工具,因为它包含的地址在运行时是可以修改的。
.data
arrayB byte 10h, 20h, 30h, 40h
ptrB dword arrayB
ptrB1 dword OFFSET arrayB
arrayW WORD 1000h,2000h,3000h
ptrW DWORD arrayW
32位汇编时,指针都是32位的
TYPEDEF定义指针类型
.386
.model flat,stdcall
option casemap:none
.stack 4096
PBYTE TYPEDEF PTR BYTE ;PBYTE指向8位数据的指针类型
;这样的声明通常放在靠近程序开始的地方, 在数据段之前, 使得接下来就可以用PBYTE 来定义变量
PWORD TYPEDEF PTR WORD ;指向字的指针类型
PDWORD TYPEDEF PTR DWORD ;指向双字的指针类型
.data
arrayB BYTE 10h,20h,30h,40h
ptr6 PBYTE ? ;指针变量ptr6末初始化
ptr1 PBYTE arrayB ;指针变量ptr2指向arrayB数组
arrayW WORD 1, 2, 3
arrayD DWORD 4, 5, 6
ptr2 PWORD arrayW
ptr3 PDWORD arrayD
ExitProcess PROTO,dwExitCode:DWORD
.code
main PROC
mov esi, ptr1 ;把ptr1的值(arrayB的地址)给esi
mov al, [esi] ;al=10h
mov esi, ptr2
mov ax, [esi] ;ax=0001h
mov esi, ptr3
mov eax, [esi] ;eax=00000004
INVOKE ExitProcess,0
main ENDP
END main