0% found this document useful (0 votes)
30 views8 pages

Shifts Asm

The document is an assembly language code for 8088 and above, detailing various procedures for bit manipulation, including arithmetic and logical shifts, rotations, and byte swapping. Each procedure is defined with its usage, and they are all attributed to Kevin G. Rhoads, with copyright notes included. The code segments are structured for real mode 16-bit segments and utilize specific registers and instructions for operations.

Uploaded by

kgrhoads
Copyright
© Attribution ShareAlike (BY-SA)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
30 views8 pages

Shifts Asm

The document is an assembly language code for 8088 and above, detailing various procedures for bit manipulation, including arithmetic and logical shifts, rotations, and byte swapping. Each procedure is defined with its usage, and they are all attributed to Kevin G. Rhoads, with copyright notes included. The code segments are structured for real mode 16-bit segments and utilize specific registers and instructions for operations.

Uploaded by

kgrhoads
Copyright
© Attribution ShareAlike (BY-SA)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 8

;

;
; Copyright (c) 1986-1999 Kevin G. Rhoads. All rights reserved.
;
; for 8088 and above, real mode 16 bit segments
;
include forframe.mac
;
;
;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