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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы