Ошибка Invalid PUBLIC definition (взаимодействие Pascal и Assembler)
Формулировка задачи:
Invalid PUBLIC definition (move)
Как я понял, эта ошибка в печёнках сидит не у одного меня. Перерыл много форумов, но исправить так и не смог. Может кто-нибудь сможет помочь.
ASM файл:
Turbo Pascal:
TITLE MOVE Подпрограмма на языке ассемблер CODESEG SEGMENT PARA PUBLIC 'CODE' MOVE PROC FAR ASSUME CS:CODESEG ROW EQU 8 ;Параметр "строка" COL EQU 6 ;Параметр "столбец" PUBLIC MOVE PUSH BP ;Сохранить регистр BP MOV BP,SP ;Установить BP на параметры MOV SI,[BP+ROW] ;SI указывает на строку MOV DH,[SI] ;Поместить столбец в DL MOV AH,02 ;Функция установки курсора SUB BH,BH ;Страница #0 INT 10H POP BP ;Вернуться RET 4 ; в вызывающую программу MOVE ENDP CODESEG ENDS END
{$L MOVE.OBJ} program pascal (input,output); procedure move(const row: integer; const col: integer); external; var temp_row:integer; temp_col:integer; begin write('Enter cursor row:'); readln(temp_row); write('Enter cursor column:'); readln(temp_col); move(temp_row,temp_col); write('New cursor location'); end.
Решение задачи: «Ошибка Invalid PUBLIC definition (взаимодействие Pascal и Assembler)»
textual
Листинг программы
TITLE MOVE Подпрограмма на языке ассемблер PUBLIC MOVE CODE SEGMENT BYTE PUBLIC ASSUME CS:CODE MOVE:; PROC FAR ROW EQU 4 ;Параметр "строка" COL EQU 2 ;Параметр "столбец" MOV BX,SP ;Установить BX на параметры ; int 3 mov dh, byte ptr ss:[bx+ROW] mov dl, byte ptr ss:[bx+COL] MOV AH,02 ;Функция установки курсора xor BH,BH ;Страница #0 INT 10H RET 4 ; Вернуться в вызывающую программу CODE ENDS END
Объяснение кода листинга программы
Список элементов кода на языке ассемблера (Assembler):
- TITLE - указывает название сегмента кода.
- MOVE - определяет подпрограмму.
- CODE - указывает сегмент кода.
- SEGMENT BYTE PUBLIC - директива сегмента и публичности.
- ASSUME CS:CODE - предположение о сегменте кода.
- ROW EQU 4 - определение константы
строка
. - COL EQU 2 - определение константы
столбец
. - MOV BX,SP - перемещение параметров в BX.
- MOV dh, byte ptr ss:[bx+ROW] - перемещение строки в dh.
- MOV dl, byte ptr ss:[bx+COL] - перемещение столбца в dl.
- MOV AH,02 - установка функции на 02 для установки курсора.
- XOR BH,BH - установка байта BH в 0.
- INT 10H - вызов функции установки курсора.
- RET 4 - возврат в вызывающую программу.
- CODE ENDS - завершение сегмента кода.
- END - конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д