Консультация № 178572
22.05.2010, 20:16
0.00 руб.
0 17 1
Здравствуйте!

Помогите пожалуйста написать программу по работе с CD проигрывателем. Цель программы - изучение возможностей драйвера CD-ROM msdex.
Задание - Реализовать 1) функцию получения информации о диске; или 2) реализовать функцию продолжения проигрывания (одно из двух).

Предпочтителен - TASM, но буду рад и другим вариантам.
Процессор - 64-битный.

В приложении пример реализации функции открытия/закрытия дверцы CD ROM.

Спасибо!

Приложение:
;программа, реализующая открытие и закрытие дверцы CD ROM
jumps
locals
model compact
include fmt.inc
include codes.inc
public _CheckCD ;проверить наличие драйвера
public _DoorOpen ;открыть дверцу
public _DoorClose ;закрыть дверцу

DATA SEGMENT public
num_drives db ?
first_drive db ?
tabl ReadWriteL_Hdr ?
help db ?
help1 db ?
DATA ENDS

CODE SEGMENT
ASSUME ds:DATA, cs:CODE

_CheckCD PROC C FAR
;возвращает в AL к-во устройств
;Если 0 - нет MSCDEX
; проверка наличия MSCDEX
push ds
push DATA
pop ds
mov ax, 1500H ;получить число устройств
xor bx,bx
int 2FH
;RETURN:
;BX - количество устройств
;CX - буква первого устройства
mov first_drive,cl
mov num_drives,bl
mov ax, 150BH ;получить число устройств
xor bx,bx
int 2FH
cmp bx,0ADADH
jne @@egog
jmp short @@exit
@@egog:
xor al,al
xor cl,cl
@@exit:
mov al,num_drives
mov cl,first_drive
pop ds
retf
ENDP _CheckCD

;---------------------------------------------------------------
_DoorOpen PROC C FAR
ARG dev:byte, letter:byte
push ds
push DATA
pop ds

mov al,num_drives
mov cl,first_drive
mov dev, al
mov letter, cl

mov bx,offset tabl ; заполнение заголовка
mov help,0 ;открыть дверь
sendopen:
mov [bx].rh_Len,size Ioctl_Hdr
mov al,dev
mov [bx].rh_Subunit,al
mov [bx].rh_Code,cmIoctl_Output
mov [bx].ioctl_media,0
mov [bx].ioctl_xfer_off,offset help
push ds
pop [bx].ioctl_xfer_seg
mov [bx].ioctl_nbytes,1
mov [bx].ioctl_sector,0
mov word ptr [bx].ioctl_volid,0
mov word ptr [bx].ioctl_volid+2,0


push es
push ds
pop es
mov ax,1510h
mov bx,offset tabl
xor cx,cx
mov cl,letter
int 2fh
mov ax,[bx].rh_Status
pop es
pop ds
pop bp
retf
ENDP _DoorOpen

;---------------------------------------------------------------
_DoorClose PROC C FAR
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl ; заполнение заголовка
mov help,5 ; закрыть дверь
jmp sendopen
ENDP _DoorClose

startup:
mov ax,DATA
mov ds,ax
call _CheckCD
call _DoorOpen
call _DoorClose
mov ax,4c00h
int 021h
CODE ENDS
end startup

Обсуждение

давно
Посетитель
7438
7205
23.05.2010, 18:22
общий
Гальцов Андрей:
Приведите файлы fmt.inc и codes.inc
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
23.05.2010, 18:34
общий
Лысков Игорь Витальевич:
_CheckCD PROC C FAR ;тестировать CD ROM
;возвращает в AL к-во устройств
;Если 0 - нет MSCDEX
; проверка наличия MSCDEX
push ds
push DATA
pop ds
mov ax, 1500H ;получить число устройств
xor bx,bx
int 2FH
;RETURN:
;BX - количество устройств
;CX - буква первого устройства
mov first_drive,cl
mov num_drives,bl
mov ax, 150BH ;получить число устройств
xor bx,bx
int 2FH
cmp bx,0ADADH
jne @@egog
jmp short @@exit
@@egog:
xor al,al
xor cl,cl
@@exit:
mov al,num_drives
mov cl,first_drive
pop ds
retf
ENDP _CheckCD

;---------------------------------------------------------------
_DoorOpen PROC C FAR ;открыть дверцу
ARG dev:byte, letter:byte
push ds
push DATA
pop ds

