Ошибка Invalid PUBLIC definition (взаимодействие Pascal и Assembler)

Узнай цену своей работы

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

Invalid PUBLIC definition (move) Как я понял, эта ошибка в печёнках сидит не у одного меня. Перерыл много форумов, но исправить так и не смог. Может кто-нибудь сможет помочь. ASM файл:
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
Turbo Pascal:
{$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):

  1. TITLE - указывает название сегмента кода.
  2. MOVE - определяет подпрограмму.
  3. CODE - указывает сегмент кода.
  4. SEGMENT BYTE PUBLIC - директива сегмента и публичности.
  5. ASSUME CS:CODE - предположение о сегменте кода.
  6. ROW EQU 4 - определение константы строка.
  7. COL EQU 2 - определение константы столбец.
  8. MOV BX,SP - перемещение параметров в BX.
  9. MOV dh, byte ptr ss:[bx+ROW] - перемещение строки в dh.
  10. MOV dl, byte ptr ss:[bx+COL] - перемещение столбца в dl.
  11. MOV AH,02 - установка функции на 02 для установки курсора.
  12. XOR BH,BH - установка байта BH в 0.
  13. INT 10H - вызов функции установки курсора.
  14. RET 4 - возврат в вызывающую программу.
  15. CODE ENDS - завершение сегмента кода.
  16. END - конец программы.

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


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

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

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