Assembler

This project aims to create a workable risc-v/x86/arm assembler using java, this is our first stage, and then we will use it to support all the embedded-asm-syntax in our tiny kernel.

We use antlr to create parser.

Project Management

Everyone in the team should be hands-on and contribute code. We follow NoPM project management methodology. Coding oriented. We have regular weekly meeting in Kowloon Tong, around 4-6 hours, to sync up our progress and share all knowledge.

Project site

gitlab https://gitlab.com/quantr/toolchain/Assembler

facebook https://www.facebook.com/groups/491276011610560

GitLab CI/CD

We rely on gitlab ci/cd to auto build our assembler, run a full test and upload the result to https://www.quantr.hk/asmweb

Peter
Derek Tang
Cheng Darren
Ken Lam
michellechw
Ronald Park
Developer performance

Finish all knowledge preparation. Feel comfortable with Intel manual, confirm the antlr designs and whole team start translating intel basic set of instruction.

2019-06-28
to
2020-03-30

closed

Netbeans RISC-V need to support

  1. create project, generate a quantr.hk json file, all our project settings go there
  2. editor supports
    • syntax highlight
    • accurate error highlight and error message
    • code completion
  3. debugger supports
    • step over
    • step in and step out only for c code
    • run and pause
  4. Hook the netbeans debugger to our simulator
    • provide memory and register window
    • allow user modify memory and register in runtime
  5. Profiler
    • mainly base on our listing file provide additional profile information about cpu cycle
  6. Well support macro
  7. for c project, support gcc and hook their inline assembly to our assembler, and make sure linker script work
2022-06-11
to
2022-12-31

active

We need to support these macro to make our assembler really work

  1. %define
  2. %ifdef
  3. label1:
  4. %skip
  5. .byte
  6. %include
  7. times 64 db 0
  8. times 64-$+buffer db ' '
2022-06-01
to
2022-12-31

