c.asm
来自「开放源码的编译器open watcom 1.6.0版的源代码」· 汇编 代码 · 共 589 行 · 第 1/2 页
ASM
589 行
.386
__386__=1
STACK=0
_OS macro
_PLDT
endm
;include mdef386.inc
;grb
modstart macro modname
name modname
_TEXT segment use32 dword public 'CODE'
assume cs:_TEXT
endm
xdefp macro xsym
public xsym
endm
defp macro dsym
dsym proc near
endm
prolog macro
push EBP
mov EBP,ESP
endm
epilog macro
pop EBP
endm
xref macro dsym
extrn dsym : near
endm
endproc macro dsym
dsym endp
endm
endmod macro
_TEXT ends
endm
datasegment macro
_DATA segment use32 dword public 'DATA'
DGROUP group _DATA
assume ds:DGROUP
endm
enddata macro
_DATA ends
endm
;grb
;include struct3.inc
; Structured macros for MASM.
; Changes:
; 86/10/30 Peter Bumbulis Original implementation.
; 87/01/06 Peter Bumbulis Fixed bug in quif.
; 87/01/28 Peter Bumbulis Added calls stuff.
; 87/09/17 Peter Bumbulis Added guess/admit.
; 87/09/24 Peter Bumbulis Fixed guess/admit.
; 87/09/29 Peter Bumbulis Fixed more bugs.
; 87/10/02 Peter Bumbulis Fixed more bugs in quif, added block labels.
; 91/06/19 D.J.Gaudet Added _loopif
; 91/07/22 D.J.Gaudet Made _loopif work on innermost loop
; 93/06/11 Mark Patchett adjusted to work with wasm
__label = 0
__depth = 0
__inner_loop = 0
_guess macro name
__depth = __depth + 1
__label = __label + 1
_set __astk,%__depth,__label,<>
__label = __label + 1
_set __estk,%__depth,__label,<>
ifnb <name>
name = __label
endif
endm
_quif macro cc,name
ifnb <name>
_set __elbl,,name,<>
_j cc,_l,%__elbl
else
_set __albl,,__astk,%__depth
_j cc,_l,%__albl
endif
endm
_quit macro name
_quif ,name
endm
_admit macro
_set __albl,,__astk,%__depth
__label = __label + 1
_set __astk,%__depth,__label,<>
_set __elbl,,__estk,%__depth
_j ,_l,%__elbl
_label _l,%__albl
endm
_endguess macro
_set __albl,,__astk,%__depth
_label _l,%__albl
_set __elbl,,__estk,%__depth
_label _l,%__elbl
__depth = __depth - 1
endm
_loop macro name
_guess name
_set __albl,,__astk,%__depth
_label _m,%__albl
_set __elbl,,__estk,%__depth
_label _m,%__elbl
_set __llbl,%__depth,%__inner_loop,<>
_set __inner_loop,,%__depth,<>
endm
_loopif macro cc,name
ifnb <name>
_set __elbl,,name,<>
_j cc,_m,%__elbl
else
_set __albl,,__astk,%__inner_loop
_j cc,_m,%__albl
endif
endm
_until macro cc
_set __albl,,__astk,%__depth
_jn cc,_m,%__albl
_set __inner_loop,,__llbl,%__depth
_endguess
endm
_endloop macro
_set __albl,,__astk,%__depth
_j ,_m,%__albl
_set __inner_loop,,__llbl,%__depth
_endguess
endm
_if macro cc
_guess
_set __albl,,__astk,%__depth
_jn cc,_l,%__albl
endm
_else macro
_admit
endm
_endif macro
_endguess
endm
_set macro base1,ext1,base2,ext2
base1&ext1 = base2&ext2
endm
_label macro base,ext
base&ext:
endm
_j macro cc,base,ext
j&cc base&ext
endm
_jn macro cc,base,ext
jn&cc base&ext
endm
jnna macro label
ja label
endm
jnnae macro label
jae label
endm
jnnb macro label
jb label
endm
jnnbe macro label
jbe label
endm
jnnc macro label
jc label
endm
jnne macro label
je label
endm
jnng macro label
jg label
endm
jnnge macro label
jge label
endm
jnnl macro label
jl label
endm
jnnle macro label
jle label
endm
jnno macro label
jo label
endm
jnnp macro label
jp label
endm
jnns macro label
js label
endm
jnnz macro label
jz label
endm
jnpe macro label
jpo label
endm
jnpo macro label
jpe label
endm
j macro label
jmp short label
endm
jn macro label
nop
endm
_shl macro reg,count
add reg,reg
endm
_rcl macro reg,count
adc reg,reg
endm
modstart _386sqrt
;
;
;
xdefp __sqrtd
;
; double __sqrtd( double EDX EAX );
;
defp __sqrtd
push EBX ; save EBX
sub ESP,12 ; allocate space for long double
mov EBX,ESP ; point EBX to long double
call __FDLD ; convert double to long double
mov EAX,ESP ; point to long double
call __sqrt ; calculate square root
mov EAX,ESP ; point to long double
call __LDFD ; convert it to double
add ESP,12 ; remove long double from stack
pop EBX ; restore EBX
ret ; return
endproc __sqrtd
defp __Exception_HNDLR
ret ; return
endproc __Exception_HNDLR
;include xception.inc
; status word fields
; exception bits (sticky) (nyi)
SW_IE = 0001H
SW_DE = 0002H
SW_ZE = 0004H
SW_OE = 0008H
SW_UE = 0010H
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?