I hope this helps you . If you're disassembling .o object files that haven't been linked yet, the call address will just be a placeholder to be filled in by the linker. You can use objdump -drwc -Mintel to show the relocation types + symbol names from a .o (The -r option is the key. Or -R for an already-linked shared library.)
fixed the issue. Will look into that further MASM infers the byte ptr [esi] operand-size based on the size of AL, and does an 8-bit load from the memory pointed to by the 32-bit pointer. The square brackets are a dereference for registers. You could zero-extend those 8 bits to fill EAX with movzx eax, byte ptr [esi]. (Then you wouldn't need to zero eax earlier).
How is data, address and Instruction differentiated in Processor/Register/memory?