active
Peter
2. our listing format 3. macro 1. how to compile an asm file
2023-02-23
07:42:41.550
Peter
0x9b 0x97 0x37 0x00 0x000000008000002a : slliw a5,a5,0x3
2022-05-25
01:49:18.226
Peter
2021-05-20
11:09:38.520
Peter
"OUTS" instruction is stated in Intel manual, but NASM doesn't support the 'LODS', 'MOVS', 'STOS', 'SCAS', 'CMPS', 'INS', or 'OUTS' instructions, but only supports the forms such as 'LODSB', 'MOVSW', and 'SCASD' which explicitly specify the size of the components of the strings being manipulated. https://www.conradk.com/codebase/2017/06/06/x86-64-assembly-from-scratch/ **I need to know the reason**
2021-05-11
14:51:00.339
desmond ng
jmp [cx] does not exist in the list, but should we give an error if it is typed by a user? Currently only have a blank result, reason behind is not because there is no error message for such case, but because "no viable alternative input", which means the parser cant even identify it.
2020-05-18
17:14:49.296
JennyTse
![Capture](/uploads/108d346527d082e075771274e89fdfc8/Capture.PNG)
2020-01-07
08:44:47.763
desmond ng
In the function "NOP EAX" (16 bit mode), opcode is NP... which may mean no prefix. In nasm, it turns out that the instruction opcode is 66 f 1f c0. What is 66 if it is not a prefix?
2020-01-04
15:08:12.276
Kelvin Wu
POP r64 should contain REX Prefix. However, nasm doesn't output the prefix for some r64 registers. Example: 1. pop rax: quantr = 40 58, nasm = 58 2. pop r10: quantr = 41 5a, nasm = 41 5a 40, 41 in the above example are the REX prefix.
2019-12-28
03:59:34.596
Peter
Why nasm supports reg64 in LAR instruction, mismatch with intel manual?![why_lar_support_reg64](/uploads/dc2cd7210fca3c24102509880e4702e6/why_lar_support_reg64.jpg)
2019-12-06
09:50:52.067
Peter
Jenny: make sure if all instructions calling all 5 functions are still works: * initLeftToken * leftInit * initRightToken * rightInit * initCondition * initIns Kelvin: Remove byte/word/dword/qword from indirect memory access, i mean the wording before []
2019-12-01
09:51:34.796
Issac Liu
Hi, you can use this tool to compare any changes of the PE file header/section values as shown like this: ![image](/uploads/76e4d634f4d7745244746c146c50b4f7/image.png) ![image](/uploads/ab867b9a09d495dbaf7d6676e95a7757/image.png) ![image](/uploads/7389e99f9f17e020d1bfd9a8cc0477a8/image.png) download here: [LPE-DLXb_1.41_UPD.zip](/uploads/33a8cb7f7bb5b1ac02313d12f8cbcb1d/LPE-DLXb_1.41_UPD.zip)
2019-11-16
17:55:34.701
Issac Liu
Same to PEView, but I think powerful than each other. ![image](/uploads/f304c54c207a28f1f098871930e93f9e/image.png) You can download the Explorer Suite and install : [ExplorerSuite.exe](/uploads/27e6c712d825c27e319ad98744d1d438/ExplorerSuite.exe)
2019-10-27
06:24:35.515
Issac Liu
build by: **cl smallPE.c** guess that it will include import table Kernel32.dll reference [smallPE.c](/uploads/befec26eceff3131e17a905091d9b0ec/smallPE.c) [smallPE.exe](/uploads/fe1009c4e9b752d9ee7d8b94e1a838f2/smallPE.exe)
2019-10-27
06:10:24.425
Issac Liu
check the PE header field by PE View build by: **cl /nologo /c smallPE.c** **link /nologo /ENTRY:main /NODEFAULTLIB /SUBSYSTEM:WINDOWS smallPE.obj** [smallPE.exe](/uploads/c4e24b53e726d8043aa0b62bfab17c7c/smallPE.exe) [smallPE.c](/uploads/3a3cfde18ae3070bb919cf6677618eb3/smallPE.c)
2019-10-27
06:08:26.458
Peter
Enhance netbeans-antlr to support antlr file formatting
2019-10-01
16:10:14.050
Peter
1. Zero padding, cut of pad "0" 2. Jenny consolidate your code into well format, let us understand and give us tutorial next sat morning 3. Desmond: a. nasm in linux example, able to run and print hello world https://cs.lmu.edu/~ray/notes/nasmtutorial/ b. find out the minimum requirement to stuck asm program and run in linux
2019-10-01
16:09:37.663
Peter
./asm/assemble.c . Nasm just have these error, not many. ``` switch (m) { case MERR_OPSIZEMISSING: nasm_error(ERR_NONFATAL, "operation size not specified"); break; case MERR_OPSIZEMISMATCH: nasm_error(ERR_NONFATAL, "mismatch in operand sizes"); break; case MERR_BRNOTHERE: nasm_error(ERR_NONFATAL, "broadcast not permitted on this operand"); break; case MERR_BRNUMMISMATCH: nasm_error(ERR_NONFATAL, "mismatch in the number of broadcasting elements"); break; case MERR_MASKNOTHERE: nasm_error(ERR_NONFATAL, "mask not permitted on this operand"); break; case MERR_DECONOTHERE: nasm_error(ERR_NONFATAL, "unsupported mode decorator for instruction"); break; case MERR_BADCPU: nasm_error(ERR_NONFATAL, "no instruction for this cpu level"); break; case MERR_BADMODE: nasm_error(ERR_NONFATAL, "instruction not supported in %d-bit mode", bits); break; case MERR_ENCMISMATCH: nasm_error(ERR_NONFATAL, "specific encoding scheme not available"); break; case MERR_BADBND: nasm_error(ERR_NONFATAL, "bnd prefix is not allowed"); break; case MERR_BADREPNE: nasm_error(ERR_NONFATAL, "%s prefix is not allowed", (has_prefix(instruction, PPS_REP, P_REPNE) ? "repne" : "repnz")); break; case MERR_REGSETSIZE: nasm_error(ERR_NONFATAL, "invalid register set size"); break; case MERR_REGSET: nasm_error(ERR_NONFATAL, "register set not valid for operand"); break; default: nasm_error(ERR_NONFATAL, "invalid combination of opcode and operands"); ```
2019-09-30
11:11:44.731
JennyTse
how do use these instructions? ![scas](/uploads/804c4b6eec0109cf145912dc83e127b4/scas.PNG)
2019-09-18
14:54:58.160
Peter
I still don't understand what situation we need to add 0x66 ? adc al,0x12 ``` bit 16 = 14 12 bit 32 = 14 12 bit 64 = 14 12 ``` adc ax,0x1234 ``` bit 16 = 15 34 12 bit 32 = 66 15 34 12 bit 64 = 66 15 34 12 ``` adc eax,0x12345678 ``` bit 16 = 66 15 78 56 34 12 bit 32 = 15 78 56 34 12 bit 64 = 15 78 56 34 12 ```
2019-09-18
14:54:45.446
Peter
Please study windows object file format. Decode the byte like what you did last time. Please stop study ELF since i am creating a library for it. ``` global _main extern _GetStdHandle@4 extern _WriteFile@20 extern _ExitProcess@4 section .text _main: ; DWORD bytes; mov ebp, esp sub esp, 4 ; hStdOut = GetstdHandle( STD_OUTPUT_HANDLE) push -11 call _GetStdHandle@4 mov ebx, eax ; WriteFile( hstdOut, message, length(message), &bytes, 0); push 0 lea eax, [ebp-4] push eax push (message_end - message) push message push ebx call _WriteFile@20 ; ExitProcess(0) push 0 call _ExitProcess@4 ; never here hlt message: db 'Hello, World', 10 message_end: ``` To compile, you'll need NASM and LINK.EXE (from Visual studio Standard Edition) ``` nasm -fwin32 hello.asm link /subsystem:console /nodefaultlib /entry:main hello.obj ```
2019-09-12
20:22:40.724
Status Job Pipeline Stage Commit Msg Timing
success #6621325497 master 5203c269
peter8-runner
#1252343798 Peter build
moved to Elf_Sym from Elf32_Sym
0:16
10 days, 22 hours
success #6621323921 master 5203c269
godaddy1-assembler
#1252343798 Peter deploy
moved to Elf_Sym from Elf32_Sym
0:33
10 days, 22 hours
success #6621323920 master 5203c269
godaddy1-assembler
#1252343798 Peter deploy
moved to Elf_Sym from Elf32_Sym
0:26
10 days, 22 hours
success #6621323919 master 5203c269
peter8-runner
#1252343798 Peter deploy
moved to Elf_Sym from Elf32_Sym
0:29
10 days, 22 hours
failed #6621323918 master 5203c269
peter8-runner
#1252343798 Peter build
moved to Elf_Sym from Elf32_Sym
0:20
10 days, 22 hours
failed #6621321513 master 5203c269
peter8-runner
#1252332992 Peter build
moved to Elf_Sym from Elf32_Sym
0:16
10 days, 22 hours
failed #6621315992 master 5203c269
peter8-runner
#1252332992 Peter build
moved to Elf_Sym from Elf32_Sym
0:12
10 days, 22 hours
failed #6621299115 master 5203c269
peter8-runner
#1252332992 Peter build
moved to Elf_Sym from Elf32_Sym
0:17
10 days, 23 hours
failed #6621296966 master 5203c269
peter8-runner
#1252332992 Peter build
moved to Elf_Sym from Elf32_Sym
0:27
10 days, 23 hours
failed #6621288583 master 5203c269
peter8-runner
#1252332992 Peter build
moved to Elf_Sym from Elf32_Sym
0:16
10 days, 23 hours
failed #6621282911 master 5203c269
peter8-runner
#1252332992 Peter build
moved to Elf_Sym from Elf32_Sym
0:14
10 days, 23 hours
skipped #6621276644 master 5203c269
#1252332992 Peter deploy
moved to Elf_Sym from Elf32_Sym
0:0
54 years, 3 months
skipped #6621276642 master 5203c269
#1252332992 Peter deploy
moved to Elf_Sym from Elf32_Sym
0:0
54 years, 3 months
skipped #6621276641 master 5203c269
#1252332992 Peter deploy
moved to Elf_Sym from Elf32_Sym
0:0
54 years, 3 months
failed #6621276640 master 5203c269
peter8-runner
#1252332992 Peter build
moved to Elf_Sym from Elf32_Sym
0:14
10 days, 23 hours
success #6168485611 master 8bba77c4
godaddy1-assembler
#1176006775 Peter deploy
dev
0:33
2 months, 11 days
success #6168485609 master 8bba77c4
godaddy1-assembler
#1176006775 Peter deploy
dev
0:25
2 months, 11 days
success #6168485607 master 8bba77c4
peter8-runner
#1176006775 Peter deploy
dev
0:43
2 months, 11 days
success #6168485606 master 8bba77c4
peter8-runner
#1176006775 Peter build
dev
0:17
2 months, 11 days
success #6073311822 master 9acb6822
godaddy1-assembler
#1160727755 Peter deploy
fixed c.or disasm
0:34
2 months, 23 days
success #6073311801 master 9acb6822
godaddy1-assembler
#1160727755 Peter deploy
fixed c.or disasm
0:26
2 months, 23 days
success #6073311788 master 9acb6822
peter8-runner
#1160727755 Peter deploy
fixed c.or disasm
0:20
2 months, 23 days
success #6073311771 master 9acb6822
peter8-runner
#1160727755 Peter build
fixed c.or disasm
0:14
2 months, 23 days
success #6069068541 master aa505305
godaddy1-assembler
#1160059152 Ken Lam deploy
dev
0:32
2 months, 24 days
success #6069068540 master aa505305
godaddy1-assembler
#1160059152 Ken Lam deploy
dev
0:34
2 months, 24 days
success #6069068539 master aa505305
peter8-runner
#1160059152 Ken Lam deploy
dev
0:25
2 months, 24 days
success #6069068538 master aa505305
peter8-runner
#1160059152 Ken Lam build
dev
0:14
2 months, 24 days
success #6059480809 master 0f4dd389
godaddy1-assembler
#1158639167 Ken Lam deploy
dev
0:30
2 months, 25 days
success #6059480808 master 0f4dd389
godaddy1-assembler
#1158639167 Ken Lam deploy
dev
0:23
2 months, 25 days
success #6059480807 master 0f4dd389
peter8-runner
#1158639167 Ken Lam deploy
dev
0:23
2 months, 25 days
success #6059480806 master 0f4dd389
peter8-runner
#1158639167 Ken Lam build
dev
0:14
2 months, 25 days
success #6041753769 master b3d4bb6c
godaddy1-assembler
#1155894489 Ken Lam deploy
dev
0:32
2 months, 27 days
success #6041753767 master b3d4bb6c
godaddy1-assembler
#1155894489 Ken Lam deploy
dev
0:26
2 months, 27 days
success #6041753766 master b3d4bb6c
peter8-runner
#1155894489 Ken Lam deploy
dev
0:21
2 months, 27 days
success #6041753765 master b3d4bb6c
peter8-runner
#1155894489 Ken Lam build
dev
0:14
2 months, 27 days
success #6038155716 master 350d933f
godaddy1-assembler
#1155232723 Peter deploy
dev
0:33
2 months, 27 days
success #6038155715 master 350d933f
godaddy1-assembler
#1155232723 Peter deploy
dev
0:23
2 months, 27 days
success #6038155714 master 350d933f
peter8-runner
#1155232723 Peter deploy
dev
0:24
2 months, 27 days
success #6038155713 master 350d933f
peter8-runner
#1155232723 Peter build
dev
0:16
2 months, 27 days
success #6038154040 master 4aee4f3c
godaddy1-assembler
#1155232388 Peter deploy
dev
0:33
2 months, 27 days
success #6038154039 master 4aee4f3c
godaddy1-assembler
#1155232388 Peter deploy
dev
0:25
2 months, 27 days
success #6038154038 master 4aee4f3c
peter8-runner
#1155232388 Peter deploy
dev
0:24
2 months, 27 days
success #6038154036 master 4aee4f3c
peter8-runner
#1155232388 Peter build
dev
0:15
2 months, 27 days
success #5948770682 master f1b70b0f
godaddy1-assembler
#1141342523 Peter deploy
dev
0:31
3 months, 7 days
success #5948770679 master f1b70b0f
godaddy1-assembler
#1141342523 Peter deploy
dev
0:24
3 months, 7 days
success #5948770677 master f1b70b0f
peter8-runner
#1141342523 Peter deploy
dev
0:25
3 months, 7 days
success #5948770673 master f1b70b0f
peter8-runner
#1141342523 Peter build
dev
0:14
3 months, 7 days
success #5929311893 master 0d03bfc5
godaddy1-assembler
#1138297222 Peter deploy
fixed wrong decode imm in c.ld
0:31
3 months, 10 days
success #5929311890 master 0d03bfc5
godaddy1-assembler
#1138297222 Peter deploy
fixed wrong decode imm in c.ld
0:24
3 months, 10 days
success #5929311889 master 0d03bfc5
peter8-runner
#1138297222 Peter deploy
fixed wrong decode imm in c.ld
0:21
3 months, 10 days
success #5929311888 master 0d03bfc5
peter8-runner
#1138297222 Peter build
fixed wrong decode imm in c.ld
0:14
3 months, 10 days
success #5928009746 optimize 4390e53e
godaddy1-assembler
#1138078350 Peter deploy
dev
0:31
3 months, 10 days
success #5928009745 optimize 4390e53e
godaddy1-assembler
#1138078350 Peter deploy
dev
0:23
3 months, 10 days
success #5928009744 optimize 4390e53e
peter8-runner
#1138078350 Peter deploy
dev
0:25
3 months, 10 days
success #5928009742 optimize 4390e53e
peter8-runner
#1138078350 Peter build
dev
0:15
3 months, 10 days
success #5925986067 master 877ffa83
godaddy1-assembler
#1137649455 Peter deploy
dev
0:32
3 months, 11 days
success #5925986066 master 877ffa83
godaddy1-assembler
#1137649455 Peter deploy
dev
0:22
3 months, 11 days
success #5925986065 master 877ffa83
peter8-runner
#1137649455 Peter deploy
dev
0:21
3 months, 11 days
success #5925986064 master 877ffa83
peter8-runner
#1137649455 Peter build
dev
0:14
3 months, 11 days
success #5925582994 master 59e21d66
godaddy1-assembler
#1137551660 Peter deploy
dev
0:30
3 months, 11 days
success #5925582993 master 59e21d66
godaddy1-assembler
#1137551660 Peter deploy
dev
0:23
3 months, 11 days
success #5925582992 master 59e21d66
peter8-runner
#1137551660 Peter deploy
dev
0:25
3 months, 11 days
success #5925582991 master 59e21d66
peter8-runner
#1137551660 Peter build
dev
0:15
3 months, 11 days
success #5854990430 optimize 3213b9f2
godaddy1-assembler
#1125963502 Peter deploy
dev
0:35
3 months, 21 days
success #5854990429 optimize 3213b9f2
godaddy1-assembler
#1125963502 Peter deploy
dev
0:29
3 months, 21 days
success #5854990428 optimize 3213b9f2
peter8-runner
#1125963502 Peter deploy
dev
0:26
3 months, 21 days
success #5854990426 optimize 3213b9f2
peter8-runner
#1125963502 Peter build
dev
0:14
3 months, 21 days
success #5775700845 master 5f01a31e
godaddy1-assembler
#1111278584 Peter deploy
Merge branch 'optimize' into 'master'

