Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вопрос про асм код по с++

5.5K
04 января 2006 года
Ded pendos
40 / / 13.05.2005
Прошу прощения за офтоп если он имеет место быть. В старом искал не не нашел ответа.
В асме вроде щас разобрался, пытаюсь зарядить код асма в С++.
Почитал мануалов, но нашел кучу противоречий+ реально не работают примеры.
есть асм код(тренировочный просто на вывод текста)
data segment para public "data"
upmessage db 10,13,'Tab version 0.1$ ',10,13
data ends
stk segment stack
db 256 dup ("?")
stk ends
code segment para public "code"
main proc
assume cs:code, ds:data,ss:stk
mov ax, data
mov ds, ax
mov ah, 9
mov dx, offset upmessage
int 21h
mov ax, 4c00h
int 21h
main endp
code ends
end main ;
********************************************
берем его вставляем в с++, в обычный вин 32 консольное приложение.
(по идее библиотек не надо как я понял)

void main()
{
_asm
{
data segment para public "data"
upmessage db 10,13,'Tab version 0.1$ ',10,13
data ends
stk segment stack
db 256 dup ("?")
stk ends
code segment para public "code"
main proc
assume cs:code, ds:data,ss:stk
mov ax, data
mov ds, ax
mov ah, 9
mov dx, offset upmessage
int 21h <-на одном форуме писали, что надо писать _int но тогда компилятор выдает ошибку.
mov ax, 4c00h
int 21h
main endp
code ends
end main ;
}
}
Так же я не понял надо ставить ли точку с запятой после каждой строчки. Компилятор выдает ошибку после каждой строчки кроме MOV и INT. Если вставить код на вывод идиночного символа eng "a", то отлачик кажит что в dl сидит русская буква "Я" , а при 21 прерывании выдается ошибка в процессе исполнения самого EXE файла.
8.6K
05 января 2006 года
DeadLOL
22 / / 27.09.2005
#include <stdio.h>

char format[] = "%s \n";
char data[] = "FUCK OFF";


void main( void )
{


__asm
{

mov eax, offset data
push eax
mov eax, offset format
push eax
call printf

pop ebx
pop ebx



}
}
5.5K
05 января 2006 года
Ded pendos
40 / / 13.05.2005
Ок, а как с прерываниями быть, мне их полюбому надо реализовывать?
Как написать 9h в сишнике-так же как 9h или иначе?
8.6K
06 января 2006 года
DeadLOL
22 / / 27.09.2005
Зачем тебе юзать ф-ции 21h если я показал альтернативный пример вывода строки если подумаешь то можешь заменить и 01h 02h тоже.... scanf также вызывается...
5.5K
07 января 2006 года
Ded pendos
40 / / 13.05.2005
Мне нужен код без использования сишных библиотек, а в си делается для упрощения использоания асмовского кода.
Пожалуйта напеши как написать int 21h на с++ как чисто асм код-или мануал кинь, а то я уже запарился искать по сети. Я студент и мне надо написать так как требует препод-препод меня мягко сказать не любит так, что надо делать тютелька в тютельку.
8.6K
09 января 2006 года
DeadLOL
22 / / 27.09.2005
Послушай как никак ты пишешь на с или с++ компилятор не даст такого чистого ехе как при компановке на асме так что по любому как ни как ты юзаешь компилятор с его библиотеками... я посмотрю насчет 21h смотри этот пост на днях скину че нить .... (надеюсь те не надо вызывать прерывание 10h...)
8.6K
09 января 2006 года
DeadLOL
22 / / 27.09.2005
Вообщем так проги компиленные на вс++ как ты знаешь работают в 3 кольце винды этот компилятор не даст тебе просто так обратится к 21 прерыванию... есть два выхода смена компилятора или посмотри альтернативный обработчик прерывания 21h

http://www.wasm.ru/article.php?article=1007001
14K
09 января 2006 года
DVA
16 / / 05.01.2006
Цитата:
Originally posted by Ded pendos
Мне нужен код без использования сишных библиотек, а в си делается для упрощения использоания асмовского кода.
Пожалуйта напеши как написать int 21h на с++ как чисто асм код-или мануал кинь, а то я уже запарился искать по сети. Я студент и мне надо написать так как требует препод-препод меня мягко сказать не любит так, что надо делать тютелька в тютельку.



Что-то меня ЭТА ТЮТЕЛЬКА не устраивает !!! :o
Ты уверен что препод задал тебе написать прогу в 32-х битном режиме, а не 16-и битном? В Microsoft все давно уже забыли про прерывания, начиная с Win 3.1. Даже в тухлой Windows 95 уже использовались API. Что касается прерывания int 21h - это бабушка DOS !!!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог