Hello! I'm trying to make sense of some disassembled code. Could someone help me out here?
``` IN: scratchpad [ 256 <iota> [ drop ] each ] disassemble 0000001a8dbcdfc0: 89053a30e8fe mov [rip-0x117cfc6], eax ! What's this? 0000001a8dbcdfc6: b800010000 mov eax, 0x100 0000001a8dbcdfcb: 31db xor ebx, ebx 0000001a8dbcdfcd: 4983c610 add r14, 0x10 0000001a8dbcdfd1: e909000000 jmp 0x1a8dbcdfdf (( gensym ) + 0x1f) 0000001a8dbcdfd6: 48ffc3 inc rbx 0000001a8dbcdfd9: 89052130e8fe mov [rip-0x117cfdf], eax ! What's this? 0000001a8dbcdfdf: 4839c3 cmp rbx, rax 0000001a8dbcdfe2: 0f8ceeffffff jl dword 0x1a8dbcdfd6 (( gensym ) + 0x16) 0000001a8dbcdfe8: 4983ee10 sub r14, 0x10 0000001a8dbcdfec: 89050e30e8fe mov [rip-0x117cff2], eax ! What's this? 0000001a8dbcdff2: c3 ret 0000001a8dbcdff3: 0000 add [rax], al 0000001a8dbcdff5: 0000 add [rax], al 0000001a8dbcdff7: 0000 add [rax], al 0000001a8dbcdff9: 0000 add [rax], al 0000001a8dbcdffb: 0000 add [rax], al 0000001a8dbcdffd: 0000 add [rax], al 0000001a8dbcdfff: 00 invalid ``` The lines like `mov [rip-0x117cfdf], eax` I read as "copy the contents of the EAX register to a memory location pointed to by a memory address relative to the current Instruction Pointer register (rIP)". Am I right? If so, why is that being done inside the loop, and twice at the procedure entry and exit? Also, why is the register r14 incremented by 0x10 on entry, and decremented on exit? What is r14 used for? ---=====--- Александр ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Factor-talk mailing list Factor-talk@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/factor-talk