diff options
| -rw-r--r-- | test/arch/x86/unit/mn_daa.py | 76 | ||||
| -rw-r--r-- | test/arch/x86/unit/mn_das.py | 106 | ||||
| -rw-r--r-- | test/test_all.py | 2 |
3 files changed, 184 insertions, 0 deletions
diff --git a/test/arch/x86/unit/mn_daa.py b/test/arch/x86/unit/mn_daa.py new file mode 100644 index 00000000..cb96a22b --- /dev/null +++ b/test/arch/x86/unit/mn_daa.py @@ -0,0 +1,76 @@ +#! /usr/bin/env python +from asm_test import Asm_Test + + +class Test_DAA(Asm_Test): + TXT = ''' + main: + MOV EBP, ESP + LEA ESI, DWORD PTR [array_al] + loop: + + ; load original cf + LODSB + MOV BL, AL + ; load original af + LODSB + SHL AL, 4 + OR AL, BL + MOV AH, AL + SAHF + ; load original al + LODSB + + DAA + MOV BL, AL + + LAHF + MOV CL, AH + + ; test cf + LODSB + MOV DL, CL + AND DL, 1 + CMP DL, AL + JNZ BAD + + MOV DL, CL + SHR DL, 4 + AND DL, 1 + ; test af + LODSB + CMP DL, AL + JNZ BAD + + ; test value + LODSB + CMP AL, BL + JNZ BAD + + CMP ESI, array_al_end + JB loop + + + end: + RET + +BAD: + INT 0x3 + RET + +array_al: +.byte 0, 1, 0x08, 0, 1, 0x0E +.byte 0, 1, 0x09, 0, 1, 0x0F +.byte 0, 1, 0x0A, 0, 1, 0x10 +.byte 0, 1, 0x98, 0, 1, 0x9E +.byte 0, 1, 0x99, 0, 1, 0x9F +.byte 0, 1, 0x9A, 1, 1, 0x00 +array_al_end: +.long 0 + ''' + def check(self): + pass + + +if __name__ == "__main__": + [test()() for test in [Test_DAA]] diff --git a/test/arch/x86/unit/mn_das.py b/test/arch/x86/unit/mn_das.py new file mode 100644 index 00000000..ba84abdd --- /dev/null +++ b/test/arch/x86/unit/mn_das.py @@ -0,0 +1,106 @@ +#! /usr/bin/env python +from asm_test import Asm_Test + + +class Test_DAS(Asm_Test): + TXT = ''' + main: + MOV EBP, ESP + LEA ESI, DWORD PTR [array_al] + loop: + + ; load original cf + LODSB + MOV BL, AL + ; load original af + LODSB + SHL AL, 4 + OR AL, BL + MOV AH, AL + SAHF + ; load original al + LODSB + + DAS + MOV BL, AL + + LAHF + MOV CL, AH + + ; test cf + LODSB + MOV DL, CL + AND DL, 1 + CMP DL, AL + JNZ BAD + + MOV DL, CL + SHR DL, 4 + AND DL, 1 + ; test af + LODSB + CMP DL, AL + JNZ BAD + + ; test value + LODSB + CMP AL, BL + JNZ BAD + + CMP ESI, array_al_end + JB loop + + + end: + RET + +BAD: + INT 0x3 + RET + +array_al: +.byte 0, 0, 0x05, 0, 0, 0x05 +.byte 0, 1, 0x05, 1, 1, 0xFF +.byte 1, 0, 0x05, 1, 0, 0xA5 +.byte 1, 1, 0x05, 1, 1, 0x9F +.byte 0, 0, 0x06, 0, 0, 0x06 +.byte 0, 1, 0x06, 0, 1, 0x00 +.byte 1, 0, 0x06, 1, 0, 0xA6 +.byte 1, 1, 0x06, 1, 1, 0xA0 +.byte 0, 0, 0x07, 0, 0, 0x07 +.byte 0, 1, 0x07, 0, 1, 0x01 +.byte 1, 0, 0x07, 1, 0, 0xA7 +.byte 1, 1, 0x07, 1, 1, 0xA1 +.byte 0, 0, 0x08, 0, 0, 0x08 +.byte 0, 1, 0x08, 0, 1, 0x02 +.byte 1, 0, 0x08, 1, 0, 0xA8 +.byte 1, 1, 0x08, 1, 1, 0xA2 +.byte 0, 0, 0x09, 0, 0, 0x09 +.byte 0, 1, 0x09, 0, 1, 0x03 +.byte 1, 0, 0x09, 1, 0, 0xA9 +.byte 1, 1, 0x09, 1, 1, 0xA3 +.byte 0, 0, 0x0A, 0, 1, 0x04 +.byte 0, 1, 0x0A, 0, 1, 0x04 +.byte 1, 0, 0x0A, 1, 1, 0xA4 +.byte 1, 1, 0x0A, 1, 1, 0xA4 +.byte 0, 0, 0x98, 0, 0, 0x98 +.byte 0, 1, 0x98, 0, 1, 0x92 +.byte 1, 0, 0x98, 1, 0, 0x38 +.byte 1, 1, 0x98, 1, 1, 0x32 +.byte 0, 0, 0x99, 0, 0, 0x99 +.byte 0, 1, 0x99, 0, 1, 0x93 +.byte 1, 0, 0x99, 1, 0, 0x39 +.byte 1, 1, 0x99, 1, 1, 0x33 +.byte 0, 0, 0x9A, 1, 1, 0x34 +.byte 0, 1, 0x9A, 1, 1, 0x34 +.byte 1, 0, 0x9A, 1, 1, 0x34 +.byte 1, 1, 0x9A, 1, 1, 0x34 +array_al_end: +.long 0 + ''' + def check(self): + pass + + +if __name__ == "__main__": + [test()() for test in [Test_DAS]] diff --git a/test/test_all.py b/test/test_all.py index f59e3781..55e69e70 100644 --- a/test/test_all.py +++ b/test/test_all.py @@ -36,6 +36,8 @@ for script in ["x86/sem.py", "x86/unit/mn_strings.py", "x86/unit/mn_float.py", "x86/unit/mn_stack.py", + "x86/unit/mn_daa.py", + "x86/unit/mn_das.py", "arm/arch.py", "arm/sem.py", "msp430/arch.py", |