about summary refs log tree commit diff stats
path: root/subx/examples
Commit message (Collapse)AuthorAgeFilesLines
...
* 4507Kartik Agaram2018-09-232-0/+304
| | | | | | | | New helper: compare a null-terminated string (from argv) with a length-prefixed string (anywhere else). As long as ex11 continues to pass we can copy the function and its tests to other programs.
* 4503Kartik Agaram2018-09-224-11/+2
| | | | Include LEA (load effective address) in the SubX subset of x86 ISA.
* 4591Kartik Agaram2018-09-224-8/+8
|
* 4590Kartik Agaram2018-09-223-2/+2
|
* 4589Kartik Agaram2018-09-221-12/+12
|
* 4587Kartik Agaram2018-09-226-127/+0
|
* 4585Kartik Agaram2018-09-212-72/+0
|
* 4584 - discrepancy between SubX and native x86Kartik Agaram2018-09-212-1/+76
| | | | | | | | | | | | | | | | | | | | | | | | | 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.
* 4583Kartik Agaram2018-09-211-1/+1
|
* 4582Kartik Agaram2018-09-211-0/+0
| | | | subx/examples/ex10 doesn't currently run natively. Grr..
* 4581Kartik Agaram2018-09-2110-23/+23
| | | | | | | | | | | | Even more cuddling. We want to keep lines short where the opcode and operands are self-explanatory. If there are any implicit registers, etc., we'll continue to do the table layout. The first two columns look messy now; let's see how this goes. Maybe I'll give up on the tabular layout altogether, just string args with a single space.
* 4580Kartik Agaram2018-09-211-4/+4
| | | | | Since we're cuddling jump/call args next to the opcode, we can have longer labels without messing up the layout!
* 4579Kartik Agaram2018-09-212-0/+67
| | | | | | | | | | | | 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.
* 4577Kartik Agaram2018-09-211-1/+1
|
* 4576Kartik Agaram2018-09-212-5/+5
|
* 4575Kartik Agaram2018-09-212-0/+49
| | | | | | | | New example, just to fix in my head how arguments go on the stack. It's possible I'm still confused about the order callers push args in to the stack. But even if this violates the calling convention, it should still run.
* 4569Kartik Agaram2018-09-211-2/+2
|
* 4564Kartik Agaram2018-09-202-5/+5
|
* 4562Kartik Agaram2018-09-203-8/+8
|
* 4561Kartik Agaram2018-09-205-51/+51
|
* 4548: start of a compiler for a new experimental low-level languageKartik Agaram2018-09-176-0/+127
|
* 4541Kartik Agaram2018-09-112-3/+2
|
* 4535 - support for global variable namesKartik Agaram2018-09-014-43/+48
|
* 4533Kartik Agaram2018-09-011-0/+1
|
* 4531 - automatically compute segment addressesKartik Agaram2018-09-019-9/+9
|
* 4530 - create an apps/ directoryKartik Agaram2018-09-016-202/+138
|
* 4529 - move examples to a sub-directoryKartik Agaram2018-09-0119-0/+441