diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-08 21:07:56 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-08 21:07:56 +0100 |
| commit | 13214318124084f52103077a5560ac397cdce2a8 (patch) | |
| tree | 3716a76011f4f53bab3a8caf62d6b74e5ceeb39f /src | |
| parent | d93a243738e98a58a97d6be7959f171e8b23f155 (diff) | |
| download | box64-13214318124084f52103077a5560ac397cdce2a8.tar.gz box64-13214318124084f52103077a5560ac397cdce2a8.zip | |
Added (F2/F3) AE (REPNZ/REPZ) SCASB opcode
Diffstat (limited to 'src')
| -rwxr-xr-x | src/emu/x64run.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c index c95a7fbb..9d6312d1 100755 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -482,6 +482,40 @@ x64emurun: if(rep) R_RCX = tmp64u; break; + + case 0xAE: /* (REPZ/REPNE) SCASB */ + tmp8s = ACCESS_FLAG(F_DF)?-1:+1; + switch(rep) { + case 1: + tmp64u = R_RCX; + while(tmp64u) { + --tmp64u; + tmp8u = *(uint8_t*)R_RDI; + R_RDI += tmp8s; + if(R_AL==tmp8u) + break; + } + if(tmp64u) cmp8(emu, R_AL, tmp8u); + R_RCX = tmp64u; + break; + case 2: + tmp64u = R_RCX; + while(tmp64u) { + --tmp64u; + tmp8u = *(uint8_t*)R_RDI; + R_EDI += tmp8s; + if(R_AL!=tmp8u) + break; + } + if(tmp64u) cmp8(emu, R_AL, tmp8u); + R_RCX = tmp64u; + break; + default: + cmp8(emu, R_AL, *(uint8_t*)R_RDI); + R_EDI += tmp8s; + } + break; + case 0xB0: /* MOV AL,Ib */ case 0xB1: /* MOV CL,Ib */ |