Вставка ассемблерного кода в Си-программу - 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.