Паскаль+Ассемблер - Turbo Pascal

Формулировка задачи:

как передать массив в стек по значению для программы, основная программа:
program My;
const
  N = 7;                                                                                         {Размер массива}
  Massiv: array[1..N] of Integer =
  (1, 2, 3, 2, 17, 7, 2);                                                      {Исходный массив}
{$L SUBR}                                                                       {Подключение файла SUBR.OBJ}
function Max(var Mas; N: Integer): Integer; external;
begin
  WriteLn('Max znachenie: ');
  Max(Massiv, N)); ReadLn
end.
процедура на ассемблере:
CODE         SEGMENT  BYTE   PUBLIC
             ASSUME   CS:CODE
             PUBLIC   Max                                            ;внешний идентификатор
AdrMas         EQU      DWORD PTR[BP+6]                   ;адрес  первого параметра
N          EQU      WORD  PTR[BP+4]        ;второй параметр
Max               PROC  NEAR
                        PUSH    BP                                            ;сохранение регистра ВР
                        MOV     BP,SP                                             ;указатель стека
                        LDS       SI,AdrMas                           ;адрес массива
                        XOR      AX,AX                                             ;0 - в регистр АХ
                        MOV     BX,8001h                              ;минимальное целое число
                        MOV     CX,N                                              ;число элементов массива
                        CMP      СХ,АХ                                           ;cравнение с 0
                        JLE         М3                                            ;0 или отрицательное число
M1:                 LODSW                                            ;загрузка элемента массива
                        СМР      АХ,ВХ                                           ;сравнение с текущим максимумом
                         JLE        M2                                           ;не больше
                        MOV      BX,AX                                           ;новое максимальное число
М2:                 LOOP     Ml                                          ;цикл
М3:                 MOV      АХ,ВХ                          ;результат функции
                         POP       BP                                            ;восстановление регистра
ВР
                         RET      6                                          ; возврат из подпрограммы
Max                      ENDP
CODE               ENDS
                          END
Что нужно поменять?

Код к задаче: «Паскаль+Ассемблер - Turbo Pascal»

textual
function Max(const Mas; N: Integer): Integer; external;

13   голосов, оценка 4.154 из 5


СОХРАНИТЬ ССЫЛКУ