Optimize

See merge request quantr/toolchain/Assembler!3
1:37
4 months, 6 days
success #5775700842 master 5f01a31e
godaddy1-assembler
#1111278584 Peter deploy
Merge branch 'optimize' into 'master'

Optimize

See merge request quantr/toolchain/Assembler!3
1:11
4 months, 6 days
success #5775700840 master 5f01a31e
peter8-runner
#1111278584 Peter deploy
Merge branch 'optimize' into 'master'

Optimize

See merge request quantr/toolchain/Assembler!3
0:20
4 months, 6 days
success #5775700838 master 5f01a31e
peter8-runner
#1111278584 Peter build
Merge branch 'optimize' into 'master'

Optimize

See merge request quantr/toolchain/Assembler!3
0:15
4 months, 6 days
success #5769740585 optimize f00d9c1b
godaddy1-assembler
#1110191904 Peter deploy
dev
0:30
4 months, 7 days
success #5769740584 optimize f00d9c1b
godaddy1-assembler
#1110191904 Peter deploy
dev
0:22
4 months, 7 days
success #5769740583 optimize f00d9c1b
peter8-runner
#1110191904 Peter deploy
dev
0:23
4 months, 7 days
success #5769740582 optimize f00d9c1b
peter8-runner
#1110191904 Peter build
dev
0:15
4 months, 7 days
success #5769629717 optimize 776faaef
godaddy1-assembler
#1110171838 Peter deploy
compile ok
0:29
4 months, 7 days
success #5769629716 optimize 776faaef
godaddy1-assembler
#1110171838 Peter deploy
compile ok
0:21
4 months, 7 days
success #5769629715 optimize 776faaef
peter8-runner
#1110171838 Peter deploy
compile ok
0:24
4 months, 7 days
success #5769629714 optimize 776faaef
peter8-runner
#1110171838 Peter build
compile ok
0:14
4 months, 7 days
skipped #5769446681 optimize d9548d05
#1110133570 Peter deploy
dev
0:0
54 years, 3 months
skipped #5769446680 optimize d9548d05
#1110133570 Peter deploy
dev
0:0
54 years, 3 months
skipped #5769446679 optimize d9548d05
#1110133570 Peter deploy
dev
0:0
54 years, 3 months
failed #5769446678 optimize d9548d05
peter8-runner
#1110133570 Peter build
dev
0:15
4 months, 7 days
skipped #5769440530 optimize fe03a669
#1110131960 Peter deploy
dev
0:0
54 years, 3 months
skipped #5769440528 optimize fe03a669
#1110131960 Peter deploy
dev
0:0
54 years, 3 months
skipped #5769440525 optimize fe03a669
#1110131960 Peter deploy
dev
0:0
54 years, 3 months
failed #5769440522 optimize fe03a669
peter8-runner
#1110131960 Peter build
dev
0:14
4 months, 7 days
success #5719447587 master 1580894e
godaddy1-assembler
#1101676823 Peter deploy
dev
0:32
4 months, 15 days
success #5719447586 master 1580894e
godaddy1-assembler
#1101676823 Peter deploy
dev
0:27
4 months, 15 days
success #5719447584 master 1580894e
peter8-runner
#1101676823 Peter deploy
dev
0:24
4 months, 15 days
success #5719447581 master 1580894e
peter8-runner
#1101676823 Peter build
dev
0:14
4 months, 15 days
failed #5600185404 master 1580894e
godaddy1-assembler
#1082266065 Peter deploy
dev
0:3
5 months, 2 days
failed #5600185402 master 1580894e
godaddy1-assembler
#1082266065 Peter deploy
dev
0:3
5 months, 2 days
success #5600185400 master 1580894e
peter8-runner
#1082266065 Peter deploy
dev
0:26
5 months, 2 days
success #5600185397 master 1580894e
peter8-runner
#1082266065 Peter build
dev
0:14
5 months, 2 days
success #4812037632 master 1580894e
godaddy1-assembler
#957116927 Peter deploy
dev
1:49
8 months, 19 days
success #4812037631 master 1580894e
godaddy1-assembler
#957116927 Peter deploy
dev
1:16
8 months, 19 days
success #4812037630 master 1580894e
peter8-runner
#957116927 Peter deploy
dev
1:2
8 months, 19 days
success #4812037629 master 1580894e
peter8-runner
#957116927 Peter build
dev
0:36
8 months, 19 days
success #4811239519 master 8b88f1cf
godaddy1-assembler
#956914545 Ronald Park deploy
dev
0:50
8 months, 19 days