加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

lisp纯函数的源代码

(2013-11-06 21:19:10)

[bits 64]     
lisp:                    jmp c400
        db 'LISP 0.00.01 (2013.11.6)',0dh,0ah
        db 'Copyfree (C) 1982 to 2013 MY_SELF',0dh,0ah
        db 'Licensed by OPEN',0dh,0ah      
d0:
        dq 0
d2:
        dq 0
d4:
        dq 0
d6:
        dq 0
d8:
        dq 0
d14:
        dq 0
d18:
        dq 0 
d22:            ;sp
        dq 0
d24:
        dq 0
d26:
        dq 0
d28:
        dq 0
d2a:
        dq -1 ;0
d2c:
        dq 0
d30:
        dq 0
d32:
        dq 0
d34:
        dq 0
d36:
        dq 0
d38:           ;5f4b
        dq 0
d3a:
        dq 0
d3c:
        dq 0
d3e:
        dq 0
d40:
        dq 0
d42:
        dq 0
d46:
        dq 0
d4e:
        dq 0
d50:
        dq 0
d52:
        dq 0
d56:
        dq 0
d5a:
        dq 0
d5b:
        dq 0
d5c:
        dq 0
d5e:
        dq 0
d5d:
        dq 0
d68:
        dq 0 ;db 0
d6a:
        dq 0
d6c:
        dq 0
d6e:
        dq 0
d70:
        dq 0
d72:
        dq 0
d74:        ;display
        dq 0
d76:
        dq 0
d78:        ;display
        dq 0
d7a:
        dq 0
d7e:
        dq 0
d80:
        dq 0
d82:
        db 0
d83:
        db 0
d84:        ;al
        db 0
d85:
        db 0
d86:
        db 0
d87:
        db 0
d88:
        db 0
d89:
        db 0 ;dq 0
d8e:
        dq 0
d90:
        db 0
d91:
        db 0
d92:
        db 0
d93:                ;keybord buf
        db 0
d94:
        times 111 db 0

d236:
        dq 0
  d258:    ;read-char
        dq 0
  d260:   ;rds
        dq 0
  d268:         ;wrs
        dq 0
d26a:
        dq 0
d272:
        dq 0
  d278: ;break
        dq 0
d27e: 
        dq 0
d284:
        dq 0
d28a:
        dq 0
d298:
        dq 0
  d2a8: ;throw
        dq 0
d2aa:
        dq 0
d2b4:
        dq 0
d2b6:
        dq 0
d2ba:
        dq 0
d2f2:
        dq 0
d300:
        dq 0
d306:
        dq 0
d34c:
        dq 0
d34d:
        dq 0
d352:
        dq 0
d35d:
        dq 0
d447:
        dq 0
d44e:
        dq 0
d7e6e:

d7e70:

d7e7c:
        dq 3000h  
