4757
Let's start highlighting all global variables in Red. Assembly programming has a tendency to over-use them. They're a necessary evil, but we should minimize the number of functions that access them.
This commit is contained in:
parent
fa04aebdc2
commit
e59a91b73d
|
@ -12,7 +12,7 @@
|
|||
# 1-3 bytes 3 bits 2 bits 3 bits 3 bits 3 bits 2 bits 2 bits 0/1/2/4 bytes 0/1/2/4 bytes
|
||||
|
||||
# syscall(mmap, 0x1000)
|
||||
bb/copy-to-EBX mmap-new-segment/imm32
|
||||
bb/copy-to-EBX Mmap-new-segment/imm32
|
||||
b8/copy-to-EAX 0x5a/imm32/mmap
|
||||
cd/syscall 0x80/imm8
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
|||
|
||||
== data
|
||||
# various constants used here were found in the Linux sources (search for file mman-common.h)
|
||||
mmap-new-segment: # type mmap_arg_struct
|
||||
Mmap-new-segment: # type mmap_arg_struct
|
||||
# addr
|
||||
00 00 00 00 # null
|
||||
# len
|
||||
|
|
|
@ -5,22 +5,22 @@
|
|||
# $ subx run examples/ex4
|
||||
|
||||
== code
|
||||
# syscall(read, stdin, x, 1)
|
||||
# syscall(read, stdin, X, 1)
|
||||
# fd = 0 (stdin)
|
||||
bb/copy-to-EBX 0/imm32
|
||||
# initialize x (location to write result to)
|
||||
b9/copy-to-ECX x/imm32
|
||||
# initialize X (location to write result to)
|
||||
b9/copy-to-ECX X/imm32
|
||||
# size = 1 character
|
||||
ba/copy-to-EDX 1/imm32
|
||||
# syscall
|
||||
b8/copy-to-EAX 3/imm32/read
|
||||
cd/syscall 0x80/imm8
|
||||
|
||||
# syscall(write, stdout, x, 1)
|
||||
# syscall(write, stdout, X, 1)
|
||||
# fd = 1 (stdout)
|
||||
bb/copy-to-EBX 1/imm32
|
||||
# initialize x (location to read from)
|
||||
b9/copy-to-ECX x/imm32
|
||||
# initialize X (location to read from)
|
||||
b9/copy-to-ECX X/imm32
|
||||
# size = 1 character
|
||||
ba/copy-to-EDX 1/imm32
|
||||
# syscall
|
||||
|
@ -32,7 +32,7 @@ b8/copy-to-EAX 1/imm32/exit
|
|||
cd/syscall 0x80/imm8
|
||||
|
||||
== data
|
||||
x:
|
||||
X:
|
||||
00 00 00 00 # space for read() to write to
|
||||
|
||||
# vim:nowrap:textwidth=0
|
||||
|
|
|
@ -10,13 +10,13 @@
|
|||
# op subop mod rm32 base index scale r32
|
||||
# 1-3 bytes 3 bits 2 bits 3 bits 3 bits 3 bits 2 bits 2 bits 0/1/2/4 bytes 0/1/2/4 bytes
|
||||
|
||||
# syscall(write, stdout, x, size)
|
||||
# syscall(write, stdout, X, size)
|
||||
# fd = 1 (stdout)
|
||||
bb/copy-to-EBX 1/imm32
|
||||
# initialize x (location to write result to)
|
||||
b9/copy-to-ECX x/imm32
|
||||
# initialize X (location to write result to)
|
||||
b9/copy-to-ECX X/imm32
|
||||
# initialize size
|
||||
8b/copy 0/mod/indirect 5/rm32/.disp32 . . 2/r32/EDX size/disp32 . # copy *size to EDX
|
||||
8b/copy 0/mod/indirect 5/rm32/.disp32 . . 2/r32/EDX Size/disp32 . # copy *size to EDX
|
||||
# syscall
|
||||
b8/copy-to-EAX 4/imm32/write
|
||||
cd/syscall 0x80/imm8
|
||||
|
@ -26,9 +26,9 @@
|
|||
cd/syscall 0x80/imm8
|
||||
|
||||
== data
|
||||
size: # size of string
|
||||
Size: # size of string
|
||||
0e 00 00 00 # 14
|
||||
x: # string to print
|
||||
X: # string to print
|
||||
48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a 00
|
||||
# H e l l o , ␣ w o r l d ! newline null
|
||||
|
||||
|
|
|
@ -15,89 +15,89 @@
|
|||
# op subop mod rm32 base index scale r32
|
||||
# 1-3 bytes 3 bits 2 bits 3 bits 3 bits 3 bits 2 bits 2 bits 0/1/2/4 bytes 0/1/2/4 bytes
|
||||
|
||||
# syscall(creat, filename)
|
||||
bb/copy-to-EBX filename/imm32
|
||||
# syscall(creat, Filename)
|
||||
bb/copy-to-EBX Filename/imm32
|
||||
b9/copy-to-ECX 0x180/imm32/fixed-perms
|
||||
b8/copy-to-EAX 8/imm32/creat
|
||||
cd/syscall 0x80/imm8
|
||||
|
||||
# stream = syscall(open, filename, O_WRONLY, 0) # we can't use 'fd' because it looks like a hex byte
|
||||
bb/copy-to-EBX filename/imm32
|
||||
# stream = syscall(open, Filename, O_WRONLY, 0) # we can't use 'fd' because it looks like a hex byte
|
||||
bb/copy-to-EBX Filename/imm32
|
||||
b9/copy-to-ECX 1/imm32/wronly
|
||||
ba/copy-to-EDX 0x180/imm32/fixed-perms
|
||||
b8/copy-to-EAX 5/imm32/open
|
||||
cd/syscall 0x80/imm8
|
||||
# save stream
|
||||
bb/copy-to-EBX stream/imm32
|
||||
bb/copy-to-EBX Stream/imm32
|
||||
89/copy 0/mod/indirect 3/rm32/EBX . . . 0/r32/EAX . . # copy EAX to *EBX
|
||||
|
||||
# syscall(write, stream, "a", 1)
|
||||
# syscall(write, Stream, "a", 1)
|
||||
# load stream
|
||||
bb/copy-to-EBX stream/imm32
|
||||
bb/copy-to-EBX Stream/imm32
|
||||
8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX
|
||||
#
|
||||
b9/copy-to-ECX a/imm32
|
||||
b9/copy-to-ECX A/imm32
|
||||
ba/copy-to-EDX 1/imm32/size
|
||||
b8/copy-to-EAX 4/imm32/write
|
||||
cd/syscall 0x80/imm8
|
||||
|
||||
# syscall(close, stream)
|
||||
# syscall(close, Stream)
|
||||
# load stream
|
||||
bb/copy-to-EBX stream/imm32
|
||||
bb/copy-to-EBX Stream/imm32
|
||||
8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX
|
||||
#
|
||||
b8/copy-to-EAX 6/imm32/close
|
||||
cd/syscall 0x80/imm8
|
||||
|
||||
# stream = syscall(open, filename, O_RDONLY, 0)
|
||||
bb/copy-to-EBX filename/imm32
|
||||
# stream = syscall(open, Filename, O_RDONLY, 0)
|
||||
bb/copy-to-EBX Filename/imm32
|
||||
b9/copy-to-ECX 0/imm32/rdonly
|
||||
ba/copy-to-EDX 0x180/imm32/fixed-perms
|
||||
b8/copy-to-EAX 5/imm32/open
|
||||
cd/syscall 0x80/imm8
|
||||
# save stream
|
||||
bb/copy-to-EBX stream/imm32
|
||||
# save Stream
|
||||
bb/copy-to-EBX Stream/imm32
|
||||
89/copy 0/mod/indirect 3/rm32/EBX . . . 0/r32/EAX . . # copy EAX to *EBX
|
||||
|
||||
# syscall(read, stream, b, 1)
|
||||
# syscall(read, Stream, B, 1)
|
||||
# load stream
|
||||
bb/copy-to-EBX stream/imm32
|
||||
bb/copy-to-EBX Stream/imm32
|
||||
8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX
|
||||
#
|
||||
b9/copy-to-ECX b/imm32
|
||||
b9/copy-to-ECX B/imm32
|
||||
ba/copy-to-EDX 1/imm32/size
|
||||
b8/copy-to-EAX 3/imm32/read
|
||||
cd/syscall 0x80/imm8
|
||||
|
||||
# syscall(close, stream)
|
||||
# syscall(close, Stream)
|
||||
# load stream
|
||||
bb/copy-to-EBX stream/imm32
|
||||
bb/copy-to-EBX Stream/imm32
|
||||
8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX
|
||||
#
|
||||
b8/copy-to-EAX 6/imm32/close
|
||||
cd/syscall 0x80/imm8
|
||||
|
||||
# syscall(unlink, filename)
|
||||
bb/copy-to-EBX filename/imm32
|
||||
bb/copy-to-EBX Filename/imm32
|
||||
b8/copy-to-EAX 0xa/imm32/unlink
|
||||
cd/syscall 0x80/imm8
|
||||
|
||||
# syscall(exit, b)
|
||||
# load b
|
||||
bb/copy-to-EBX b/imm32
|
||||
bb/copy-to-EBX B/imm32
|
||||
8b/copy 0/mod/indirect 3/rm32/EBX . . . 3/r32/EBX . . # copy *EBX to EBX
|
||||
#
|
||||
b8/copy-to-EAX 1/imm32/exit
|
||||
cd/syscall 0x80/imm8
|
||||
|
||||
== data
|
||||
stream:
|
||||
Stream:
|
||||
00 00 00 00
|
||||
a:
|
||||
A:
|
||||
61 00 00 00
|
||||
b:
|
||||
B:
|
||||
00 00 00 00
|
||||
filename:
|
||||
Filename:
|
||||
2e 66 6f 6f 00 00 00 00
|
||||
|
||||
# vim:nowrap:textwidth=0
|
||||
|
|
|
@ -27,4 +27,7 @@ let b:cmt_head = "#? "
|
|||
" comment token
|
||||
syntax match subxDelimiter / \. / | highlight link subxDelimiter Delimiter
|
||||
|
||||
syntax match subxString %"[^"]*"% | highlight link subxString Constant
|
||||
syntax match subxGlobal %\<[A-Z][a-z-]*\>% | highlight link subxGlobal SpecialChar
|
||||
|
||||
let &cpo = s:save_cpo
|
||||
|
|
|
@ -39,6 +39,9 @@ function! HighlightTangledFile()
|
|||
syntax match muScenario "^scenario\>" | highlight muScenario ctermfg=34
|
||||
syntax match muPendingScenario "^pending-scenario\>" | highlight link muPendingScenario SpecialChar
|
||||
syntax match muData "^type\>\|^container\>\|^exclusive-container\>" | highlight muData ctermfg=226
|
||||
|
||||
syntax match subxString %"[^"]*"% | highlight link subxString Constant
|
||||
syntax match subxGlobal %\<[A-Z][a-z-]*\>% | highlight link subxGlobal SpecialChar
|
||||
endfunction
|
||||
augroup LocalVimrc
|
||||
autocmd BufRead,BufNewFile *.mu set ft=mu
|
||||
|
|
Loading…
Reference in New Issue