LDS/LES/LFS/LGS/LSS: Fix segment wraparounds in 16-bit address mode.
This commit is contained in:
@@ -1054,6 +1054,13 @@ MEM_LOAD_ADDR_EA_W_OFFSET(x86seg *seg, int offset)
|
||||
addbyte(0x83); /*ADD EAX, offset*/
|
||||
addbyte(0xc0);
|
||||
addbyte(offset);
|
||||
if (!(op_32 & 0x200)) {
|
||||
addbyte(0x25) /* AND EAX, ffffh */
|
||||
addbyte(0xff);
|
||||
addbyte(0xff);
|
||||
addbyte(0x00);
|
||||
addbyte(0x00);
|
||||
}
|
||||
MEM_LOAD_ADDR_EA_W(seg);
|
||||
}
|
||||
static __inline void
|
||||
|
||||
@@ -802,6 +802,13 @@ MEM_LOAD_ADDR_EA_W_OFFSET(x86seg *seg, int offset)
|
||||
addbyte(0x83); /*ADD EAX, offset*/
|
||||
addbyte(0xc0);
|
||||
addbyte(offset);
|
||||
if (!(op_32 & 0x200)) {
|
||||
addbyte(0x25) /* AND EAX, ffffh */
|
||||
addbyte(0xff);
|
||||
addbyte(0xff);
|
||||
addbyte(0x00);
|
||||
addbyte(0x00);
|
||||
}
|
||||
addbyte(0xe8); /*CALL mem_load_addr_ea_w*/
|
||||
addlong(mem_load_addr_ea_w - (uint32_t) (&codeblock[block_current].data[block_pos + 4]));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user