From a80abb6ed3d8e6b54858116a06cbfc1ea8cfa134 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 6 Mar 2020 22:11:36 -0800 Subject: [PATCH] Implement unit tests for the group 1 primary group table --- unittests/ASM/PrimaryGroup/1_80_00.asm | 23 +++++++ unittests/ASM/PrimaryGroup/1_80_01.asm | 23 +++++++ unittests/ASM/PrimaryGroup/1_80_02.asm | 27 ++++++++ unittests/ASM/PrimaryGroup/1_80_03.asm | 27 ++++++++ unittests/ASM/PrimaryGroup/1_80_04.asm | 23 +++++++ unittests/ASM/PrimaryGroup/1_80_05.asm | 22 ++++++ unittests/ASM/PrimaryGroup/1_80_06.asm | 22 ++++++ unittests/ASM/PrimaryGroup/1_80_07.asm | 35 ++++++++++ unittests/ASM/PrimaryGroup/1_81_00.asm | 37 ++++++++++ unittests/ASM/PrimaryGroup/1_81_01.asm | 38 +++++++++++ unittests/ASM/PrimaryGroup/1_81_02.asm | 49 ++++++++++++++ unittests/ASM/PrimaryGroup/1_81_03.asm | 49 ++++++++++++++ unittests/ASM/PrimaryGroup/1_81_04.asm | 37 ++++++++++ unittests/ASM/PrimaryGroup/1_81_05.asm | 36 ++++++++++ unittests/ASM/PrimaryGroup/1_81_06.asm | 36 ++++++++++ unittests/ASM/PrimaryGroup/1_81_07.asm | 93 ++++++++++++++++++++++++++ unittests/ASM/PrimaryGroup/1_83_00.asm | 31 +++++++++ unittests/ASM/PrimaryGroup/1_83_01.asm | 31 +++++++++ unittests/ASM/PrimaryGroup/1_83_02.asm | 41 ++++++++++++ unittests/ASM/PrimaryGroup/1_83_03.asm | 41 ++++++++++++ unittests/ASM/PrimaryGroup/1_83_04.asm | 31 +++++++++ unittests/ASM/PrimaryGroup/1_83_05.asm | 31 +++++++++ unittests/ASM/PrimaryGroup/1_83_06.asm | 31 +++++++++ unittests/ASM/PrimaryGroup/1_83_07.asm | 73 ++++++++++++++++++++ 24 files changed, 887 insertions(+) create mode 100644 unittests/ASM/PrimaryGroup/1_80_00.asm create mode 100644 unittests/ASM/PrimaryGroup/1_80_01.asm create mode 100644 unittests/ASM/PrimaryGroup/1_80_02.asm create mode 100644 unittests/ASM/PrimaryGroup/1_80_03.asm create mode 100644 unittests/ASM/PrimaryGroup/1_80_04.asm create mode 100644 unittests/ASM/PrimaryGroup/1_80_05.asm create mode 100644 unittests/ASM/PrimaryGroup/1_80_06.asm create mode 100644 unittests/ASM/PrimaryGroup/1_80_07.asm create mode 100644 unittests/ASM/PrimaryGroup/1_81_00.asm create mode 100644 unittests/ASM/PrimaryGroup/1_81_01.asm create mode 100644 unittests/ASM/PrimaryGroup/1_81_02.asm create mode 100644 unittests/ASM/PrimaryGroup/1_81_03.asm create mode 100644 unittests/ASM/PrimaryGroup/1_81_04.asm create mode 100644 unittests/ASM/PrimaryGroup/1_81_05.asm create mode 100644 unittests/ASM/PrimaryGroup/1_81_06.asm create mode 100644 unittests/ASM/PrimaryGroup/1_81_07.asm create mode 100644 unittests/ASM/PrimaryGroup/1_83_00.asm create mode 100644 unittests/ASM/PrimaryGroup/1_83_01.asm create mode 100644 unittests/ASM/PrimaryGroup/1_83_02.asm create mode 100644 unittests/ASM/PrimaryGroup/1_83_03.asm create mode 100644 unittests/ASM/PrimaryGroup/1_83_04.asm create mode 100644 unittests/ASM/PrimaryGroup/1_83_05.asm create mode 100644 unittests/ASM/PrimaryGroup/1_83_06.asm create mode 100644 unittests/ASM/PrimaryGroup/1_83_07.asm diff --git a/unittests/ASM/PrimaryGroup/1_80_00.asm b/unittests/ASM/PrimaryGroup/1_80_00.asm new file mode 100644 index 000000000..609bc4e8f --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_80_00.asm @@ -0,0 +1,23 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x414243444546A848" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +add byte [rdx + 8 * 0 + 1], 0x61 + +mov rax, [rdx + 8 * 0] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_80_01.asm b/unittests/ASM/PrimaryGroup/1_80_01.asm new file mode 100644 index 000000000..a7a6273d3 --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_80_01.asm @@ -0,0 +1,23 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434445466748" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +or byte [rdx + 8 * 0 + 1], 0x61 + +mov rax, [rdx + 8 * 0] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_80_02.asm b/unittests/ASM/PrimaryGroup/1_80_02.asm new file mode 100644 index 000000000..815727ebf --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_80_02.asm @@ -0,0 +1,27 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434445A8A848" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +clc +adc byte [rdx + 8 * 0 + 1], 0x61 + +stc +adc byte [rdx + 8 * 0 + 2], 0x61 + +mov rax, [rdx + 8 * 0] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_80_03.asm b/unittests/ASM/PrimaryGroup/1_80_03.asm new file mode 100644 index 000000000..f386f93a1 --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_80_03.asm @@ -0,0 +1,27 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434445E4E648" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +clc +sbb byte [rdx + 8 * 0 + 1], 0x61 + +stc +sbb byte [rdx + 8 * 0 + 2], 0x61 + +mov rax, [rdx + 8 * 0] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_80_04.asm b/unittests/ASM/PrimaryGroup/1_80_04.asm new file mode 100644 index 000000000..675e401e1 --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_80_04.asm @@ -0,0 +1,23 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434445464148" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +and byte [rdx + 8 * 0 + 1], 0x61 + +mov rax, [rdx + 8 * 0] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_80_05.asm b/unittests/ASM/PrimaryGroup/1_80_05.asm new file mode 100644 index 000000000..4d956579a --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_80_05.asm @@ -0,0 +1,22 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x414243444546E648" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +sub byte [rdx + 8 * 0 + 1], 0x61 +mov rax, [rdx + 8 * 0] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_80_06.asm b/unittests/ASM/PrimaryGroup/1_80_06.asm new file mode 100644 index 000000000..e95e0cf09 --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_80_06.asm @@ -0,0 +1,22 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434445462648" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +xor byte [rdx + 8 * 0 + 1], 0x61 +mov rax, [rdx + 8 * 0] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_80_07.asm b/unittests/ASM/PrimaryGroup/1_80_07.asm new file mode 100644 index 000000000..142bd7f61 --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_80_07.asm @@ -0,0 +1,35 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434445468348" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax + +cmp byte [rdx + 8 * 0 + 1], 0x61 +; cmp = 0x47 - 0x61 = 0xE6 +; 0: CF - 00000001 +; 1: - 00000010 +; 2: PF - 00000000 +; 3: 0 - 00000000 +; 4: AF - 00000000 +; 5: 0 - 00000000 +; 6: ZF - 00000000 +; 7: SF - 10000000 +; ================ +; 10000011 +; OF: LAHF doesn't load - 0 +mov rax, [rdx + 8 * 0] +lahf + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_81_00.asm b/unittests/ASM/PrimaryGroup/1_81_00.asm new file mode 100644 index 000000000..efbcfa44b --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_81_00.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x41424344A6A84748", + "RBX": "0x51525354B6B8BABC", + "RCX": "0x61626364C6C8CACC", + "RDX": "0x6162636465666668" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 3], rax + +add word [rdx + 8 * 0 + 2], 0x6162 +add dword [rdx + 8 * 1 + 0], 0x61626364 +add qword [rdx + 8 * 2 + 0], 0x61626364 + +add qword [rdx + 8 * 3 + 0], -256 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] +mov rdx, [rdx + 8 * 3] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_81_01.asm b/unittests/ASM/PrimaryGroup/1_81_01.asm new file mode 100644 index 000000000..36e9a0cbf --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_81_01.asm @@ -0,0 +1,38 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434465664748", + "RBX": "0x515253547576777C", + "RCX": "0x616263646566676C", + "RDX": "0xFFFFFFFFFFFFFF68" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 3], rax + +or word [rdx + 8 * 0 + 2], 0x6162 +or dword [rdx + 8 * 1 + 0], 0x61626364 +or qword [rdx + 8 * 2 + 0], 0x61626364 + +or qword [rdx + 8 * 3 + 0], -256 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] +mov rdx, [rdx + 8 * 3] + + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_81_02.asm b/unittests/ASM/PrimaryGroup/1_81_02.asm new file mode 100644 index 000000000..32d72efee --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_81_02.asm @@ -0,0 +1,49 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142A4A7A6A84748", + "RBX": "0x51525354181B1E21", + "RCX": "0x61626365282B2E31", + "RDX": "0x6162636465666569" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 3], rax + +clc +adc word [rdx + 8 * 0 + 2], 0x6162 +clc +adc dword [rdx + 8 * 1 + 0], 0x61626364 +clc +adc qword [rdx + 8 * 2 + 0], 0x61626364 +clc +adc qword [rdx + 8 * 3 + 0], -256 + +stc +adc word [rdx + 8 * 0 + 4], 0x6162 +stc +adc dword [rdx + 8 * 1 + 0], 0x61626364 +stc +adc qword [rdx + 8 * 2 + 0], 0x61626364 +stc +adc qword [rdx + 8 * 3 + 0], -256 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] +mov rdx, [rdx + 8 * 3] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_81_03.asm b/unittests/ASM/PrimaryGroup/1_81_03.asm new file mode 100644 index 000000000..cf7498117 --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_81_03.asm @@ -0,0 +1,49 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142E1E1E3E44748", + "RBX": "0x515253549291908F", + "RCX": "0x61626363A2A1A09F", + "RDX": "0x6162636465666967" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 3], rax + +clc +sbb word [rdx + 8 * 0 + 2], 0x6162 +clc +sbb dword [rdx + 8 * 1 + 0], 0x61626364 +clc +sbb qword [rdx + 8 * 2 + 0], 0x61626364 +clc +sbb qword [rdx + 8 * 3 + 0], -256 + +stc +sbb word [rdx + 8 * 0 + 4], 0x6162 +stc +sbb dword [rdx + 8 * 1 + 0], 0x61626364 +stc +sbb qword [rdx + 8 * 2 + 0], 0x61626364 +stc +sbb qword [rdx + 8 * 3 + 0], -256 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] +mov rdx, [rdx + 8 * 3] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_81_04.asm b/unittests/ASM/PrimaryGroup/1_81_04.asm new file mode 100644 index 000000000..0449be869 --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_81_04.asm @@ -0,0 +1,37 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434441424748", + "RBX": "0x5152535441424340", + "RCX": "0x0000000061626360", + "RDX": "0x6162636465666700" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 3], rax + +and word [rdx + 8 * 0 + 2], 0x6162 +and dword [rdx + 8 * 1 + 0], 0x61626364 +and qword [rdx + 8 * 2 + 0], 0x61626364 +and qword [rdx + 8 * 3 + 0], -256 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] +mov rdx, [rdx + 8 * 3] + + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_81_05.asm b/unittests/ASM/PrimaryGroup/1_81_05.asm new file mode 100644 index 000000000..ef7e8826f --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_81_05.asm @@ -0,0 +1,36 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x41424344E3E44748", + "RBX": "0x51525354F3F3F3F4", + "RCX": "0x6162636404040404", + "RDX": "0x6162636465666868" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 3], rax + +sub word [rdx + 8 * 0 + 2], 0x6162 +sub dword [rdx + 8 * 1 + 0], 0x61626364 +sub qword [rdx + 8 * 2 + 0], 0x61626364 +sub qword [rdx + 8 * 3 + 0], -256 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] +mov rdx, [rdx + 8 * 3] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_81_06.asm b/unittests/ASM/PrimaryGroup/1_81_06.asm new file mode 100644 index 000000000..ebc6b1b6c --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_81_06.asm @@ -0,0 +1,36 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434424244748", + "RBX": "0x515253543434343C", + "RCX": "0x616263640404040C", + "RDX": "0x9E9D9C9B9A999868" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 3], rax + +xor word [rdx + 8 * 0 + 2], 0x6162 +xor dword [rdx + 8 * 1 + 0], 0x61626364 +xor qword [rdx + 8 * 2 + 0], 0x61626364 +xor qword [rdx + 8 * 3 + 0], -256 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] +mov rdx, [rdx + 8 * 3] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_81_07.asm b/unittests/ASM/PrimaryGroup/1_81_07.asm new file mode 100644 index 000000000..5c8e3bb23 --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_81_07.asm @@ -0,0 +1,93 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x8700", + "RBX": "0x8300", + "RCX": "0x0200", + "RSI": "0x0300" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 3], rax + +cmp qword [rdx + 8 * 3 + 0], -256 +; cmp = 0x6162636465666768 - -256(0xFFFFFFFFFFFF00) = 0x6162636465666512 +; 0: CF - 00000001 +; 1: - 00000010 +; 2: PF - 00000000 +; 3: 0 - 00000000 +; 4: AF - 00000000 +; 5: 0 - 00000000 +; 6: ZF - 00000000 +; 7: SF - 00000000 +; ================ +; 00000011 +; OF: LAHF doesn't load - 0 +mov rax, 0 +lahf +mov rsi, rax + +cmp qword [rdx + 8 * 2 + 0], 0x61626364 +; cmp = 0x6162636465666768- 0x61626364 = 0x6162636404040404 +; 0: CF - 00000000 +; 1: - 00000010 +; 2: PF - 00000000 +; 3: 0 - 00000000 +; 4: AF - 00000000 +; 5: 0 - 00000000 +; 6: ZF - 00000000 +; 7: SF - 00000000 +; ================ +; 00000010 +; OF: LAHF doesn't load - 0 +mov rax, 0 +lahf +mov rcx, rax + +cmp dword [rdx + 8 * 1 + 0], 0x61626364 +; cmp = 0x55565758 - 0x61626364 = 0xF3F3F3F4 +; 0: CF - 00000001 +; 1: - 00000010 +; 2: PF - 00000000 +; 3: 0 - 00000000 +; 4: AF - 00000000 +; 5: 0 - 00000000 +; 6: ZF - 00000000 +; 7: SF - 10000000 +; ================ +; 10000011 +; OF: LAHF doesn't load - 0 +mov rax, 0 +lahf +mov rbx, rax + +cmp word [rdx + 8 * 0 + 2], 0x6162 +; cmp = 0x4546 - 0x6162 = 0xE3E4 +; 0: CF - 00000001 +; 1: - 00000010 +; 2: PF - 00000100 +; 3: 0 - 00000000 +; 4: AF - 00000000 +; 5: 0 - 00000000 +; 6: ZF - 00000000 +; 7: SF - 10000000 +; ================ +; 10000111 +; OF: LAHF doesn't load - 0 +mov rax, 0 +lahf + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_83_00.asm b/unittests/ASM/PrimaryGroup/1_83_00.asm new file mode 100644 index 000000000..ae053d51c --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_83_00.asm @@ -0,0 +1,31 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434445464729", + "RBX": "0x5152535455565739", + "RCX": "0x6162636465666749" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax + +add word [rdx + 8 * 0 + 0], -31 +add dword [rdx + 8 * 1 + 0], -31 +add qword [rdx + 8 * 2 + 0], -31 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_83_01.asm b/unittests/ASM/PrimaryGroup/1_83_01.asm new file mode 100644 index 000000000..a493cfcae --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_83_01.asm @@ -0,0 +1,31 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x414243444546FFE9", + "RBX": "0x51525354FFFFFFF9", + "RCX": "0xFFFFFFFFFFFFFFE9" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax + +or word [rdx + 8 * 0 + 0], -31 +or dword [rdx + 8 * 1 + 0], -31 +or qword [rdx + 8 * 2 + 0], -31 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_83_02.asm b/unittests/ASM/PrimaryGroup/1_83_02.asm new file mode 100644 index 000000000..57c636dbb --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_83_02.asm @@ -0,0 +1,41 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142432645274748", + "RBX": "0x515253545556571B", + "RCX": "0x616263646566672B" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax + +clc +adc word [rdx + 8 * 0 + 2], -31 +clc +adc dword [rdx + 8 * 1 + 0], -31 +clc +adc qword [rdx + 8 * 2 + 0], -31 + +stc +adc word [rdx + 8 * 0 + 4], -31 +stc +adc dword [rdx + 8 * 1 + 0], -31 +stc +adc qword [rdx + 8 * 2 + 0], -31 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_83_03.asm b/unittests/ASM/PrimaryGroup/1_83_03.asm new file mode 100644 index 000000000..133ec61a6 --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_83_03.asm @@ -0,0 +1,41 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142436245654748", + "RBX": "0x5152535455565795", + "RCX": "0x61626364656667A5" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax + +clc +sbb word [rdx + 8 * 0 + 2], -31 +clc +sbb dword [rdx + 8 * 1 + 0], -31 +clc +sbb qword [rdx + 8 * 2 + 0], -31 + +stc +sbb word [rdx + 8 * 0 + 4], -31 +stc +sbb dword [rdx + 8 * 1 + 0], -31 +stc +sbb qword [rdx + 8 * 2 + 0], -31 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_83_04.asm b/unittests/ASM/PrimaryGroup/1_83_04.asm new file mode 100644 index 000000000..10ef530e8 --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_83_04.asm @@ -0,0 +1,31 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434445464740", + "RBX": "0x5152535455565740", + "RCX": "0x6162636465666760" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax + +and word [rdx + 8 * 0 + 0], -31 +and dword [rdx + 8 * 1 + 0], -31 +and qword [rdx + 8 * 2 + 0], -31 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_83_05.asm b/unittests/ASM/PrimaryGroup/1_83_05.asm new file mode 100644 index 000000000..e4b3336be --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_83_05.asm @@ -0,0 +1,31 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x4142434445464767", + "RBX": "0x5152535455565777", + "RCX": "0x6162636465666787" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax + +sub word [rdx + 8 * 0 + 0], -31 +sub dword [rdx + 8 * 1 + 0], -31 +sub qword [rdx + 8 * 2 + 0], -31 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_83_06.asm b/unittests/ASM/PrimaryGroup/1_83_06.asm new file mode 100644 index 000000000..bb3f90d4b --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_83_06.asm @@ -0,0 +1,31 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x414243444546B8A9", + "RBX": "0x51525354AAA9A8B9", + "RCX": "0x9E9D9C9B9A999889" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax + +xor word [rdx + 8 * 0 + 0], -31 +xor dword [rdx + 8 * 1 + 0], -31 +xor qword [rdx + 8 * 2 + 0], -31 + +mov rax, [rdx + 8 * 0] +mov rbx, [rdx + 8 * 1] +mov rcx, [rdx + 8 * 2] + +hlt diff --git a/unittests/ASM/PrimaryGroup/1_83_07.asm b/unittests/ASM/PrimaryGroup/1_83_07.asm new file mode 100644 index 000000000..5ea33d2f2 --- /dev/null +++ b/unittests/ASM/PrimaryGroup/1_83_07.asm @@ -0,0 +1,73 @@ +%ifdef CONFIG +{ + "RegData": { + "RAX": "0x0700", + "RBX": "0x0700", + "RCX": "0x0700" + }, + "MemoryRegions": { + "0x100000000": "4096" + } +} +%endif + +mov rdx, 0xe0000000 + +mov rax, 0x4142434445464748 +mov [rdx + 8 * 0], rax +mov rax, 0x5152535455565758 +mov [rdx + 8 * 1], rax +mov rax, 0x6162636465666768 +mov [rdx + 8 * 2], rax + +cmp qword [rdx + 8 * 2 + 0], -31 +; cmp = 0x6162636465666768 - -31 = 0x6162636465666787 +; 0: CF - 00000001 +; 1: - 00000010 +; 2: PF - 00000100 +; 3: 0 - 00000000 +; 4: AF - 00000000 +; 5: 0 - 00000000 +; 6: ZF - 00000000 +; 7: SF - 00000000 +; ================ +; 00000111 +; OF: LAHF doesn't load - 0 +mov rax, 0 +lahf +mov rcx, rax + +cmp dword [rdx + 8 * 1 + 0], -31 +; cmp = 0x55565758 - -31 = 0x55565777 +; 0: CF - 00000001 +; 1: - 00000010 +; 2: PF - 00000100 +; 3: 0 - 00000000 +; 4: AF - 00000000 +; 5: 0 - 00000000 +; 6: ZF - 00000000 +; 7: SF - 00000000 +; ================ +; 00000111 +; OF: LAHF doesn't load - 0 +mov rax, 0 +lahf +mov rbx, rax + +cmp word [rdx + 8 * 0 + 2], -31 +; cmp = 0x4546 - -31 = 0x4577 +; 0: CF - 00000001 +; 1: - 00000010 +; 2: PF - 00000100 +; 3: 0 - 00000000 +; 4: AF - 00000000 +; 5: 0 - 00000000 +; 6: ZF - 00000000 +; 7: SF - 00000000 +; ================ +; 00000111 +; OF: LAHF doesn't load - 0 +mov rax, 0 +lahf + +hlt