You are on page 1of 13

;

;
; Copyright (c) 1986-1999 Kevin G. Rhoads. All rights reserved.
;
; permission to copy and use under either GPL2 or LGPL2 is granted
;
; for 8088 and above, real mode 16 bit segments
;
include forframe.inc
;
;
;DATA segment PUBLIC 'DATA' USE16
DATA segment PUBLIC 'DATA'
DATA ends
dgroup group DATA
;code segment 'CODE' PUBLIC USE16
code segment 'CODE' PUBLIC
assume cs:code,ds:dgroup,es:dgroup,ss:dgroup
;
; USE: int*4 = asr2(int*2 to_shift, count)
asr2 proc far
sar2 label far
i2asr label far
i2sar label far
public asr2,sar2,i2asr,i2sar
save
; push es
les si,dword ptr ss:[bp+argone2]
mov ax,word ptr es:[si]
les bx,dword ptr ss:[bp+argtwo2]
mov cx,word ptr es:[bx]
sar ax,cl
cwd
; pop es
restore
ret 8
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
asr2 endp
;
; USE: int*4 = lsr2(int*2 to_shift, count)
lsr2 proc far
shr2 label far
i2lsr label far
i2shr label far
public lsr2,shr2,i2lsr,i2shr
save
; push es
les si,dword ptr ss:[bp+argone2]
mov ax,word ptr es:[si]
les bx,dword ptr ss:[bp+argtwo2]
mov cx,word ptr es:[bx]
shr ax,cl
mov dx,0
; pop es
restore
ret 8
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
lsr2 endp
;
;
; USE: int*4 = ror2(int*2 to_shift, count)
ror2 proc far
i2ror label far
public ror2,i2ror
save
; push es
les si,dword ptr ss:[bp+argone2]
mov ax,word ptr es:[si]
les bx,dword ptr ss:[bp+argtwo2]
mov cx,word ptr es:[bx]
ror ax,cl
cwd
; pop es
restore
ret 8
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
ror2 endp
;
; USE: int*4 = rol2(int*2 to_shift, count)
rol2 proc far
i2rol label far
public rol2,i2rol
save
; push es
les si,dword ptr ss:[bp+argone2]
mov ax,word ptr es:[si]
les bx,dword ptr ss:[bp+argtwo2]
mov cx,word ptr es:[bx]
rol ax,cl
cwd
; pop es
restore
ret 8
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
rol2 endp
;
;
; USE: int*4 = ror1(int*1 to_shift, count)
ror1 proc far
i1ror label far
public ror1,i1ror
save
; push es
les si,dword ptr ss:[bp+argone2]
mov al,byte ptr es:[si]
les bx,dword ptr ss:[bp+argtwo2]
xor cx,cx
mov cl,byte ptr es:[bx]
ror al,cl
cbw
cwd
; pop es
restore
ret 8
db '(c) 1986-1999 Kevin G. Rhoads, all rights reserved.'
ror1 endp
;
; USE: int*4 = rol1(int*1 to_shift, count)
rol1 proc far
i1rol label far
public rol1,i1rol
save
; push es
les si,dword ptr ss:[bp+argone2]
mov al,byte ptr es:[si]
les bx,dword ptr ss:[bp+argtwo2]
xor cx,cx
mov cl,byte ptr es:[bx]
rol al,cl
cbw
cwd
; pop es
restore
ret 8
db '(c) 1986-1999 Kevin G. Rhoads, all rights reserved.'
rol1 endp
;
;
; USE: int*4 = asl2(int*2 to_shift, count)
asl2 proc far
sal2 label far
i2asl label far
i2sal label far
public asl2,sal2,i2asl,i2sal
save
; push es
les si,dword ptr ss:[bp+argone2]
mov ax,word ptr es:[si]
les bx,dword ptr ss:[bp+argtwo2]
mov cx,word ptr es:[bx]
sal ax,cl
cwd
; pop es
restore
ret 8
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
asl2 endp
;
; USE: int*4 = lsl2(int*2 to_shift, count)
lsl2 proc far
shl2 label far
i2lsl label far
i2shl label far
public lsl2,shl2,i2shl,i2lsl
save
; push es
les si,dword ptr ss:[bp+argone2]
mov ax,word ptr es:[si]
les bx,dword ptr ss:[bp+argtwo2]
mov cx,word ptr es:[bx]
shl ax,cl
cwd
; pop es
restore
ret 8
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
lsl2 endp
;
;
; USE: int*4 = ror4(int*4 to_shift,int*2 count)
ror4 proc far
i4ror label far
public ror4,i4ror
save
; push es
les bx,dword ptr ss:[bp+argtwo2]
mov ax,word ptr es:[bx]
mov ah,0
mov cl,32d
div cl
mov cl,ah
mov ch,0
les si,dword ptr ss:[bp+argone2]
mov ax,word ptr es:[si]
mov dx,word ptr es:[si+2]
cmp cl,16
jl ror4_noswap
xchg ax,dx
sub cl,16
ror4_noswap label near
jcxz ror4_done
ror ax,1
rol ax,1
rcr dx,1
rcr ax,1
dec cx
jmp ror4_noswap
ror4_done label near
; pop es
restore
ret 8
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
ror4 endp
;
;
; USE: int*4 = rol4(int*4 to_shift,int*2 count)
rol4 proc far
i4rol label far
public rol4,i4rol
save
; push es
les bx,dword ptr ss:[bp+argtwo2]
mov ax,word ptr es:[bx]
mov ah,0
mov cl,32d
div cl
mov cl,ah
mov ch,0
les si,dword ptr ss:[bp+argone2]
mov ax,word ptr es:[si]
mov dx,word ptr es:[si+2]
cmp cl,16
jl rol4_noswap
xchg ax,dx
sub cl,16
rol4_noswap label near
jcxz rol4_done
rol ax,1
ror ax,1
rcl dx,1
rcl ax,1
dec cx
jmp rol4_noswap
rol4_done label near
; pop es
restore
ret 8
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
rol4 endp
;
;
; USE: int*4 = shl4(int*4 to_shift,int*2 count)
shl4 proc far
i4shl label far
i4sal label far
sal4 label far
i4lsl label far
lsl4 label far
i4asl label far
asl4 label far
public shl4,i4shl,sal4,i4sal,asl4,i4asl,lsl4,i4lsl
save
; push es
les bx,dword ptr ss:[bp+argtwo2]
mov cx,word ptr es:[bx]
cmp cx,32d
jb lsl4_ok
mov ax,0
mov dx,0
jmp shl4_done
lsl4_ok label near
les si,dword ptr ss:[bp+argone2]
mov ax,word ptr es:[si]
mov dx,word ptr es:[si+2]
; cmp cl,16
; jb shl4_noswap
; mov dx,ax
; mov ax,0
; sub cl,16
shl4_noswap label near
jcxz shl4_done
shl ax,1
rcl dx,1
dec cx
jmp shl4_noswap
shl4_done label near
; pop es
restore
ret 8
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
shl4 endp
;
;
; USE: int*4 = shr4(int*4 to_shift,int*2 count)
shr4 proc far
i4shr label far
i4lsr label far
lsr4 label far
public shr4,i4shr,lsr4,i4lsr
save
; push es
les bx,dword ptr ss:[bp+argtwo2]
mov cx,word ptr es:[bx]
cmp cx,32d
jb lsr4_ok
mov ax,0
mov dx,0
jmp shr4_done
lsr4_ok label near
les si,dword ptr ss:[bp+argone2]
mov ax,word ptr es:[si]
mov dx,word ptr es:[si+2]
cmp cl,16
jb shr4_noswap
mov ax,dx
mov dx,0
sub cl,16
shr4_noswap label near
jcxz shr4_done
shr dx,1
rcr ax,1
dec cx
jmp shr4_noswap
shr4_done label near
; pop es
restore
ret 8
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
shr4 endp
;
;
; USE: int*4 = sar4(int*4 to_shift,int*2 count)
sar4 proc far
i4sar label far
i4asr label far
asr4 label far
public sar4,i4sar,asr4,i4asr
save
; push es
les bx,dword ptr ss:[bp+argtwo2]
mov cx,word ptr es:[bx]
cmp cx,32d
jb asr4_ok
mov ax,0
mov dx,0
jmp sar4_done
asr4_ok label near
les si,dword ptr ss:[bp+argone2]
mov ax,word ptr es:[si]
mov dx,word ptr es:[si+2]
cmp cl,16
jb sar4_noswap
mov ax,dx
cwd
sub cl,16
sar4_noswap label near
jcxz sar4_done
sar dx,1
rcr ax,1
dec cx
jmp sar4_noswap
sar4_done label near
; pop es
restore
ret 8
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
sar4 endp
;
;
; USE: int*4 = swapb(int*2 op1)
swapb proc far
bswap label far
public swapb,bswap
save
; push es
les si,dword ptr ss:[bp+argone1]
mov ax,word ptr es:[si]
xchg ah,al
cwd
; pop es
restore
ret 4
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
swapb endp
;
;
; USE: int*4 = swapw(int*4 op1)
swapw proc far
wswap label far
public swapw,wswap
save
; push es
les si,dword ptr ss:[bp+argone1]
mov dx,word ptr es:[si]
mov ax,word ptr es:[si+2]
; pop es
restore
ret 4
db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'
swapw endp
;
;
; USE: int*4 = swapl(int*4 op1)
swapl proc far
lswap label far
public swapl,lswap
save
; push es
les si,dword ptr ss:[bp+argone1]
mov dx,word ptr es:[si]
xchg dh,dl
mov ax,word ptr es:[si+2]
xchg ah,al
; pop es
restore
ret 4
db '(c) 1986-1994 Kevin G. Rhoads, all rights reserved.'
swapl endp
;
;
; USE: call longsw(int*4 op1)
longsw proc far
swlong label far
public longsw,swlong
save
; push es
les si,dword ptr ss:[bp+argone1]
mov dx,word ptr es:[si]
xchg dh,dl
mov ax,dx
xchg ax,word ptr es:[si+2]
xchg ah,al
mov word ptr es:[si],ax
; pop es
restore
ret 4
db '(c) 1986-1994 Kevin G. Rhoads, all rights reserved.'
longsw endp
;
;
;
; USE: call wordsw(int*2 op1)
wordsw proc far
swword label far
public wordsw,swword
save
; push es
les si,dword ptr ss:[bp+argone1]
mov ax,word ptr es:[si]
xchg ah,al
cwd
; pop es
restore
ret 4
db '(c) 1986-1994 Kevin G. Rhoads, all rights reserved.'
wordsw endp
;
code ends
end

You might also like