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