1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
#! /usr/bin/env python2
import sys
from asm_test import Asm_Test_32
class Test_DAA(Asm_Test_32):
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(*sys.argv[1:])() for test in [Test_DAA]]
|