Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |
Ламерский ответ 10.05.02 12:30 Число просмотров: 1021
Автор: Moderator Статус: Незарегистрированный пользователь
|
> скомпилить в obj и прилинковать к остальным obj (если в VC, > то просто включить в проект asm.obj и оно само допрёт, что > делать) > > в асмовских вставках кажется нельзя делать процедуры > если только в каких-нить продвинутых компилерах А инфу по всему этому где можно посмотреть? У меня все, что есть ничего подобного ен описывает! 8(
|
|
<programming>
|
Ламерский вопрос 10.05.02 12:06
Автор: Moderator Статус: Незарегистрированный пользователь
|
Как вставить следующий асм-код в Си код?
.model small
.stack 100h
.data
buff db 1024 dup (0)
.code
MAIN PROC
mov ax,@data
mov ds,ax
mov ax,440dh ; Выделяем для себя доступ
mov bl,81h
mov bh,1
mov cx,084Bh
mov dl,2
xor dh,dh
int 21h
mov [buff+67h],00h; Пишем на второй винт
mov al,81h
mov cx,128
mov dx,0
mov bx,offset buff
int 26h
mov ax, 440Dh; Закрываем доступ
mov bl,81h
xor bh,bh
mov cx,086Bh
int 21h
mov ah,4ch
int 21h
MAIN ENDP
END MAIN
|
 |
Ламерский ответ 10.05.02 12:25
Автор: ggg <ggg> Статус: Elderman
|
скомпилить в obj и прилинковать к остальным obj (если в VC, то просто включить в проект asm.obj и оно само допрёт, что делать)
в асмовских вставках кажется нельзя делать процедуры
если только в каких-нить продвинутых компилерах
|
 |  |
Ламерский ответ 10.05.02 12:30
Автор: Moderator Статус: Незарегистрированный пользователь
|
> скомпилить в obj и прилинковать к остальным obj (если в VC, > то просто включить в проект asm.obj и оно само допрёт, что > делать) > > в асмовских вставках кажется нельзя делать процедуры > если только в каких-нить продвинутых компилерах А инфу по всему этому где можно посмотреть? У меня все, что есть ничего подобного ен описывает! 8(
|
 |  |  |
Ламерский ответ++ 10.05.02 14:19
Автор: Chingachguk <Chingachguk> Статус: Member Отредактировано 10.05.02 14:29 Количество правок: 1
|
> А инфу по всему этому где можно посмотреть? У меня все, что > есть ничего подобного ен описывает! 8(
Хотел заметить, что твой код 16-ти битный и он вызывает прерывания дос. Если ты его воткнешь в win32-код, то все рухнет ;)
Извини, если сказал банальность !
ЗЫ: Лучше делать асм-вставки в VC, видимо. asm {} end; Ну это уже сказали;
ЗЫЫ: Если ты нарыл, что можно окрыть запись через IOCTL(44h of int 21h), то есть шанс вызвать из win32 CreateFile(\\vin32) + DeviceIOControl это - меня как -то Zef научил ;) Инфа есть в MSDN + могу кодом поделиться, но я вызывал int 21h, AX=73xxh, а тебе надо там другие константы нарыть(те сделать win32 вызов 44h of int 21h).
|
 |  |  |  |
[C++] Ламерский ответ++ 10.05.02 14:50
Автор: Moderator Статус: Незарегистрированный пользователь
|
> ЗЫЫ: Если ты нарыл, что можно окрыть запись через IOCTL(44h > of int 21h), то есть шанс вызвать из win32 > CreateFile(\\vin32) + DeviceIOControl это - меня как -то > Zef научил ;) Инфа есть в MSDN + могу кодом поделиться, но > я вызывал int 21h, AX=73xxh, а тебе надо там другие > константы нарыть(те сделать win32 вызов 44h of int 21h). Дело в том, что я ток разбираюсь и все эти вызовы мне еще надо научиться делать! Поэтому и спрашивал хелпы! С мсдн косяк, ппж ток смогу диск достать! а ща в инете ищу может чего подскажите!? Код бы ОЧЕНь пригодился! Кинь на мыло если не трудно! wDevil@yandex.ru
|
 |  |  |
для какого асма и компилера ? 10.05.02 12:56
Автор: ggg <ggg> Статус: Elderman
|
если всё от MS то так:
masm -c filename.asm
потом в VC говоришь Project->Add to Project->Files->filename.obj
:)
если тебе не обязательно именно такую процедуру на асме, то лучше расковырять её и вставить в С
void AsmProc(void)
{
_asm
{
// асм-код без всяких заголовков
};
}
|
 |  |  |  |
И для какой ОС? 10.05.02 15:00
Автор: :-) <:-)> Статус: Elderman Отредактировано 10.05.02 15:03 Количество правок: 1
|
Надо конкретнее формулировать вопрос.
Если это делается под 16-битный компилятор (DOS MZ-exe/Win3.1 NE-exe), то можно просто вставить этот код в _asm вставку.
В Win9x IOCTL и Int 25h/26h надо вызывать через vwin32.vxd, а в NT/2k совсем по-другому.
// Пример чтения Boot-сектора через Int 25h для Win9x
#define Not_VxD
#include <windows.h>
#include <stdio.h>
#include "vwin32.h"
void main()
{
HANDLE hVWin32;
DIOC_REGISTERS regs;
DWORD cb;
char Buf[512];
hVWin32 = CreateFile("\\\\.\\vwin32", 0, 0, NULL, 0, 0, NULL);
// Lock logical volume
regs.reg_EAX = 0x440D;
regs.reg_EBX = 0x103; // Lock level 1, drive C:
regs.reg_ECX = 0x84A;
regs.reg_EDX = 7;
DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_IOCTL,
®s, sizeof(regs),
®s, sizeof(regs), &cb, NULL);
if (regs.reg_Flags & 1)
printf("Error: Couldn't lock volume!\n");
// Read Boot-sector
regs.reg_EAX = 2; // C:
regs.reg_EBX = (DWORD)Buf;
regs.reg_ECX = 1; // read 1 sector
regs.reg_EDX = 0;
DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_INT25,
®s, sizeof(regs),
®s, sizeof(regs), &cb, NULL);
if (regs.reg_Flags & 1)
printf("Error: 0x%X", regs.reg_EAX);
// Unlock logical volume
regs.reg_EAX = 0x440D;
regs.reg_EBX = 3; // C:
regs.reg_ECX = 0x86A;
DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_IOCTL,
®s, sizeof(regs),
®s, sizeof(regs), &cb, NULL);
CloseHandle(hVWin32);
}
---
|
|
|