Вставка ассемблерного кода в Си-программу - C (СИ)
Формулировка задачи:
Пытаюсь написать hello world используя 2 языка(извращение имхо)...
Не могу понять, что происходит...
Пишу так:
Говорит, что
Наставьте на путь истинный...
Это из Visual Studio... Но суть одна и та же. Я что-то делаю не так...
#include <stdio.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused void main() { char msg[] = "Hello, world.\r\n$ "; _asm { mov ah, 9h mov dx, OFFSET msg int 21h mov ah,4ch int 21h } }
Project xxxx raised exception class yyyyy with message 'zzzzzz'.
Process stopped. Use Step or Run to continue.
В общем, проблема в 21 прерывании... Оно пытается прочесть данные, но не может. А мне надо вывести через asm... Что делать?
Ой, забыл исправить сообщение(вставил из хелпа просто)...
Необработанное исключение в "0x000313c7" в "asmC.exe": 0xC0000005: Нарушение прав доступа при чтении "0xffffffff".
Решение задачи: «Вставка ассемблерного кода в Си-программу»
textual
Листинг программы
#include <stdio.h> int main() { char msg[] = "Hello, world.\r\n"; _asm { lea eax, msg push eax call puts pop eax } }
Объяснение кода листинга программы
- Подключение стандартной библиотеки для работы с консолью (stdio.h).
- Объявление массива символов с сообщением
Hello, world.
. - Начало ассемблерного блока.
- Передача в регистр eax адреса массива msg.
- Отправка в стек адреса eax (для функции puts).
- Вызов функции puts.
- Возвращение из функции и очистка стека (pop eax).
- Конец ассемблерного блока.
- Выход из функции main.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д