From 099ed980c4e137fe37a5150668561175aab87c0d Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Wed, 18 Oct 2017 02:13:34 -0700 Subject: 4083 subx: 'pop' --- html/subx/012indirect_addressing.cc.html | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'html/subx/012indirect_addressing.cc.html') diff --git a/html/subx/012indirect_addressing.cc.html b/html/subx/012indirect_addressing.cc.html index 2643bcaf..35dd62ab 100644 --- a/html/subx/012indirect_addressing.cc.html +++ b/html/subx/012indirect_addressing.cc.html @@ -429,6 +429,36 @@ if ('onhashchange' in window) { 364 break; 365 } 366 +367 //:: pop +368 +369 :(scenario pop_mem_at_r32) +370 % Reg[0].i = 0x60; +371 % Reg[ESP].u = 0x10; +372 % SET_WORD_IN_MEM(0x10, 0x00000030); +373 # op ModRM SIB displacement immediate +374 8f 00 # pop stack into *EAX (reg 0) +375 +run: pop into effective address +376 +run: effective address is mem at address 0x60 (reg 0) +377 +run: storing 0x00000030 +378 +run: ESP is now 0x00000014 +379 +380 :(before "End Single-Byte Opcodes") +381 case 0x8f: { // pop stack into r/m32 +382 uint8_t modrm = next(); +383 uint8_t subop = (modrm>>3)&0x7; +384 switch (subop) { +385 ¦ case 0: { +386 ¦ ¦ trace(2, "run") << "pop into effective address" << end(); +387 ¦ ¦ int32_t* dest = effective_address(modrm); +388 ¦ ¦ *dest = *reinterpret_cast<uint32_t*>(&Mem.at(Reg[ESP].u)); +389 ¦ ¦ trace(2, "run") << "storing 0x" << HEXWORD << *dest << end(); +390 ¦ ¦ Reg[ESP].u += 4; +391 ¦ ¦ trace(2, "run") << "ESP is now 0x" << HEXWORD << Reg[ESP].u << end(); +392 ¦ ¦ break; +393 ¦ } +394 } +395 break; +396 } -- cgit 1.4.1-2-gfad0