This commit is contained in:
Kartik Agaram 2019-06-13 01:08:02 -07:00
parent 55ea211d87
commit acdd7a7a68
1 changed files with 36 additions and 1 deletions

View File

@ -318,7 +318,42 @@ test-convert-computes-addresses:
compute-offsets: # in : (address buffered-file), segments : (address stream {string, segment-info}), labels : (address stream {string, label-info})
# pseudocode:
# gg
# var curr-segment-name = 0
# var file-offset = 0, segment-offset = 0
# var line = new-stream(512, 1)
# while true
# clear-stream(line)
# read-line-buffered(in, line)
# if (line->write == 0) break # end of file
# while true
# var word-slice = next-word(line)
# if slice-empty?(word-slice) # end of line
# break
# if slice-starts-with?(word-slice, "#") # comment
# continue
# if is-label?(word-slice)
# x : (address number) = insert(labels, name)
# *x = segment-offset
# trace("label '", word-slice, "' is in segment '", curr-segment-name, "'")
# trace("label '", word-slice, "' is at offset 0x", file-offset)
# continue
# if slice-equal?(word-slice, "==")
# segment-name : (address slice) = next-word(line)
# if slice-empty?(segment-name)
# abort
# segment-start : (address slice) = next-word(line)
# if slice-empty?(segment-start)
# abort
# seg : (address segment-info) = insert(segments, segment-name)
# seg->starting-address = parse-hex-int(segment-start)
# seg->starting-offset = file-offset
# trace("segment '", segment-name, "' is at file offset 0x", seg->starting-offset)
# trace("segment '", segment-name, "' has size 0x", seg->starting-offset)
# segment-offset = 0
# else
# width = compute-width(word-slice)
# segment-offset += width
# file-offset += width
#
# . prolog
55/push-EBP