varexch.asm
来自「汇编&c语言code」· 汇编 代码 · 共 46 行
ASM
46 行
; Turbo Assembler Copyright (c) 1988, 1991 By Borland International, Inc.
; VAREXCH.ASM
; From the Turbo Assembler Users Guide
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 1 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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?