d7e90:
        dq c1a8            ;100
        dq 3
        db 'nil'

        dq c1a8             ;108
        dq 1
        db 'T'    

        dq c1a8         ;110
        dq 1
        db 't'

        dq c1a8         ;118
        dq 1
        db 't'

        dq c1a8          ;120
        dq 1
        db 't' 

        dq c1ac      ;128
        dq 5
        db 'quote'

        dq c199b      ;130
        dq 4
        db 'atom'

        dq c1b15      ;138
        dq 2
        db 'eq' 

        dq cdfd     ;140
        dq 3
        db 'car'

        dq ce05     ;148
        dq 3
        db 'cdr'      

        dq ce0f    ;150
        dq 4
        db 'caar'

        dq ce19     ;158
        dq 4
        db 'cdar'

        dq ce25    ;160
        dq 4
        db 'cadr'

        dq ce31     ;168
        dq 4
        db 'cddr'

        dq ce41   ;170
        dq 5
        db 'caaar'

        dq ce4b    ;178
        dq 5
        db 'cdaar'

        dq ce57    ;180
        dq 5
        db 'cadar'

        dq ce63    ;188
        dq 5
        db 'cddar'

        dq ce6f    ;190
        dq 5
        db 'caadr'

        dq ce7b    ;198
        dq 5
        db 'cdadr'

        dq ce87    ;1a0
        dq 5
        db 'caddr'

        dq ce93    ;1a8
        dq 5
        db 'cdddr'

        dq cea1    ;1b0
        dq 6
        db 'caaaar' 

        dq ceb1    ;1b8
        dq 6
        db 'cdaaar'

        dq cec1   ;1c0
        dq 6
        db 'cadaar'

        dq ced1    ;1c8
        dq 6
        db 'cddaar'

        dq cee1        ;1d0
        dq 6
        db 'caadar'

        dq cef1          ;1d8
        dq 6
        db 'cdadar'

        dq cf03             ;1e0
        dq 6
        db 'caddar'

        dq cf15                 ;1e8
        dq 6
        db 'cdddar'

        dq cea9  ;1f0
        dq 6
        db 'caaadr'

        dq ceb9       ;1f8
        dq 6
        db 'cdaadr'

        dq cec9          ;200
        dq 6
        db 'cadcdr'

        dq ced9              ;208
        dq 6
        db 'cddadr'

        dq cee9  ;210
        dq 6
        db 'caaddr'

        dq cef9   ;218
        dq 6
        db 'cdaddr'

        dq ce52       ;220
        dq 6
        db 'cadddr'

        dq cf1d          ;228
        dq 6
        db 'cddddr'

        dq cf27                  ;230
        dq 4
        db 'last'

        dq c1347   ;238
        dq 4
        db 'cons'

        dq c13c5       ;240
        dq 4
        db 'list'

        dq c1b4      ;248
        dq 4
        db 'cond'

        dq c1a8          ;250
        dq 1
        db 't'

        dq c4ea7          ;258
        dq 9
        db 'read-char' ;272

        dq 0 ;c42bf          ;260
        dq 3
        db 'rds'       ;26a

        dq c43c7          ;268
        dq 3
        db 'wrs'       ;298
       
        dq c6089          ;270
        dq 9
        db 'undefined'             

        dq c60d9     ;278
        dq 5
        db 'break'      

        dq c5f4b        ;280
        dq 6
        db 'driver'             

        dq c4d55           288
        dq 4
        db 'read'

        dq c659f            ; 290
        dq 4
        db 'eval'

        dq c548d         ;298
        dq 5
        db 'print'

        dq c5fef      ;2a0
        dq 6
        db 'return'

        dq c5ff9        ;2a8
        dq 5
        db 'throw'               

        dq c5fdb        ;2b0
        dq 6
        db 'system'   

        dq c1a8          ;2b8
        dq 1
        db 't'

        dq c1a8          ;2c0
        dq 1
        db 't'

        dq c1a8          ;2c8
        dq 1
        db 't'
       
        dq c1a8          ;2d0
        dq 1
        db 't'            

        dq c1a8          ;2d8
        dq 1
        db 't'

        dq c1a8          ;2e0
        dq 1
        db 't'

        dq c1a8          ;2e8
        dq 1
        db 't'
       
        dq c1a8          ;2f0
        dq 1
        db 't'           

        dq 0            ;2f8
        dq 4
        db 'null'

        dq c19c5      ;300
        dq 3
        db 'not'

        dq 0 ;c1c8      ;308
        dq 3
        db 'and'

        dq 0 ;c1cc      ;310
        dq 2
        db 'or'

        dq 0 ;c13eb    ;318
        dq 6
        db 'append'

        dq 0    ;320
        dq 4
        db 'pair'

        dq cf85   ;328
        dq 5
        db 'assoc'

        dq c163d   ;330
        dq 5
        db 'subst'   

        dq c1453   ;338
        dq 9
        db 'copy-list'

        dq c14a7  ;340
        dq 9
        db 'copy-tree'   

        dq c1a8   ;348
        dq 6
        db 'lambda'

        dq c1a8   ;350
        dq 7
        db 'nlambda'

        dq c1a8   ;358
        dq 5
        db 'macro'

        dq c1a8   ;360
        dq 7
        db 'special'

        dq c1f0   ;368
        dq 5
        db 'defun'

        dq c1f4   ;370
        dq 8
        db 'defmacro'

        dq c20bf          ;378
        dq 4      ;200
        db 'putd'

        dq c6495          ;380
        dq 11
        db 'macroexpand'

        dq c64a1          ;388
        dq 13
        db 'macroexpand-1'
       
        dq c1a8          ;390
        dq 1
        db 't'            

        dq c1a8          ;398
        dq 1
        db 't'

        dq c1a8          ;3a0
        dq 1
        db 't'

        dq c1a8          ;3a8
        dq 1
        db 't'
       
        dq c1a8          ;3b0
        dq 1
        db 't'           

        dq c1a8          ;3b8
        dq 1
        db 't'
       
        dq c1a8          ;3c0
        dq 1
        db 't'             

        dq 0    ;3c8
        dq 3
        db 'max'

        dq 0        ;3d0
        dq 3
        db 'min'

        dq 0 ;c2c0b     ;3d8
        dq 1
        db '+'

        dq 0      ;3e0
        dq 1
        db '-'

        dq 0      ;3e8
        dq 1
        db '*'

        dq 0        ;3f0
        dq 1
        db 2fh ;''

        dq c1a8          ;3f8
        dq 1
        db 't'

        dq 0 ;c2b9b    ;400
        dq 3
        db 'abs'  

        dq c1a8         
        dq 1
        db 't'

        dq c1a8         
        dq 1
        db 't'

        dq c1a8         
        dq 1
        db 't'
       
        dq c1a8         
        dq 1
        db 't'          
