about summary refs log tree commit diff stats
path: root/test/arch/x86/unit/mn_das.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/arch/x86/unit/mn_das.py')
-rw-r--r--test/arch/x86/unit/mn_das.py106
1 files changed, 106 insertions, 0 deletions
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]]