А. Колесов Смешанное программирование: Basic-Assembler. Часть 2 Листинг 1. Модуль WORDBV60.ASM ;*************************************************** ;******** K o l e s o v Q B T o o l s ********** ; Библиотека QB-SERVICE_ASMBL v.3.11 * ;*************************************************** ;* Модуль WORDBV60.ASM * ;*-------------------------------------------------* ;* Процедуры прямого обмена с памятью СЛОВАМИ * ;* MASM 6.0 Microsoft * ;*************************************************** ;СОСТАВ ПРОЦЕДУР: ; PokeWordByv - запись слова, ; PeekWordByv - чтение слова, ; StringCopyByv - перезапись строки слов/байтов ; (текст процедур PokeWordByv и PeekWordByv ; взят из русского издания PC Magazine 1'91) ;********************************************* ;Объявление в вызывающем модуле: ;DECLARE SUB PokeWordByv (BYVAL Segment%,BYVAL Offset%,BYVAL Value%) ;DECLARE FUNCTION PeekWordByv% (BYVAL Segment%, BYVAL Offset%) ;DECLARE SUB StringCopyByv(BYVAL SegmentS%, BYVAL OffsetS%,_ ; BYVAL SegmentD%, BYVAL OffsetD%, BYVAL LenBw%, BYVAL Bw%) ; ;Обращение: ; CALL PokeWordByv(Segment%, Offset%, Value%) ; ' Value% -> [Segment%:Offset%] ; ; Word%=PeekWordByv(Segment%, Offset%) ; ' [Segment%:Offset%] -> Word% ; ; CALL StringCopyByv(SegmentS%,OffsetS%,SegmentD%,OffsetD%,LenBw%,Bw%) ; 'Пересылка LenBw%-элементов: ; ' [SegmentS%:OffsetS%] -> [SegmentD%, OffsetD%] ; ' Bw% = 0 - пересылка LenBw%-байт ; ' = 1 - -"- LenBw%-слов ;------------------------------------------ .MODEL Medium,Basic ; Basic - порядок передачи параметров: ; 1) нумерация - слева направо ; 2) сохранение-восстановление BP ; 3) представление имен внешних точек ; заглавными буквами .CODE PokeWordByv PROC, PokeAdr:DWord,Value:Word LES BX,PokeAdr ;Загрузить адрес для засылки MOV AX,Value ;и передаваемое туда значение MOV ES:[BX],AX ;Выполнять! RET ;Возврат управления в QB PokeWordByv ENDP PeekWordByv PROC, PeekAdr:Dword LES BX,PeekAdr ;Загрузить адрес для выборки MOV AX,ES:[BX] ;Занести в AX значение функции RET ;Возврат управления в QB PeekWordByv ENDP . - 2 - StringCopyByv PROC USES DS DI SI DF, SourAdr:DWord, DestAdr:DWord, Len:Word, Bw:Word ;USES - запомнить DS, SI, DI, DF-флаг ! (в стеке) ; Прием входных параметров: MOV CX,Len ; количество слов/байтов MOV AX,Bw ; указатель типа пересылки LES DI,DestAdr ; полный адрес Приемника (Куда) ; ES - сегмент, DI - смещение LDS SI,SourAdr ; полный адрес Источника (Откуда) ; DS - сегмент, SI - смещение ; пересылка данных: CLD ; очистка флага DF XOR BX,BX ; обнуление BX CMP AX,BX ; AX=0 - пересылка байтов, <>0 - слов JE ByteCopy REP MOVSW ; пересылка CX-слов JMP EndCopy ByteCopy: REP MOVSB ; пересылка CX-байтов EndCopy: ; выход из процедуры: RET ;возврат управления в Basic StringCopyByv ENDP END