;new keyword
        times 111 db 0
c801a:  ; keybord buf
        times 111 db 0   
c28:
        dq 0
c2a:
        dq 0
c2c:
        dq 0,0,0
c1a8:          
        dq c67f5
c1aa:           ;nil t lambda nlambda macro special
        dq c65ca
c1ac:          
        dq c7b9
c1ae:           ;quote
        dq ce2d
c1b0:
        dq 0 ;c816
c1b2:           ;comment
        dq 0 ;c816
c1b4:
        dq c7bd
c1b6:           ;cond
        dq c7e4
c1f0:       
        dq c2136
c1f2:           ;defun
        dq c213c
c1f4:
        dq c217c
c1f6:           ;defmacro
        dq c2182
c1f8:
        dq 0,0,0,0

c200:           ;es:0000
        db 0,0,0,0,0,0,0,0  ;ascii 0-7
        db 0,1,1,0,1,1,0,0  ;8-f  tab a d
        db 0,0,0,0,0,0,0,0  ;10-17
        db 0,0,0,10h,0,0,0,0 ;18-1f
        db 1,8,28h,8,8,8,8,28h ;20-27 !"#$%&'
        db '(',28h,8,8,28h,8,8,8 ;27-2f  ()*+ , -. 2f
        db 0,0,0,0,0,0,0,0  ;30-37
        db 0,0,8,80h,8,8,8,8 ;38-3f :;<=>?
        db 8,0,0,0,0,0,0,0 ;40-47 ;@
        db 0,0,0,0,0,0,0,0 ;48-4f
        db 0,0,0,0,0,0,0,0 ;50-57
        db 0,0,0,8,0ah,28h,8,8 ;58-5f [ 5c] ^_
        db 8,0,0,0,0,0,0,0 ;60-67 `
        db 0,0,0,0,0,0,0,0 ;68-6f
        db 0,0,0,0,0,0,0,0 ;70-77
        db 0,0,0,8,0ch,8,8,0 ;78-7f {|}~
c300:
c301:
        dq c4c03
      db '('
c302:
        dq c4c3b
      db ';'
c303:
        dq c4cf7
      db 22h ;"
c304:
        dq c4c17
        dq 0
c340:
        dq 0
c34f:
        dq 0
c353:
        dq 0
c356:
        db 0
c357:
        db 0
c35d:
        db '>'
c380:
        dq 0      ;0 ascii null
        dq 0 ;c7be4    ;1
        dq 0          ;2
        dq 0 ;c7bd3     ;3
        dq c7c86    ;4     
        dq 0       ;5
        dq 0 ;c7c63  ;6
        dq c7d0c    ;7 beep
        dq c7c20      ;8 <-
        dq c7c9f      ;9  tab
        dq c7baa    ;a line feed
        dq 0            ;b
        dq 0              ;c
        dq c7baa   ;d return
        dq 0         ;e
        dq 0           ;f
        dq 0 ;c7b25       ;10
        dq 0       ;11
        dq 0 ;c7c58 ;12
        dq 0 ;c7c20   ;13
        dq 0 ;c7cc7    ;14
        dq 0       ;15
        dq 0 ;c7ba5  ;16
        dq 0           ;17
        dq 0 ;c7bd3     ;18
        dq 0 ;c7bd3  ;19
        dq 0           ;1a
        dq 0 ;c7baa      ;1b
        dq 0,0,0   ;1c 1d 1e
        dq 0 ;c7c20    ;1f
        dq c7d05       ;20
        dq 0
c400:
        jmp c5cd3 ;qword [c740] ;c5cd3
c42c:
        dq 0
c42e:
        dq 0
c44f:
        dq 0
c54f:
        db 0dh
        db 0ah     
c700:
        dq 0
        dq 0
        dq 0
c7b9:           ;quote-ss
        mov rdi,[rsi] ;ss
        ret
c7bd:           ;cond-s
        test qword [rsi],700000h
        jnz c816
        mov rdi,[rsi] ;ss
        add rsi,8
        cmp rdi,rdx
        jb c7bd
        push rsi
        push rdi
        mov rsi,[rdi] ;ss
        sub rsi,700000h
        call c6780
        pop rbx
        pop rsi
        cmp rdi,100h
        jz c7bd
        mov rsi,rbx
        add rsi,8
        jmp c6945
c7e4:           ;cond
        cmp rsi,rdx
        jb c816
        mov rdi,[rsi + r14]    ;car
        mov rsi,[rsi + r15]    ;cdr
        cmp rdi,rdx
        jb c7e4
        mov [rbp],rsi
        mov [rbp + 8],rdi
        add rbp,16
        mov rsi,[rdi + r14]
        call c65a2 ;eval
        sub rbp,16
        mov rbx,[rbp + 8]
        mov rsi,[rbp]
        cmp rdi,100h
        jz c7e4
        mov rsi,rbx
        mov rsi,[rsi + r15]
        jmp c66b2  
c816:
        mov rdi,100h ;nil
        ret
ca2a:           ;and
        mov rdi,108h ;T
ca2d:
        cmp rsi,rdx
        jb .1 ;ret
        mov [rbp],rsi
         add rbp,8
        mov rsi,[rsi + r14]
        call c65a2 ;eval
         sub rbp,8
        mov rsi,[rbp]
        mov rsi,[rsi + r15]
        cmp rdi,100h ;nil
        jnz ca2d
.1:
        ret
ca61:
        mov rdi,100h
        ret
ca65:           ;or
        cmp rsi,rdx
        jb ca61
        mov [rbp],rsi
         add rbp,8
        mov rsi,[rsi + r14]
        call c65a2 ;eval
         sub rbp,8
        mov rsi,[rbp]
        mov rsi,[rsi + r15]
        cmp rdi,100h ;nil
        jz ca65
        ret 
cad9:
        mov rdi,100h
        ret
cadd:           ;21 set
        cmp rsi,rdx
        jb cad9
cae1:
        mov rbx,[rsi + r14]
        mov rsi,[rsi + r15]
        mov rdi,100h
        cmp rsi,rdx
        jb cb07
        mov [rbp],rsi
        mov [rbp + 8],rbx
         add rbp,16
        mov rsi,[rsi + r14]
        call c65a2
         sub rbp,16
        mov rbx,[rbp + 8]
        mov rsi,[rbp]
        mov rsi,[rsi + r15]
cb07:
        cmp rbx,[d0]
        jnb cb1b
        cmp rbx,100h
        jz cb16
        mov [rbx + r14],rdi
cb16:
        cmp rsi,rdx
        jnb cae1
        ret
cb1b:
        mov [rbp],rsi
         add rbp,8
        xchg rdi,rbx
        mov rsi,1110 ;setq
        mov rax,3330 ;non symbolic argument
      call c6075
         sub rbp,8
cb2d:           ;f85 assoc->
        mov rsi,[rbp]
        jmp cb16
cdc7:
        mov qword [d38],0
        mov rdi,[d2a8] ;f2] ;throw
        mov al,90h ;nop
        mov ah,0c3h ;ret
        jmp c6008
cdfd:           ;car
        jrcxz ce3d
        mov rsi,[rbp]
        mov rdi,[rsi + r14]
        ret
ce05:           ;cdr
        jrcxz ce3d
        mov rsi,[rbp]
        mov rdi,[rsi + r15]
        ret
ce0f:           ;caar
        jrcxz ce3d
        mov rsi,[rbp]
        mov rsi,[rsi + r14]
        mov rdi,[rsi + r14]
        ret
ce19:           ;cdar
        jrcxz ce3d
        mov rsi,[rbp]
        mov rsi,[rsi + r14]
        mov rdi,[rsi + r15]
        ret
ce25:           ;cadr
        jrcxz ce3d
        mov rsi,[rbp]
        mov rsi,[rsi + r15]
ce2d:           ;quote
        mov rdi,[rsi + r14]
        ret        
ce31:           ;cddr
        jrcxz ce3d
        mov rsi,[rbp]
        mov rsi,[rsi + r15]
        mov rdi,[rsi + r15]
        ret       
ce3d:
        mov rdi,100h
        ret
ce41:           ;caaar
        call c121e
ce44:
        mov rsi,[rsi + r14]
        mov rsi,[rsi + r14]
        mov rdi,[rsi + r14]
        ret
ce4b:           ;cdaar
        call c121e
ce4e:
        mov rsi,[rsi + r14]
        mov rsi,[rsi + r14]
ce52:           ;cadddr
        mov rdi,[rsi + r15]
        ret
ce57:           ;cadar
        call c121e
ce5a:
        mov rsi,[rsi + r14]
        mov rsi,[rsi + r15]
        mov rdi,[rsi + r14]
        ret
ce63:           ;cddar
        call c121e
ce66:
        mov rsi,[rsi + r14]
        mov rsi,[rsi + r15]
        mov rdi,[rsi + r15]
        ret
ce6f:           ;caadr
        call c121e
ce72:
        mov rsi,[rsi + r15]
        mov rsi,[rsi + r14]
        mov rdi,[rsi + r14]
        ret
ce7b:           ;cdadr
        call c121e
ce7e:
        mov rsi,[rsi + r15]
        mov rsi,[rsi + r14]
        mov rdi,[rsi + r15]
        ret
ce87:           ;caddr
        call c121e
ce8a:
        mov rsi,[rsi + r15]
        mov rsi,[rsi + r15]
        mov rdi,[rsi + r14]
        ret
ce93:           ;cdddr
        call c121e
ce96:
        mov rsi,[rsi + r15]
        mov rsi,[rsi + r15]
        mov rdi,[rsi + r15]
        ret
cea1:           ;caaaar
        call c121e
        mov rsi,[rsi + r14]
        jmp ce44
cea9:           ;caaadr
        call c121e
        mov rsi,[rsi + r15]
        jmp ce44
ceb1:           ;cdaaar
        call c121e
        mov rsi,[rsi + r14]
        jmp ce4e   
ceb9:           ;cdaadr
        call c121e
        mov rsi,[rsi + r15]
        jmp ce4e
cec1:           ;cadaar
        call c121e
        mov rsi,[rsi + r14]
        jmp ce5a
cec9:           ;
        call c121e
        mov rsi,[rsi + r15]
        jmp ce5a
ced1:           ;cddaar
        call c121e
        mov rsi,[rsi + r14]
        jmp ce66
ced9:           ;cddadr
        call c121e
        mov rsi,[rsi + r15]
        jmp ce66
cee1:           ;caadar
        call c121e
        mov rsi,[rsi + r14]
        jmp ce72
cee9:           ;caaddr
        call c121e
        mov rsi,[rsi + r15]
        jmp ce72
cef1:           ;cdadar
        call c121e
        mov rsi,[rsi + r14]
        jmp ce7e
cef9:           ;cdaddr
        call c121e
        mov rsi,[rsi + r15]
        jmp ce7e      
cf03:           ;caddar
        call c121e
        mov rsi,[rsi + r14]
        jmp ce8a      
cf0b:           ;c
        call c121e
        mov rsi,[rsi + r15]
        jmp ce8a         
cf15:           ;cdddar
        call c121e
        mov rsi,[rsi + r14]
        jmp ce96       
cf1d:           ;cddddr
        call c121e
        mov rsi,[rsi + r15]
        jmp ce96     
cf27:           ;last
        call c121e
        cmp rsi,rdx
        jb cf59
cf2e:
        mov rdi,rsi
        mov rsi,[rdi + r15]
cf33:
        cmp rsi,rdx
        jnb cf2e
        ret
cf59:
        mov rdi,100h ;nil
        ret
cf85:           ;assoc
        mov rax,cb2d      
cf88:
        call c124f
        mov rcx,100h
        call cf9c
        jnb cf59
        ret
cf94:
        mov rax,cb2d
        mov rbx,111 ;equal
        xchg rsi,rdi
cf9c:
        cmp rdi,rdx
        jb cfdb
        mov [rbp],rcx
        mov [rbp + 8],rbx
        mov [rbp + 16],rsi
        mov [rbp + 24],rdi
        add rbp,32
cfaf:
        mov rsi,[rdi + r14]
        cmp rsi,rdx
        jb cfc8
         push rax
        call rax ;->b2d
        mov rsi,[rbp - 16]
        mov rax,[rbp - 24]
        call c64e9   
         pop rax
        cmp rdi,100h ;nil
        jnz cfdd
cfc8:
        mov rdi,[rbp - 8]
        mov [rbp - 32],rdi
        mov rdi,[rdi + r15]
        mov [rbp - 8],rdi
        cmp rdi,rdx
        jnb cfaf
        sub rbp,32
cfdb:
        clc
        ret 
cfdd:
        mov rdi,[rbp - 8]
        mov rcx,[rbp - 32]
        sub rbp,32
        mov rdi,[rdi + r14]
        stc
        ret
c1217:
        mov rsi,100h
        ret
c121b:
        mov rdi,100h
c121e:
        jrcxz c1217
        mov rsi,[rbp]
        ret
c1224:
        mov ebx,100h
c1227:
        cmp rcx,4
        jb c121b
        mov rsi,[rbp]
        mov rdi,[rbp + 8]
        ret
c124f:
c1266:
c1299:
c12b6:
c12c9:
c12d4:
c13db:
c145a:
c148d:
c1490:
        ret
c1347:          ;cons
        call c1227
c134a:
        cmp [d300],rdx
        jnb c137f
        mov rbx,[d6]
        cmp rbx,[d8]
      jz c1368
        mov [rbx + r14],rsi
        mov [rbx + r15],rdi
        mov rdi,rbx
        add rbx,8
        mov [d6],rbx
        ret
c137f:
        mov rbx,[d300]
        mov [rbx + r14],rsi
        xchg rdi,[rbx + r15]
        mov [d300],rdi
        mov rdi,rbx
        ret
c13c5:          ;list
        mov rdi,100h
        jrcxz .1
        add rbp,rcx
.2:
        sub rbp,8
        mov rsi,[rbp]
        sub rcx,7
        push rcx
        call c134a   ;cons
        pop rcx
        loop .2 ;c13cc
.1:
        ret
c1453:          ;copy-list
        call c121e
        cmp rsi,rdx
        xor rax,rax
        shl rax,1
        jb c149a
        dec rax
        push rax
        mov rdi,[rsi + r15] ;cdr
        mov rsi,[rsi + r14] ;car       
        call c134a
        mov [rbp],rdi
        add rbp,16
        jmp c148d
c1473:
        mov rsi,[rdi + r15]     ;cdr
        cmp rsi,rdx
        jb c1490
        dec rcx
        push rcx
        mov [rbp + 8],rdi
        mov rdi,[rsi + r15] ;cdr
        mov rsi,[rsi + r14] ;car
        call c134a
        mov rsi,[rbp + 8]
        mov [rsi + r15],rdi
        pop rcx
        loop c1473
        mov rsi,rdi
        sub rbp,16
        mov rdi,[rbp]
        ret
c149a:
        mov rax,rsi
        call cf2e ;last
        mov rsi,rdi
        xchg rdi,rax
        ret
c14a3:
        mov rdi,rsi
        ret
c14a7:          ;copy-tree
        call c121e
c14aa:
        cmp rsi,rdx
        jb c14a3 ;ret
        mov rdi,[rsi + r15] ;cdr
        mov rsi,[rsi + r14] ;car
        mov [rbp],rdi
        add rbp,8
        call c14aa
        mov rsi,rdi
        sub rbp,8
        mov rdi,[rbp]
        call c134a ;cons
        mov [rbp],rdi
        add rbp,16
        jmp c14ef
c14cf:
        mov [rbp - 8],rdi
        mov rdi,[rsi + r15] ;cdr
        mov rsi,[rsi + r14] ;car
        mov [rbp],rdi
        add rbp,8
        call c14aa
        mov rsi,rdi
        sub rbp,8
        mov rdi,[rbp]
        call c134a
        mov esi,[rbp - 8]
        mov [rsi + r15],rdi
c14ef:
        mov rsi,[rdi + r15] ;cdr
        cmp rsi,rdx
        jnb c14cf
        sub rbp,16
        mov rdi,[rbp]
        ret
c163d:          ;subst
        call c1266
c1640:
        mov [rbp],rax
        mov [rbp + 8],rbx
        mov [rbp + 16],rdi
        mov [rbp + 24],rsi
        add rbp,32
        call c64e9
        sub rbp,32
        mov rsi,[rbp + 24]
        mov rcx,[rbp + 16]
        mov rbx,[rbp + 8]
        mov rax,[rbp]
        cmp rdi,100h
        jnz c16a0
        mov rdi,rcx
        cmp rdi,rdx
        jb .1 ;c163b   ;ret
        mov [rbp],rdi
        add rbp,8
        mov rdi,[rdi + r14]
        call c1640
        mov [rbp],rdi
        add rbp , 8
        mov rdi,[rbp - 16]
        mov rdi,[rdi + r15]
        call c1640
        xchg rsi,[rbp - 8]
        xchg rbx,[rbp - 16]
        cmp rdi,[rbx]
        jnz c16a3
        cmp rdi,[rbx + r15]
        jnz c16a3
        mov rdi,rbx
        sub rbp,16
        mov rsi,[rbp + 8]
        mov rbx,[rbp]
.1:
        ret
c16a0:
        mov rdi,rbx
        ret
c16a3:
        mov [rbp],rax
        add rbp,8
        call c134a
        sub rbp,24
        mov rax,[rbp + 16]
        mov rsi,[rbp + 8]
        mov rbx,[rbp]
        ret
c18ff:
        call c1227
c1902:
        mov [rbp],rsi
        add rbp,8
        mov rsi,rdi
        mov rdi,100h
        call c134a
        mov rax,rdi
        sub rbp,8
        mov rsi,[rbp]
        cmp rsi,rdx
        jb c192e
        mov rbx,[rsi + r15]
        cmp rbx,rdx
        jb c192a
        mov [rbx + r15],rax
c1924:
        mov [rsi + r15],rdi
        mov rdi,rsi
        ret
c192a:
        mov [rsi + r14],rax
        jmp c1924
c192e:
        xchg rsi,rax
        jmp c134a
c199b:          ;atom
        jrcxz c19fe ;ret
        mov rsi,[rbp]
        cmp rsi,rdx
        jb c19fe
        mov rdi,100h ;nil
        ret
c19c5:          ;not
        jrcxz c19fe
        mov rsi,[rbp]
        cmp rsi,100h ;nil
        jz c19fe
        mov rdi,100h ;nil
        ret
;c19d5:
        jrcxz c1a0d
        mov rsi,[rbp]
        cmp rsi,[d0]
        jb c1a0d
        cmp rsi,rdx
        jnb c1a0d
        test byte [rsi + r15],8
        jnz c1a0d
c19fe:
        mov rdi,108h  ; T
        ret
c1a0d:
        mov rdi,100h ;nil
        ret
c1a92:
        cmp al,':' ;3a
        jnb .1 ;c1a99
        cmp al,'0'
        cmc
.1:
        ret
c1a9a:
        cmp al,'['
        jnb .1 ;ret
        cmp al,'a' ;'A'
        cmc
.1:
        ret
c1aa2:
        cmp qword [222],100h ;read-upcase
        jz .1 ;ret
        cmp al,'{'
        jnb .1
        cmp al,'a'
        cmc
.1:
        ret
c1ab2:
        call c1a9a
        jb c1abc
c1ab7:
        call c1a92
        jb .1 ;jnb ret
        ret
.1:
c1abc:
        push rax
        push rcx
        push rsi
        call c1adf
        xchg rcx,rax
        mov rsi,[222] ;read-base
        call c12b6
        cmp rcx,rax
        pop rsi
        pop rcx
        pop rax
        ret
c1ad0:
        push         rcx
        mov rcx,[rdi]
        add rdi,8
        cld
        repnz scasb
        pop rcx
        ret
c1adf:
        call c1a92
        jb c1ae6
        sub al,7
c1ae6:
        sub al,'0'
        mov ah,0
        ret
;c1aeb:
        cmp al,10
        jb c1af1
        add al,7
c1af1:
        add al,'0'
        ret
c1af5:
        cmp al,'a'
        jb .1 ;ret
        cmp al,'z'
        ja .1
        and al,0dfh
.1:
        ret
c1b01:
        cmp al,'A'
        jb .1
        cmp al,'Z'
        ja .1
        or al,20h
.1:
        ret

0

阅读 收藏 喜欢 打印举报/Report
前一篇:lisp函数
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有