about summary refs log tree commit diff stats
path: root/subx/examples/ex10
Commit message (Collapse)AuthorAgeFilesLines
* 4888Kartik Agaram2018-12-291-0/+0
| | | | We only can't use rm32=5 when mod=0. Totally fine when it's mod=1.
* 4661Kartik Agaram2018-10-041-0/+0
| | | | | Make segment management a little more consistent between initial segments and add-on segments (using `mmap`).
* 4516Kartik K. Agaram2018-09-241-0/+0
| | | | | | | More calling convention tweaks. Use EBP to get consistently at parameters and locals. Always put the first function argument closest to EBP.
* 4585Kartik Agaram2018-09-211-0/+0
|
* 4584 - discrepancy between SubX and native x86Kartik Agaram2018-09-211-0/+0
| | | | | | | | | | | | | | | | | | | | | | | | | One of the more painful things I had to debug with machine code. Tricks I used can be seen in ex10.subx: - printing argv[1] in various places - printing a single 'X' in various places to count how many times we get to different instructions - exiting with the current value of EAX in various places I repeatedly went down the wrong trail in several ways: - forgetting that the problem lay in native runs, and accidentally switching to subx runs during debugging. - forgetting to pass commandline args, because ex10 doesn't check its argv - writing the wrong comment for an instruction, and then miscalculating the set of registers that need to be saved. - forgetting that syscalls clobber EAX. Debugging native runs is hard, because you have to write non-trivial code to instrument the binary, and instrumentation can itself be buggy. When we finally tracked it down, I recognized the problem immediately. I'd meant to confirm the behavior of opcode 8a against bare metal, and then forgot. In any case, opcode 8a was inconsistent with 88. Sloppy.
* 4582Kartik Agaram2018-09-211-0/+0
| | | | subx/examples/ex10 doesn't currently run natively. Grr..
* 4579Kartik Agaram2018-09-211-0/+0
New example program: ascii null-terminated string comparison I'd hoped this would be a stepping stone to supporting general ascii comparison, but we're planning to use size-prefixed rather than null-terminated arrays everywhere. The only exception is commandline arguments, which will remain null-terminated to interoperate with Linux. So I'm going to need separate functions for "compare with argv" and for general string comparison.