• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Проблема с кодом на ассемблере от новичка

EvilKindly

New member
15.03.2024
3
0
BIT
44
Столкнулся с проблемой, которую не особо понимаю каким образом можно решить. Надеюсь есть знающие люди, что помогут найти проблему.
Итак простой код на сложение и вычитание:
org 0x0100
@@start:
mov al, 0x04
add al, 0x03

add al, 0x30

call display_letter
Обращение по идее должно идти к подпрограмме, которую я написал до этого, по идее для дальнейшего удобства
Вот собственно подпрограмма:
int 0x20
display_letter:
push ax
push bx
push cx
push dx
push si
push di

mov ah, 0x0e
mov bx, 0x000f
int 0x10

pop di
pop si
pop dx
pop cx
pop bx
pop ax

ret

read_keyboard:
push bx
push cx
push dx
push si
push di

mov ah, 0x00
int 0x16

pop di
pop si
pop dx
pop cx
pop bx

ret

Вроде бы все правильно, несколько раз перепроверял код, все регистры и указатели, написаны вроде как правильно. Но при собственно компилировании программы в .сом вылазит ошибка:
add.asm:1: warning: multi-line macro `org' exists, but not taking 0 parameters [-w+pp-macro-params-multi]
add.asm:1: warning: label alone on a line without a colon might be in error [-w+label-orphan]
add.asm:8: error: symbol `display_letter' not defined
И собственно я не совсем понимаю в чем проблема, где эта метка без двоеточия я не понял, почему 'org' не видит заданый параметр, и собственно почему не происходит вызов подпрограммы я не совсем понимаю. Есть вероятность, что нужно вместо 'display_latter' написать название самого файла подпрограммый в моем случае, "library" но тогда вопрос не будет ли проблемы из-за того что там две функции для выполнения. В общем НУЖНА помощь.)
 
Решение
Хорошо, в итоге я понял в чем была проблема. Для тех кому интересно, что было не так.
read_keyboard:
push bx
push cx
push dx
push si
push di

mov ah, 0x00
int 0x16

pop di
pop si
pop dx
pop cx
pop bx

ret
Я не учел, что это язык низкого уровня, и поэтому тут не должно быть ничего лишнего, так как это мешает компиляции, и так как эта функция не исполнялась, она собственно и выдавала ошибку. Решение простое, удалить эти строки, и код начинает компилиться и выдавать нужный ответ, в данно случае "7". Возможно есть красивый способ обойти эту проблему, и как-то писать гипер ссылки на обращение к сторонней библиотеке и использования из нее определенные строчки кода, но я по крайней мере сейчас не знаю, такой. Если кто-то знает как это...

EvilKindly

New member
15.03.2024
3
0
BIT
44
Хорошо, в итоге я понял в чем была проблема. Для тех кому интересно, что было не так.
read_keyboard:
push bx
push cx
push dx
push si
push di

mov ah, 0x00
int 0x16

pop di
pop si
pop dx
pop cx
pop bx

ret
Я не учел, что это язык низкого уровня, и поэтому тут не должно быть ничего лишнего, так как это мешает компиляции, и так как эта функция не исполнялась, она собственно и выдавала ошибку. Решение простое, удалить эти строки, и код начинает компилиться и выдавать нужный ответ, в данно случае "7". Возможно есть красивый способ обойти эту проблему, и как-то писать гипер ссылки на обращение к сторонней библиотеке и использования из нее определенные строчки кода, но я по крайней мере сейчас не знаю, такой. Если кто-то знает как это сделать поделитесь.
 
Решение
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!