From 86351aafe218a7386f6578be3c4da3edcdcb0c98 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Fri, 12 Jun 2020 07:57:27 -0700 Subject: 6513 --- html/092stack.subx.html | 517 ++++++++++++++++++++++++------------------------ 1 file changed, 257 insertions(+), 260 deletions(-) (limited to 'html/092stack.subx.html') diff --git a/html/092stack.subx.html b/html/092stack.subx.html index 7fa5461a..69df5b8a 100644 --- a/html/092stack.subx.html +++ b/html/092stack.subx.html @@ -129,7 +129,7 @@ if ('onhashchange' in window) { 69 68/push 0/imm32 70 50/push-eax 71 # . . call - 72 e8/call check-ints-equal/disp32 + 72 e8/call check-ints-equal/disp32 73 # . . discard args 74 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp 75 # size should remain 8 @@ -140,7 +140,7 @@ if ('onhashchange' in window) { 80 68/push 8/imm32 81 50/push-eax 82 # . . call - 83 e8/call check-ints-equal/disp32 + 83 e8/call check-ints-equal/disp32 84 # . . discard args 85 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp 86 # first word is 0 @@ -151,7 +151,7 @@ if ('onhashchange' in window) { 91 68/push 0/imm32 92 50/push-eax 93 # . . call - 94 e8/call check-ints-equal/disp32 + 94 e8/call check-ints-equal/disp32 95 # . . discard args 96 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp 97 # second word is 0 @@ -162,7 +162,7 @@ if ('onhashchange' in window) { 102 68/push 0/imm32 103 50/push-eax 104 # . . call -105 e8/call check-ints-equal/disp32 +105 e8/call check-ints-equal/disp32 106 # . . discard args 107 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp 108 # . epilogue @@ -220,263 +220,260 @@ if ('onhashchange' in window) { 160 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp 161 # . syscall(exit, 1) 162 bb/copy-to-ebx 1/imm32 -163 b8/copy-to-eax 1/imm32/exit -164 cd/syscall 0x80/imm8 -165 # never gets here -166 -167 test-push: -168 # . prologue -169 55/push-ebp -170 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp -171 # var stack/ecx = empty stack of size 8 +163 e8/call syscall_exit/disp32 +164 # never gets here +165 +166 test-push: +167 # . prologue +168 55/push-ebp +169 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp +170 # var stack/ecx = empty stack of size 8 +171 68/push 0/imm32 172 68/push 0/imm32 -173 68/push 0/imm32 -174 68/push 8/imm32/size -175 68/push 0/imm32/top -176 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . . # copy esp to ecx -177 # push(stack, 0x42) -178 # . . push args -179 68/push 0x42/imm32 -180 51/push-ecx -181 # . . call -182 e8/call push/disp32 -183 # . . discard args -184 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -185 # check top -186 58/pop-to-eax -187 # . check-ints-equal(eax, 4, msg) -188 # . . push args -189 68/push "F - test-push: top"/imm32 -190 68/push 4/imm32 -191 50/push-eax -192 # . . call -193 e8/call check-ints-equal/disp32 -194 # . . discard args -195 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp -196 # check size -197 58/pop-to-eax -198 # . check-ints-equal(eax, 8, msg) -199 # . . push args -200 68/push "F - test-push: size"/imm32 -201 68/push 8/imm32 -202 50/push-eax -203 # . . call -204 e8/call check-ints-equal/disp32 -205 # . . discard args -206 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp -207 # first word is 0x42 -208 58/pop-to-eax -209 # . check-ints-equal(eax, 0x42, msg) -210 # . . push args -211 68/push "F - test-push: data[0..3]"/imm32 -212 68/push 0x42/imm32 -213 50/push-eax -214 # . . call -215 e8/call check-ints-equal/disp32 -216 # . . discard args -217 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp -218 # second word is 0 -219 58/pop-to-eax -220 # . check-ints-equal(eax, 0, msg) -221 # . . push args -222 68/push "F - test-push: data[4..7]"/imm32 -223 68/push 0/imm32 -224 50/push-eax -225 # . . call -226 e8/call check-ints-equal/disp32 -227 # . . discard args -228 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp -229 # . epilogue -230 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp -231 5d/pop-to-ebp -232 c3/return -233 -234 # TODO: make this generic -235 pop: # s: (addr stack) -> n/eax: int -236 # . prologue -237 55/push-ebp -238 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp -239 # . save registers -240 51/push-ecx -241 56/push-esi -242 # esi = s -243 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 . # copy *(ebp+8) to esi -244 # if (s->top <= 0) abort -245 81 7/subop/compare 0/mod/indirect 6/rm32/esi . . . . . 0/imm32 # compare *esi -246 7e/jump-if-<= $pop:abort/disp8 -247 # s->top -= 4 -248 81 5/subop/subtract 0/mod/direct 6/rm32/esi . . . . . 4/imm32 # subtract from *esi -249 # eax = s->data[s->top] -250 8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx -251 8b/copy 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 8/disp8 . # copy *(esi+ecx+8) to eax -252 # s->data[s->top] = 0 -253 c7 0/subop/copy 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 8/disp8 0/imm32 # copy to *(esi+ecx+8) -254 $pop:end: -255 # . restore registers -256 5e/pop-to-esi -257 59/pop-to-ecx -258 # . epilogue -259 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp -260 5d/pop-to-ebp -261 c3/return -262 -263 $pop:abort: -264 # print(stderr, "error: pop: nothing left in stack") -265 # . write-buffered(Stderr, "error: pop: nothing left in stack") -266 # . . push args -267 68/push "error: pop: nothing left in stack"/imm32 -268 68/push Stderr/imm32 -269 # . . call -270 e8/call write-buffered/disp32 -271 # . . discard args -272 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -273 # . flush(Stderr) -274 # . . push args -275 68/push Stderr/imm32 -276 # . . call -277 e8/call flush/disp32 -278 # . . discard args -279 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp -280 # . syscall(exit, 1) -281 bb/copy-to-ebx 1/imm32 -282 b8/copy-to-eax 1/imm32/exit -283 cd/syscall 0x80/imm8 -284 # never gets here -285 -286 test-pop: -287 # . prologue -288 55/push-ebp -289 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp -290 # var stack/ecx = stack of size 8 containing just 0x42 -291 68/push 0/imm32 -292 68/push 0x42/imm32 -293 68/push 8/imm32/size -294 68/push 4/imm32/top -295 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . . # copy esp to ecx -296 # eax = pop(stack) -297 # . . push args -298 51/push-ecx -299 # . . call -300 e8/call pop/disp32 -301 # . . discard args -302 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp -303 # check-ints-equal(eax, 0x42, msg) -304 # . . push args -305 68/push "F - test-pop: result"/imm32 -306 68/push 0x42/imm32 -307 50/push-eax -308 # . . call -309 e8/call check-ints-equal/disp32 -310 # . . discard args -311 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp -312 # check top -313 58/pop-to-eax -314 # . check-ints-equal(eax, 0, msg) -315 # . . push args -316 68/push "F - test-pop: top"/imm32 -317 68/push 0/imm32 -318 50/push-eax -319 # . . call -320 e8/call check-ints-equal/disp32 -321 # . . discard args -322 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp -323 # check size -324 58/pop-to-eax -325 # . check-ints-equal(eax, 8, msg) -326 # . . push args -327 68/push "F - test-pop: size"/imm32 -328 68/push 8/imm32 -329 50/push-eax -330 # . . call -331 e8/call check-ints-equal/disp32 -332 # . . discard args -333 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp -334 # . epilogue -335 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp -336 5d/pop-to-ebp -337 c3/return -338 -339 # TODO: make this generic -340 top: # s: (addr stack) -> n/eax: int -341 # . prologue -342 55/push-ebp -343 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp -344 # . save registers -345 51/push-ecx -346 56/push-esi -347 # esi = s -348 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 . # copy *(ebp+8) to esi -349 # if (s->top <= 0) abort -350 81 7/subop/compare 0/mod/indirect 6/rm32/esi . . . . . 0/imm32 # compare *esi -351 7e/jump-if-<= $top:abort/disp8 -352 # n = s->data[s->top - 4] -353 8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx -354 81 5/subop/subtract 3/mod/direct 1/rm32/ecx . . . . . 4/imm32 # subtract from ecx -355 8b/copy 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 8/disp8 . # copy *(esi+ecx+8) to eax -356 $top:end: -357 # . restore registers -358 5e/pop-to-esi -359 59/pop-to-ecx -360 # . epilogue -361 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp -362 5d/pop-to-ebp -363 c3/return -364 -365 $top:abort: -366 # print(stderr, "error: top: nothing left in stack") -367 # . write-buffered(Stderr, "error: top: nothing left in stack") -368 # . . push args -369 68/push "error: top: nothing left in stack"/imm32 -370 68/push Stderr/imm32 -371 # . . call -372 e8/call write-buffered/disp32 -373 # . . discard args -374 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -375 # . flush(Stderr) -376 # . . push args -377 68/push Stderr/imm32 -378 # . . call -379 e8/call flush/disp32 -380 # . . discard args -381 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp -382 # . syscall(exit, 1) -383 bb/copy-to-ebx 1/imm32 -384 b8/copy-to-eax 1/imm32/exit -385 cd/syscall 0x80/imm8 -386 # never gets here -387 -388 test-top: -389 # . prologue -390 55/push-ebp -391 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp -392 # var stack/ecx = stack of size 8 containing just 0x42 -393 68/push 0/imm32 -394 68/push 0x42/imm32 -395 68/push 8/imm32/size -396 68/push 4/imm32/top -397 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . . # copy esp to ecx -398 # eax = top(stack) -399 # . . push args -400 51/push-ecx -401 # . . call -402 e8/call top/disp32 -403 # . . discard args -404 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp -405 # check-ints-equal(eax, 42, msg") -406 # . . push args -407 68/push "F - test-top: result"/imm32 -408 68/push 0x42/imm32 -409 50/push-eax -410 # . . call -411 e8/call check-ints-equal/disp32 -412 # . . discard args -413 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp -414 # . epilogue -415 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp -416 5d/pop-to-ebp -417 c3/return -418 -419 # . . vim:nowrap:textwidth=0 +173 68/push 8/imm32/size +174 68/push 0/imm32/top +175 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . . # copy esp to ecx +176 # push(stack, 0x42) +177 # . . push args +178 68/push 0x42/imm32 +179 51/push-ecx +180 # . . call +181 e8/call push/disp32 +182 # . . discard args +183 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +184 # check top +185 58/pop-to-eax +186 # . check-ints-equal(eax, 4, msg) +187 # . . push args +188 68/push "F - test-push: top"/imm32 +189 68/push 4/imm32 +190 50/push-eax +191 # . . call +192 e8/call check-ints-equal/disp32 +193 # . . discard args +194 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp +195 # check size +196 58/pop-to-eax +197 # . check-ints-equal(eax, 8, msg) +198 # . . push args +199 68/push "F - test-push: size"/imm32 +200 68/push 8/imm32 +201 50/push-eax +202 # . . call +203 e8/call check-ints-equal/disp32 +204 # . . discard args +205 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp +206 # first word is 0x42 +207 58/pop-to-eax +208 # . check-ints-equal(eax, 0x42, msg) +209 # . . push args +210 68/push "F - test-push: data[0..3]"/imm32 +211 68/push 0x42/imm32 +212 50/push-eax +213 # . . call +214 e8/call check-ints-equal/disp32 +215 # . . discard args +216 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp +217 # second word is 0 +218 58/pop-to-eax +219 # . check-ints-equal(eax, 0, msg) +220 # . . push args +221 68/push "F - test-push: data[4..7]"/imm32 +222 68/push 0/imm32 +223 50/push-eax +224 # . . call +225 e8/call check-ints-equal/disp32 +226 # . . discard args +227 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp +228 # . epilogue +229 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp +230 5d/pop-to-ebp +231 c3/return +232 +233 # TODO: make this generic +234 pop: # s: (addr stack) -> n/eax: int +235 # . prologue +236 55/push-ebp +237 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp +238 # . save registers +239 51/push-ecx +240 56/push-esi +241 # esi = s +242 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 . # copy *(ebp+8) to esi +243 # if (s->top <= 0) abort +244 81 7/subop/compare 0/mod/indirect 6/rm32/esi . . . . . 0/imm32 # compare *esi +245 7e/jump-if-<= $pop:abort/disp8 +246 # s->top -= 4 +247 81 5/subop/subtract 0/mod/direct 6/rm32/esi . . . . . 4/imm32 # subtract from *esi +248 # eax = s->data[s->top] +249 8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx +250 8b/copy 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 8/disp8 . # copy *(esi+ecx+8) to eax +251 # s->data[s->top] = 0 +252 c7 0/subop/copy 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 8/disp8 0/imm32 # copy to *(esi+ecx+8) +253 $pop:end: +254 # . restore registers +255 5e/pop-to-esi +256 59/pop-to-ecx +257 # . epilogue +258 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp +259 5d/pop-to-ebp +260 c3/return +261 +262 $pop:abort: +263 # print(stderr, "error: pop: nothing left in stack") +264 # . write-buffered(Stderr, "error: pop: nothing left in stack") +265 # . . push args +266 68/push "error: pop: nothing left in stack"/imm32 +267 68/push Stderr/imm32 +268 # . . call +269 e8/call write-buffered/disp32 +270 # . . discard args +271 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +272 # . flush(Stderr) +273 # . . push args +274 68/push Stderr/imm32 +275 # . . call +276 e8/call flush/disp32 +277 # . . discard args +278 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp +279 # . syscall(exit, 1) +280 bb/copy-to-ebx 1/imm32 +281 e8/call syscall_exit/disp32 +282 # never gets here +283 +284 test-pop: +285 # . prologue +286 55/push-ebp +287 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp +288 # var stack/ecx = stack of size 8 containing just 0x42 +289 68/push 0/imm32 +290 68/push 0x42/imm32 +291 68/push 8/imm32/size +292 68/push 4/imm32/top +293 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . . # copy esp to ecx +294 # eax = pop(stack) +295 # . . push args +296 51/push-ecx +297 # . . call +298 e8/call pop/disp32 +299 # . . discard args +300 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp +301 # check-ints-equal(eax, 0x42, msg) +302 # . . push args +303 68/push "F - test-pop: result"/imm32 +304 68/push 0x42/imm32 +305 50/push-eax +306 # . . call +307 e8/call check-ints-equal/disp32 +308 # . . discard args +309 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp +310 # check top +311 58/pop-to-eax +312 # . check-ints-equal(eax, 0, msg) +313 # . . push args +314 68/push "F - test-pop: top"/imm32 +315 68/push 0/imm32 +316 50/push-eax +317 # . . call +318 e8/call check-ints-equal/disp32 +319 # . . discard args +320 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp +321 # check size +322 58/pop-to-eax +323 # . check-ints-equal(eax, 8, msg) +324 # . . push args +325 68/push "F - test-pop: size"/imm32 +326 68/push 8/imm32 +327 50/push-eax +328 # . . call +329 e8/call check-ints-equal/disp32 +330 # . . discard args +331 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp +332 # . epilogue +333 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp +334 5d/pop-to-ebp +335 c3/return +336 +337 # TODO: make this generic +338 top: # s: (addr stack) -> n/eax: int +339 # . prologue +340 55/push-ebp +341 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp +342 # . save registers +343 51/push-ecx +344 56/push-esi +345 # esi = s +346 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 . # copy *(ebp+8) to esi +347 # if (s->top <= 0) abort +348 81 7/subop/compare 0/mod/indirect 6/rm32/esi . . . . . 0/imm32 # compare *esi +349 7e/jump-if-<= $top:abort/disp8 +350 # n = s->data[s->top - 4] +351 8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx +352 81 5/subop/subtract 3/mod/direct 1/rm32/ecx . . . . . 4/imm32 # subtract from ecx +353 8b/copy 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 8/disp8 . # copy *(esi+ecx+8) to eax +354 $top:end: +355 # . restore registers +356 5e/pop-to-esi +357 59/pop-to-ecx +358 # . epilogue +359 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp +360 5d/pop-to-ebp +361 c3/return +362 +363 $top:abort: +364 # print(stderr, "error: top: nothing left in stack") +365 # . write-buffered(Stderr, "error: top: nothing left in stack") +366 # . . push args +367 68/push "error: top: nothing left in stack"/imm32 +368 68/push Stderr/imm32 +369 # . . call +370 e8/call write-buffered/disp32 +371 # . . discard args +372 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +373 # . flush(Stderr) +374 # . . push args +375 68/push Stderr/imm32 +376 # . . call +377 e8/call flush/disp32 +378 # . . discard args +379 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp +380 # . syscall(exit, 1) +381 bb/copy-to-ebx 1/imm32 +382 e8/call syscall_exit/disp32 +383 # never gets here +384 +385 test-top: +386 # . prologue +387 55/push-ebp +388 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp +389 # var stack/ecx = stack of size 8 containing just 0x42 +390 68/push 0/imm32 +391 68/push 0x42/imm32 +392 68/push 8/imm32/size +393 68/push 4/imm32/top +394 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . . # copy esp to ecx +395 # eax = top(stack) +396 # . . push args +397 51/push-ecx +398 # . . call +399 e8/call top/disp32 +400 # . . discard args +401 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp +402 # check-ints-equal(eax, 42, msg") +403 # . . push args +404 68/push "F - test-top: result"/imm32 +405 68/push 0x42/imm32 +406 50/push-eax +407 # . . call +408 e8/call check-ints-equal/disp32 +409 # . . discard args +410 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp +411 # . epilogue +412 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp +413 5d/pop-to-ebp +414 c3/return +415 +416 # . . vim:nowrap:textwidth=0 -- cgit 1.4.1-2-gfad0