Why can't you call a pointer address from the EBP register? What I mean by this is demonstrated in the follow code pattern.
- OpCode: '0xFF 0x10' -> CALL DWORD PTR DS:[EAX]
- OpCode: '0xFF 0x11' -> CALL DWORD PTR DS:[ECX]
- OpCode: '0xFF 0x12' -> CALL DWORD PTR DS:[EDX]
- OpCode: '0xFF 0x13' -> CALL DWORD PTR DS:[EBX]
- OpCode: '0xFF 0x14' -> CALL DWORD PTR SS:[ESP+EDI]
- OpCode: '0xFF 0x15 0x012345678' -> CALL DWORD PTR DS:[0x012345678]
- OpCode: '0xFF 0x16' -> CALL DWORD PTR DS:[ESI]
- OpCode: '0xFF 0x16' -> CALL DWORD PTR DS:[EDI]
'5' is noted in "Intel Instruct manual" but '6' is never directly referred to and it is never explicitly stated that you cannot call it from the EBP register. I know this isn't a useless feature but I was wondering why Intel choose those two registers to utilize, was it just a design choice or is their something I am missing? (I have a guess but I'm curious what the real reason is.)