Cтрока: Передать строку в качестве параметра в процедуру. Подскажите, как это сделать? - Assembler
Формулировка задачи:
Доброго времени суток, мне нужно передать строку в качестве параметра в процедуру, но я не знаю, как это сделать, можно ли минимальный пример? Пишу в tasm под досбокс
Решение задачи: «Cтрока: Передать строку в качестве параметра в процедуру. Подскажите, как это сделать?»
textual
Листинг программы
_STACK segment para stack db 1024 dup(?) _STACK ends _DATA segment Str1 db 'wdjhbcjckjhhbkvjhxmdk' Len1 dw $-Str1 Str2 db 'cd,mi3487sdmn3figcrmnkdjb' Len2 dw $-Str2 MsgBefore db 'Before: ', 0Dh, 0Ah, '$' MsgAfter db 'After: ', 0Dh, 0Ah, '$' CrLf db 0Dh, 0Ah, '$' _DATA ends _TEXT segment assume cs:_TEXT, ds:_DATA, ss:_STACK ;макрос для упрощения вызова процедур с параметрами invoke macro CallProc, Params IRP P, <Params> mov ax, P push ax endm call CallProc endm main proc ;инициализация сегментного регистра данных mov ax, _DATA mov ds, ax ;вывод исходного массива mov ah, 09h lea dx, [MsgBefore] int 21h mov ah, 40h mov bx, 1 mov cx, [Len1] lea dx, [Str1] int 21h mov ah, 09h lea dx, [CrLf] int 21h ;обработка ;mov cx, [Len1] ;lea dx, [Str1] ;call BubbleSort invoke BubbleSort, <Len1, offset Str1> ;вывод обработанного массива mov ah, 09h lea dx, [MsgBefore] int 21h mov ah, 40h mov bx, 1 mov cx, [Len1] lea dx, [Str1] int 21h mov ah, 09h lea dx, [CrLf] int 21h ;завершение программы mov ax, 4C00h int 21h main endp ;Сортировка "пузырьком" массива байт ;на входе ; 1-й параметр - адрес массива байт ; 2-й параметр - длина массива BubbleSort proc pArray: word, Len: word push bp ;формирование кадра параметров mov bp, sp push ax push bx push cx push dx push si push di mov bx, [pArray] mov cx, [Len] mov dx, cx dec dx dec cx ;for i:=1 to N-1 do mov si, 0 @@ForI: mov di, dx ; j:=N @@ForJ: ; repeat mov al, [bx+di-1] ; if (a[j] < and a[j - 1]) then cmp al, [bx+di] ; begin jbe @@NextJ ; xchg al, [bx+di] ; temp:=a[j] xchg al, [bx+di-1] ; a[j]:=a[j-1] xchg al, [bx+di] ; a[j-1]:=a[j] @@NextJ: ; end sub di, 1 ; dec(j) cmp di, si ; until j<=i; ja @@ForJ add si, 1 ; end; for i равноценно inc(i) loop @@ForI pop di pop si pop dx pop cx pop bx pop ax pop bp ret 4 BubbleSort endp _TEXT ends end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д