|
|
1.1 root 1: ////////
2: /
3: / Intel 8086 floating point.
4: / assigned subtract from a double float.
5: / small model.
6: /
7: ////////
8:
9: .globl ddlsub
10: .globl ddrsub
11: .globl _fpac_
12: .globl dlsub
13:
14: ////////
15: /
16: / ** ddlsub -- assigned double subtract (lvalue)
17: / ** ddrsub -- assigned double subtract (rvalue)
18: /
19: / these two routines are called directly by the compiler to do double
20: / floating assigned subtract. these small routines make the compiler
21: / simpler, and get rid of a very bulky code sequence that would have
22: / to be generated for a fairly uncommon operation.
23: /
24: / compiler calling sequences:
25: / push <right double rvalue>
26: / lea ax,<left double lvalue>
27: / push ax
28: / call ddrsub
29: / add sp,10
30: /
31: / lea ax,<right double lvalue>
32: / push ax
33: / lea ax,<left double lvalue>
34: / push ax
35: / call ddlsub
36: / add sp,4
37: /
38: / outputs:
39: / _fpac_=result.
40: /
41: / uses:
42: / ax, bx, cx, dx
43: /
44: ////////
45:
46: pa = 8 / pointer to left
47: pb = 10 / pointer to right
48: b = 10 / right
49:
50: ddlsub: push si / standard
51: push di / c
52: push bp / function
53: mov bp,sp / entry
54:
55: mov ax,pb(bp) / ax=pointer to right operand
56: jmp l0 / finish in common code
57:
58: ddrsub: push si / standard
59: push di / c
60: push bp / function
61: mov bp,sp / entry
62:
63: lea ax,b(bp) / ax=pointer to right operand
64:
65: l0: push ax / second arg is right lvalue.
66: mov si,pa(bp) / si=pointer to left.
67: push 6(si) / push
68: push 4(si) / the
69: push 2(si) / left
70: push 0(si) / rvalue.
71: call dlsub / do the subtract.
72: add sp,$10 / pop args
73:
74: mov ax,_fpac_+6 / copy
75: mov 6(si),ax / the
76: mov ax,_fpac_+4 / result
77: mov 4(si),ax / back
78: mov ax,_fpac_+2 / to
79: mov 2(si),ax / the
80: mov ax,_fpac_+0 / left
81: mov 0(si),ax / operand.
82:
83: pop bp / standard
84: pop di / c
85: pop si / function
86: ret / return.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.