mov bx,offset tabl ; заполнение заголовка
mov help,0 ;открыть дверь
sendopen:
mov [bx].rh_Len,size Ioctl_Hdr
mov al,dev
mov [bx].rh_Subunit,al
mov [bx].rh_Code,cmIoctl_Output
mov [bx].ioctl_media,0
mov [bx].ioctl_xfer_off,offset help
push ds
pop [bx].ioctl_xfer_seg
mov [bx].ioctl_nbytes,1
mov [bx].ioctl_sector,0
mov word ptr [bx].ioctl_volid,0
mov word ptr [bx].ioctl_volid+2,0

push es
push ds
pop es
mov ax,1510h
mov bx,offset tabl
xor cx,cx
mov cl,letter
int 2fh
mov ax,[bx].rh_Status
pop es
pop ds
pop bp
retf
ENDP _DoorOpen

;---------------------------------------------------------------
_DoorClose PROC C FAR ;закрыть дверцу
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl ; заполнение заголовка
mov help,5 ; закрыть дверь
jmp sendopen
ENDP _DoorClose

_Reset PROC C FAR ;сброс
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl ; заполнение заголовка
mov help,2 ; резет
jmp sendopen
ENDP _Reset
Неизвестный
23.05.2010, 18:35
общий
Лысков Игорь Витальевич:
Оно?...
давно
Посетитель
7438
7205
24.05.2010, 02:45
общий
Гальцов Андрей:
Вы привели то ж самое, что и в вопросе.
В самом начале есть два include-а
include fmt.inc
include codes.inc
Вот эти два файлика и хотелось бы увидеть
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
24.05.2010, 13:04
общий
Лысков Игорь Витальевич:
Ммм...в методичке по этому поводу ничего нет...
Неизвестный
25.05.2010, 15:10
общий
Гальцов Андрей:
Цитата: 150353
Процессор - 64-битный.

А при чем здесь 64-битный процессор? В задании:
Цель программы - изучение возможностей драйвера CD-ROM msdex.

(правильно: MSCDEX)
Так что, определенно, Вам нужна программа для MSDOS (16-битный код).
Да и пример Вы привели для реального режима, под MSDOS.
Неизвестный
25.05.2010, 19:45
общий
amnick:
64 - потому что в руководстве к заданию вопроса сказано указать процессор на котором будет запускать данная программа...
msdex - в метод указаниях так написано , преподаватели некоторые наверно как и студенты уже деградируют...
пример - опять же, какой был в методичке...
Неизвестный
25.05.2010, 20:17
общий
Гальцов Андрей:
Цитата: 150353
64 - потому что в руководстве к заданию вопроса сказано указать процессор на котором будет запускать данная программа...

