| public x86ident |
| public __savident |
| extrn foobar : proc |
| extrn foobar2 : abs |
| extrn foobar3 : qword |
| extrn foobar4 : byte |
| |
| _DATA SEGMENT |
| __savident dd 0 |
| savidentptr dd __savident |
| savidentptr2 dq __savident |
| x86identptr dd x86ident |
| x86identptr2 dq x86ident |
| foobarptr dd foobar |
| foobarptr2 dq foobar |
| foobar2ptr dd foobar2 |
| foobar2ptr2 dq foobar2 |
| foobar3ptr dd foobar3 |
| foobar3ptr2 dq foobar3 |
| xptr dd x |
| xptr2 dq x |
| ;dataptr dd offset _DATA |
| ;dataptr2 dq offset _DATA |
| ;codeptr dd offset _TEXT |
| ;codeptr2 dq offset _TEXT |
| |
| _DATA ENDS |
| _BSS SEGMENT |
| x dq ? |
| y dq ? |
| |
| _BSS ENDS |
| _TEXT SEGMENT |
| x86ident: |
| ; extern with :proc |
| mov ebx,[foobar] |
| mov rcx,offset foobar |
| lea rdx, foobar |
| mov rax, qword ptr foobar[rcx] |
| mov rax, foobar |
| mov rbx, foobar |
| movzx rax, byte ptr foobar |
| movzx rax, byte ptr foobar[rax] |
| |
| ; local proc |
| mov ebx,[trap] |
| mov rcx,offset trap |
| ; See note in YASM file |
| lea rdx, trap |
| mov rax, qword ptr trap[rcx] |
| mov rax, trap |
| mov rbx, trap |
| ; See note in YASM file |
| movzx rax, byte ptr trap |
| movzx rax, byte ptr trap[rax] |
| |
| ; with :abs |
| ;mov ebx,[foobar2] |
| ;mov rcx,offset foobar2 |
| ;lea rdx, foobar2 |
| ;mov rax, qword ptr foobar2[rcx] |
| ;mov rax, foobar2 |
| ;mov rbx, foobar2 |
| ;movzx rax, byte ptr foobar2 |
| ;movzx rax, byte ptr foobar2[rax] |
| |
| ; with :qword |
| mov ebx, offset foobar3 |
| mov ebx, dword ptr [foobar3] |
| mov rcx,offset foobar3 |
| lea rdx, foobar3 |
| mov rax, qword ptr foobar3[rcx] |
| mov rax, foobar3 |
| mov rbx, foobar3 |
| movzx rax, byte ptr foobar3 |
| movzx rax, byte ptr foobar3[rax] |
| |
| ; local var (dword) |
| mov ebx, offset __savident |
| mov ebx,[__savident] |
| mov rcx,offset __savident |
| lea rdx, __savident |
| mov rax, qword ptr __savident[rcx] |
| mov rax, qword ptr __savident |
| mov rbx, qword ptr __savident |
| movzx rax, byte ptr __savident |
| movzx rax, byte ptr __savident[rax] |
| |
| ; local var (qword) |
| mov ebx, offset savidentptr2 |
| mov ebx, dword ptr [savidentptr2] |
| mov rcx,offset savidentptr2 |
| lea rdx, savidentptr2 |
| mov rax, savidentptr2[rcx] |
| mov rax, savidentptr2 |
| mov rbx, savidentptr2 |
| movzx rax, byte ptr savidentptr2 |
| movzx rax, byte ptr savidentptr2[rax] |
| |
| ; bss local var (qword) |
| mov ebx, offset y |
| mov ebx, dword ptr [y] |
| mov rcx,offset y |
| lea rdx, y |
| mov rax, y[rcx] |
| mov rax, y |
| mov rbx, y |
| movzx rax, byte ptr y |
| movzx rax, byte ptr y[rax] |
| |
| call foobar |
| |
| call trap |
| |
| ret |
| |
| trap proc public frame |
| sub rsp, 256 |
| .allocstack 256 |
| .endprolog |
| int 3 |
| add rsp, 256 |
| trap endp |
| |
| _TEXT ENDS |
| |
| _FOO SEGMENT |
| foo_foobar3ptr dd foobar3 |
| foo_foobar3ptr2 dq foobar3 |
| mov ebx, dword ptr [foobar3] |
| mov rcx,offset foobar3 |
| lea rdx, foobar3 |
| mov rax, qword ptr foobar3[rcx] |
| mov rax, foobar3 |
| mov rbx, foobar3 |
| movzx rax, byte ptr foobar3 |
| movzx rax, byte ptr foobar3[rax] |
| _FOO ENDS |
| END |