pcs/sw_int.asm

46 lines
1.1 KiB
NASM
Raw Permalink Normal View History

2023-05-20 05:57:06 -04:00
DGROUP group data
data segment word public 'DATA'
assume DS:DGROUP
data ends
PGROUP group prog
prog segment byte public 'PROG'
assume CS:PGROUP
public isw_int,fsw_int,tsw_int,ssw_int
SWI_ARGS struc
OLDBP DW ?
RET_ADDR DW ?
INT_NUM DW ?
AX_ARG DW ?
BX_ARG DW ?
CX_ARG DW ?
DX_ARG DW ?
SWI_ARGS ends
sw_int proc near
isw_int:
fsw_int:
tsw_int:
ssw_int:
push bp ; Save Base Pointer
mov bp,sp ; Update with Stack Pointer
mov ax,[bp].INT_NUM ; Get interrupt number
mov cs:int_no,al ; Move to location in code
mov ax,[bp].AX_ARG ; Load ax register with 1st arg
mov bx,[bp].BX_ARG ; Load bx register with 2nd arg
mov cx,[bp].CX_ARG ; Load cx register with 3rd arg
mov dx,[bp].DX_ARG ; Load dx register with 4th arg
db 0CDh ; Byte code for INT instruction
int_no db 070h ; Byte code for interrupt number
pop bp
ret ; and go back to the caller.
sw_int endp
prog ends
end