123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- .sect .text ; .sect .rom; .sect .data; .sect .bss
- .define .trpdivz
- .define .trpilin
- .define .trpcase
- .define .trprang
- .define .trpset
- .define .trpnofp
- .define .trpheap
- .define .trp
- .define .stop
- .sect .text
- .extern .trpdivz
- .extern .trpilin
- .extern .trpcase
- .extern .trprang
- .extern .trpset
- .extern .trpnofp
- .extern .trpheap
- .extern .trp
- .trpdivz:
- mov ax,6
- mov dx,.Mdivz
- jmp .Trp
- .trpilin:
- mov ax,18
- mov dx,.Milin
- jmp .Trp
- .trpcase:
- mov ax,20
- mov dx,.Mcase
- jmp .Trp
- .trprang:
- mov ax,1
- mov dx,.Mrang
- jmp .Trp
- .trpset:
- mov ax,2
- mov dx,.Mset
- jmp .Trp
- .trpnofp:
- mov ax,18
- mov dx,.Mnofp
- jmp .Trp
- .trpheap:
- mov ax,17
- mov dx,.Mheap
- jmp .Trp
- .Trp:
- xor bx,bx
- .extern .trppc
- xchg bx,(.trppc)
- test bx,bx
- jz 2f
- push ax
- call (bx)
- pop ax
- ret
- 2:
- mov bx,22
- push bx
- push dx
- mov ax,2
- push ax
- call _write
- .stop:
- call _exit
- .trp:
- mov dx,ax
- cmp dx,21
- jae 1f
- sal dx,1
- mov bx,.Mtable
- add bx,dx
- mov bx,(bx)
- test bx,bx
- jz 1f
- mov dx,bx
- jmp 2f
- 1:
- mov bx,.Mtrp+14
- mov cx,6
- mov dx,ax
- 1:
- and dx,7
- add dx,'0'
- movb (bx),dl
- dec bx
- sar dx,1
- sar dx,1
- sar dx,1
- loop 1b
- mov dx,.Mtrp
- 2:
- jmp .Trp
- .sect .rom
- .Mtable:
- .data2 0, .Mrang, .Mset, 0, 0, 0, .Mdivz, 0
- .data2 0, 0, 0, 0, 0, 0, 0, 0
- .data2 0, .Mheap, .Milin, .Milin, .Mcase
- .Mdivz: .asciz "Error: Division by 0 \n"
- .Milin: .asciz "Illegal EM instruct'n\n"
- .Mcase: .asciz "Err in EM case instr \n"
- .Mrang: .asciz "Variable out of range\n"
- .Mset: .asciz "Err in EM set instr \n"
- .Mnofp: .asciz "Floating pt not impl.\n"
- .Mheap: .asciz "Heap overflow \n"
- .Mtrp: .asciz "EM trap 0000000 octal\n"
|