Паскаль+Ассемблер - 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
Решение задачи: «Паскаль+Ассемблер»
textual
Листинг программы
- function Max(const Mas; N: Integer): Integer; external;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д