Вы несколько неправильно поняли.

  • Какой процессор используется. Если х86-совместимый, то можно не указывать. За исключением случая, когда необходимы специальные возможности (например, MMX, 3D-NOW!, SSE, SSE2, ...);
  • Какая платформа (для х86-совместимых: ДОС/Windows/*nix);

Довольно много вопросов задается для не-x86-совместимых процессоров.
Указав, что 64-битный процессор, Вы тем самым указали, что требуется использовать специальные возможности именно 64-битного процессора.
Вам стоило указать, под какую платформу писать. В данном случае, из вопроса следует, что под DOS, но это не всегда понятно.
давно
Посетитель
7438
7205
25.05.2010, 20:51
общий
Гальцов Андрей:
msdex - в метод указаниях так написано , преподаватели некоторые наверно как и студенты уже деградируют...
Хороши же у Вас преподаватели... Впрочем, может быть обычной опиской, не переделывать же из-за этого всю методичку. Но даже и в этом случае следовало бы исправить от руки. К сожалению, студенты понимают все буквально...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
25.05.2010, 21:01
общий
Гальцов Андрей:
1) функцию получения информации о диске

Я сделал кое-что по этому пункту. В связи с этим вопрос — а какую именно информацию? Это все довольно трудоемко (уже больше 300 строк, правда, вместе с комментариями, да и кое-какой мусор потом удалится), так что уточните, пожалуйста. В любом случае, на сегодня хватит. Продолжу завтра, если никто до тех пор не сделает.
Неизвестный
27.05.2010, 19:33
общий
amnick:
Буду очень благодарен за уже сделанное...мне лишь бы какая информация...просто уже сдавать надо...экзамен скоро ...главное показать что бы хоть что-то работало...
Спасибо за такое серьезное отношение к моему вопросу
Неизвестный
28.05.2010, 23:07
общий
31.05.2010, 14:26
это ответ
Здравствуйте, Гальцов Андрей.

Программа в приложении возвращает кое-какую информацию:
- версия MSCDEX;
- кол-во CD-приводов и их буквы;
Для каждого привода:
- статус (код завершения операции и расшифровка 5-ти младших битов);
- размер сектора (вообще-то, для CD всегда 2048 байт);
- если поддерживается, то размер raw сектора (тоже всегда 2352 байт);
- размер диска в секторах;
- номера начальной и конечной дорожек;
- стартовая точка дорожки lead-out.

Компилировать программу в COM-файл.

Тестировать только в чистом DOS! Иначе работает неверно (в Win95/98 не проверял).
Кроме того, у меня на этом компьютере только один привод, поэтому работоспособность с несколькими не проверена.

К сообщения приложен файл "Microsoft MS-DOS CD-ROM Extensions 2.1" - описание программного интерфейса MSCDEX (на английском).

Успехов!




Приложение:
; Отображение некоторой информации о CD-приводе и диске
; с использованием функций MSCDEX

locals @@
.model tiny

; Заголовок запроса для обращения к драйверу
RQ_HEADER STRUC
bSize DB ? ; Length in bytes of request header
bSubUnit DB ? ; Subunit code for minor devices
bCmd DB ? ; Command code field
wStatus DW ? ; Status
bReserved DB 8 dup (?)
RQ_HEADER ENDS

; Запрос IOCTL Input
IOCTL_Input STRUC
rh RQ_HEADER <>
bMediaDescriptor DB ?
lpTransferAddress DD ?
wDataSize DW ?
wStartSector DW ?
lpVolID DD ?
IOCTL_Input ENDS

; Запрос на получение информации о компакт-диске
TDiskInfo STRUC
bControl DB ?
bLowest DB ?
bHighest DB ?
dwTotal DD ?
TDiskInfo ENDS

; Запрос для определения текущего состояния CD-привода
TDeviceStatus STRUC
bControl DB ?
dwParam DD ?
TDeviceStatus ENDS

; Запрос для определения общего количества секторов на компакт-диске
TVolumeSize STRUC
bControl DB ?
dwVolumeSize DD ?
TVolumeSize ENDS

TSectorSize STRUC
bControl DB ?
bReadMode DB ?
wSectorSize DW ?
TSectorSize ENDS

.data
msgHello db 'CDINFO',13,10,10,'$'
msgNoMSCDEX db 'MSCDEX is not installed'
eol db 13,10,'$'
msgVerMSCDEX db 'MSCDEX version: '
strNum db 16 dup (0)
msgFound db ' CD drive(s) found',13,10,'$'
msgLetters db 'CD-ROM letters: $'
msgStatus db 'Status of CD Drive x: '
strStatus db '0000',13,10,'$'
msgFailed db '-- failed',13,10,'$'
msgSectorSize db 'Sector Size: '
strSectorSize db ' bytes',13,10,'$'
msgRawSecSize db 'Raw Sector Size: '
strRawSecSize db ' bytes',13,10,'$'
msgVolumeSize db 'Volume Size: '
strVolumeSize db ' blocks',13,10,'$'
msgLowestTrack db 'Lowest track number $'
msgHighestTrack db 'Highest track number $'
msgLeadOutTrack db 'Starting point of the lead-out track $'

msgBit0_0 db 9,'Door closed$'
msgBit0_1 db 9,'Door open$'

msgBit1_0 db 9,'Door locked$'
msgBit1_1 db 9,'Door unlocked$'

msgBit2_0 db 9,'Supports only cooked reading$'
msgBit2_1 db 9,'Supports cooked and raw reading$'

msgBit3_0 db 9,'Read only$'
msgBit3_1 db 9,'Read/write$'

msgBit4_0 db 9,'Data read only$'
msgBit4_1 db 9,'Data read and plays audio/video tracks$'

Table_Status0 dw msgBit0_0, msgBit1_0, msgBit2_0, msgBit3_0, msgBit4_0
SIZE_TBL_STATUS EQU $-Table_Status0
Table_Status1 dw msgBit0_1, msgBit1_1, msgBit2_1, msgBit3_1, msgBit4_1

nDrives dw 0
nFirst db 0
cdLetters db 26 dup(0)
oneLetter db 'x $'
hex db '0123456789ABCDEF'
drive dw 0

devStatus TDeviceStatus <6,0> ; Состояние CD-привода
volumeSize TVolumeSize <8,0> ; объем устройства
sectorSize TSectorSize <7,0,0>
diskInfo TDiskInfo <10,0,0,0>

.code
.startup

cld
mov ah,9
mov dx,offset msgHello
int 21h

; Проверяем, установлена ли программа MSCDEX
mov ax,1500h ; получить число устройств
xor bx,bx
int 2Fh
; BX - количество устройств
; CX - номер первого устройства (0 - A:, 1 – B: и т.д.)
test bx,bx
jnz @@ok

mov ah,9
mov dx,offset msgNoMSCDEX
int 21h
int 20h

@@ok:
mov [nDrives],bx ; BX - количество устройств
mov [nFirst],cl ; CX - номер первого устройства (0 - A:, 1 – B: и т.д.)

; Определяем и выводим версию MSCDEX
mov ax,150Ch ; определить версию MSCDEX
int 2Fh
; BH = старший номер верии MSCDEX, BL = младший

xor ax,ax
mov al,bh
push bx
mov di,offset strNum
call num2str ; преобразуем в строку старший номер версии

mov al,'.' ; десятичная точка
stosb

pop ax
xor ah,ah
call num2str ; преобразуем в строку младший номер версии

mov ax,0A0Dh ; Добавляем конец строки
stosw
mov byte ptr [di],'$'

mov ah,9 ; выводим версию MSCDEX
mov dx,offset msgVerMSCDEX
int 21h

; Показываем количество найденных CD-приводов
mov ax,[nDrives] ; преобразуем число CD-приводов в строку
mov di,offset msgFound
call num2str
mov ah,9
mov dx,offset msgFound
int 21h

; Получаем массив номеров CD приводов
mov ax,150Dh ; получение номеров устройств чтения CD-ROM
mov bx,offset cdLetters
int 2Fh

; Отображаем обозначения всех устройств CD-ROM
mov ah,9
mov dx,offset msgLetters
int 21h

mov cx,[nDrives] ; число CD-приводов, ненулевое
mov ah,9 ; AH=9 - вывод строки
mov dx,offset oneLetter
@@next_letter:
mov al,[bx]
add al,'A'
mov [oneLetter],al
int 21h
inc bx
loop @@next_letter
mov dx,offset eol
int 21h

; Цикл по всем CD-приводам
mov cx,[nDrives] ; число CD-приводов, ненулевое
mov si,offset cdLetters
@@next_drive:
push cx

lodsb
mov cl,al ; номер привода
add al,'A' ; буква привода для сообщения
mov [strStatus-3],al
xor ch,ch
mov [drive],cx

; запрашиваем и отображаем статус привода
call GetDeviceStatus
push ax
mov di,offset strStatus
call word2hex
mov ah,9
mov dx,offset msgStatus
int 21h
pop ax
test ah,80h ; ошибка?
jz @@ok2

mov ah,9 ; да, ошибка
mov dx,offset msgFailed
int 21h
jmp short @@sect_size

@@ok2:
; расшифровываем 5 младших битов статуса привода
mov ch,byte ptr [devStatus].dwParam
mov ah,9
mov bx,offset Table_Status1-2 ; указатель на конец таблицы сообщений
mov cl,10000b
@@next_bit:
mov dx,[bx] ; адрес сообщения, когда бит = 0
test ch,cl
jz @@bit0
mov dx,[bx+SIZE_TBL_STATUS] ; адрес сообщения, когда бит = 1
@@bit0:
int 21h
mov dx,offset eol ; переход на новую строку
int 21h
dec bx ; перемещаем указатель в таблице
dec bx
shr cl,1 ; сдвигаем битовую маску
jnz @@next_bit

@@sect_size:
; запрашиваем и отображаем размер сектора
mov cx,[drive]
;следующее поле необходимо обнулить, иначе размер сектора для всех CD-приводов, кроме первого, может отображаться неверно
;(будет показывать размер raw сектора после того, как встретится привод, поддерживающий чтение в raw)
mov [sectorSize.bReadMode],ch ; здесь CH=0
call GetSectorSize
mov di,offset strSectorSize
mov ax,[sectorSize.wSectorSize]
call num2str
mov ah,9
mov dx,offset msgSectorSize
int 21h

; если поддерживается, то запрашиваем и отображаем размер raw сектора
test byte ptr [devStatus].dwParam,100b
jz @@skip_raw

mov [sectorSize.bReadMode],1
mov cx,[drive]
call GetSectorSize
mov di,offset strRawSecSize
mov ax,[sectorSize.wSectorSize]
call num2str
mov ah,9
mov dx,offset msgRawSecSize
int 21h

@@skip_raw:
; запрашиваем и отображаем объем устройства (в секторах)
mov cx,[drive]
call GetVolumeSize

mov di,offset strVolumeSize
.386
mov eax,[volumeSize.dwVolumeSize]
.8086
call long2str
mov ah,9
mov dx,offset msgVolumeSize
int 21h

; запрашиваем и отображаем информацию о диске
mov cx,[drive]
call GetDiskInfo

xor ax,ax
mov al,[diskInfo.bLowest]
mov dx,offset msgLowestTrack
mov cx,offset num2str
call diskInfoMsg

xor ax,ax
mov al,[diskInfo.bHighest]
mov dx,offset msgHighestTrack
mov cx,offset num2str
call diskInfoMsg
.386
mov eax,[diskInfo.dwTotal]
.8086
mov dx,offset msgLeadOutTrack
mov cx,offset long2str
call diskInfoMsg

pop cx
dec cx ; счетчик CD-приводов
jz @@end_loop
jmp @@next_drive
@@end_loop:

int 20h

;-------------------------------------------------
; Определение состояния CD-привода
; Вход: CX = номер привода
;
; The status word is 0 on entry and is set by the device driver.
;
; Bit 15 - Error bit
; Bit 14-10 - Reserved
; Bit 9 - Busy
; Bit 8 - Done
; Bit 7-0 - Error code (bit 15 on)
;-------------------------------------------------
GetDeviceStatus PROC PASCAL
LOCAL cmd: IOCTL_Input

mov word ptr [cmd.lpTransferAddress], offset devStatus
mov [cmd.wDataSize],5
mov [devStatus.bControl],6 ; Device Status

_call_driver:
xor ax,ax
mov [cmd.rh.bSize],26
mov [cmd.rh.bSubUnit],al
mov [cmd.rh.bCmd],3 ; IOCTL INPUT

mov [cmd.bMediaDescriptor],al
push DS
pop word ptr [cmd.lpTransferAddress+2]
mov [cmd.wStartSector],ax
mov word ptr [cmd.lpVolID],ax
mov word ptr [cmd.lpVolID+2],ax

push SS
pop ES
lea bx,[cmd]
mov ax,1510h
int 2Fh ; CX = номер CD-привода
mov ax,[cmd.rh.wStatus]
ret
GetDeviceStatus ENDP

;-------------------------------------------------
; Определение размера сектора компакт-диска
; Вход: CX = номер привода
;-------------------------------------------------
GetSectorSize PROC PASCAL
LOCAL cmd: IOCTL_Input

mov word ptr [cmd.lpTransferAddress], offset sectorSize
mov [cmd.wDataSize],4
mov [sectorSize.bControl],7 ; Return Sector Size
jmp _call_driver
GetSectorSize ENDP

;-------------------------------------------------
; Определение объема компакт-диска
; Вход: CX = номер привода
;-------------------------------------------------
GetVolumeSize PROC PASCAL
LOCAL cmd: IOCTL_Input

mov word ptr [cmd.lpTransferAddress], offset volumeSize
mov [cmd.wDataSize],5
mov [volumeSize.bControl],8 ; Return Volume Size
jmp _call_driver
GetVolumeSize ENDP

;-------------------------------------------------
; Получение информации о компакт-диске
;-------------------------------------------------
GetDiskInfo PROC PASCAL
LOCAL cmd: IOCTL_Input

mov word ptr [cmd.lpTransferAddress], offset diskInfo
mov [cmd.wDataSize],7
mov [diskInfo.bControl],10 ; Audio Disk Info
jmp _call_driver
GetDiskInfo ENDP

;-------------------------------------------------
; Преобразование числа в строку
; Вход:
; AX = число
; DI = адрес строки
; Выход:
; DI - указывает на байт за концом строки
; CX = 0
;-------------------------------------------------
num2str PROC
xor cx,cx ; обнуляем счетчик цифр
mov bx,10 ; основание системы счисления
@@1:
xor dx,dx ; будем делить DX:AX на BX
div bx ; DX = последняя цифра
push dx ; мы получаем цифры в обратном порядке
inc cx ; счетчик цифр
test ax,ax ; повторяем, пока частное в AX != 0
jnz @@1

pop_string: ; формируем строку из цифр
mov dx,di ; для вывода на экран
@@2:
pop ax ; извлекаем очередную цифру из стека
add al,'0' ; переводим её в символ
stosb ; переносим в строку
loop @@2
ret
num2str ENDP

;-------------------------------------------------
; Преобразование длинного целого числа в строку
; Вход:
; EAX = число
; DI = адрес строки
; Выход:
; DI - указывает на байт за концом строки
; CX = 0
;-------------------------------------------------
long2str PROC
.386
xor cx,cx ; обнуляем счетчик цифр
mov ebx,10 ; основание системы счисления
@@1:
xor edx,edx ; будем делить EDX:EAX на BX
div ebx ; EDX = последняя цифра
push dx ; мы получаем цифры в обратном порядке
inc cx ; счетчик цифр
test eax,eax ; повторяем, пока частное в EAX != 0
jnz @@1
jmp pop_string
.8086
long2str ENDP

;-------------------------------------------------
; Преобразование числа в 16-ричное представление
; Вход:
; AX = число
; DI = адрес строки
; Выход:
; DI - указывает на байт за концом строки
;-------------------------------------------------
word2hex PROC
push ax
mov al,ah
call byte2hex_internal
pop ax
byte2hex:
mov ah,al
byte2hex_internal:
.286
shr al,4
mov bx,offset hex
xlat
stosb
mov al,ah
and al,0Fh
xlat
stosb
ret
word2hex ENDP

;------------------------------------------------------
; вспомогательная функция для вывода информации о диске
; Вход:
; (E)AX = число
; DX = адрес сообщения
; CX = адрес функции преобразования числа в строку
;------------------------------------------------------
diskInfoMsg proc
push ax
mov ah,9
int 21h
pop ax
mov di,offset strNum
call cx ; преобразуем в строку младший номер версии
mov ax,0A0Dh ; Добавляем конец строки
stosw
mov byte ptr [di],'$'
mov ah,9
mov dx,offset strNum
int 21h
ret
diskInfoMsg endp

END
Прикрепленные файлы:
5
Спасибо, спасибо, спасибо!...
Неизвестный
28.05.2010, 23:11
общий
Гальцов Андрей:
На вопросы, если у Вас будут, отвечу после выходных.
Неизвестный
31.05.2010, 13:51
общий
Заметил ошибку — нужно добавить выделенную строку, иначе размер сектора для всех CD-приводов, кроме первого, может отображаться неверно (будет показывать размер raw сектора после того, как встретится привод, поддерживающий чтение в raw):

Код:
@@sect_size:
; запрашиваем и отображаем размер сектора
mov cx,[drive]
mov [sectorSize.bReadMode],ch ; здесь CH=0
call GetSectorSize

давно
Посетитель
7438
7205
31.05.2010, 14:26
общий
Я внес исправление в ответ (вместе с комментарием)
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
31.05.2010, 21:27
общий
Лысков Игорь Витальевич:
Спасибо!)
А можно еще такой воросо...как это "запускать программу через com"?...потому что я всегда запускаю через tasm.bat, где параметром передаю ему файл с кодом программы...
давно
Посетитель
7438
7205
31.05.2010, 21:48
общий
Гальцов Андрей:
Конечно, можно
Под "запускать программу через com", по-видимому, понимается создать файл формата COM. (Хотя оборот, конечно, хитрый)
Для этого необходимо, чтобы tlink вызывался с параметром /t (без параметра будет создан EXE-файл)
Или явно, или в bat-файле...
В Вашем случае, файл tasm.bat должен содержать:
tasm %1
tlink /t %1

Тогда вызывая tasm.bat name, получим name.com
Удачи!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа