home *** CD-ROM | disk | FTP | other *** search
- ; Turbo Assembler Copyright (c) 1988, 1991 By Borland International, Inc.
-
- ; XCHANGE.ASM - Example program to exchange two variables
-
- ; From the Turbo Assembler Users Guide - Interfacing Turbo Assembler with
- ; Turbo Pascal
-
- CODE SEGMENT
- ASSUME cs:CODE,ds:NOTHING
-
- ; Parameters (note that offset are +2 because of push bp)
-
- var1 equ DWORD PTR ss:[bp+12]
- var2 equ DWORD PTR ss:[bp+8]
- count equ WORD PTR ss:[bp+6]
-
-
- Exchange PROC FAR
- PUBLIC Exchange
- cld ;exchange goes upward
- mov dx,ds ;save DS
- push bp
- mov bp,sp ;get stack base
- lds si,var1 ;get first address
- les di,var2 ;get second address
- mov cx,count ;get number of bytes to move
- shr cx,1 ;get word count (low bit -> carry)
- jnc ExchangeWords ;if no odd byte, enter loop
- mov al,es:[di] ;read odd byte from var2
- movsb ;move a byte from var1 to var2
- mov [si-1],al ;write var2 byte to var1
- jz Finis ;done if only one byte to exchange
- ExchangeWords:
- mov bx,-2 ;BX is a handy place to keep -2
- ExchangeLoop:
- mov ax,es:[di] ;read a word from var2
- movsw ;do a move from var1 to var2
- mov [bx][si],ax ;write var2 word to var1
- loop ExchangeLoop ;repeat "count div 2" times
- Finis:
- mov ds,dx ;get back Turbo's DS
- pop bp
- ret 10
- Exchange ENDP
- CODE ENDS
- END
-