I'm going to dispute the basis of the question, to at least a minimal degree.
The original 8086 and 8088 both included prefetched instruction queues. If you modified an instruction that was already in the PIQ, your modification was not take into account--the instruction in the PIQ was still executed as it was originally fetched.
In fact, if you needed to determine whether code is executing an 8086 or 8088, the standard way to do so depended on the fact that the 8088 has only an 4-byte PIQ, while the 8086 has a 6-byte PIQ.
So, to distinguish between them, you'd typically use self-modifying code to change the target of a jmp 4 bytes ahead of the current location, so the offset of the jmp was in one (or both) of the two bytes that would be in an 8086 PIQ, but not in an 8088 PIQ.
So, the code looked vaguely like this (probably not working as it stands--last time I wrote code like this was probably at least 35 years ago).
mov ax, offset _88 - branch_offset
mov jump_offset+1, ax
nop ; enough nopsNOPs to fill all but the last slot in the 8088 PIQ
nop
nop
jump_offset:
; The tricky part: when the preceding `mov` executed, the offset of this
; jmp was in the 8086 PIQ, but not in an 80868088 PIQ
jmp _86 ; so on an 8088, the CPU will use the modified offset, and jump
; and jump to _88
xor ax, ax ; we should never get here
ret
_86:
mov ax, 8086
ret
_88:
mov ax, 8088
ret