Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2010, 09:08   #41
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Tronix
"Далее, я уже писал про Turbo Debugger и ту тестовую программу, что на Си написана. Можно ловить по вызывам int 63h и смотреть что и как."
Я просмотрел тестовую программу через IDA и hiew32, но не нашел там int 63h (0CD63h). Может быть не там искал?
Mikl___ вне форума Ответить с цитированием
Старый 30.11.2010, 10:59   #42
I-Gor
 
Регистрация: 08.11.2010
Сообщений: 6
Сообщение

Начну с конца.
1. TD я пытался пользоваться еще до первого поста Tronix’а. Проблема в том, что резидент, будучи запущенным из-под TD, хоть и становится резидентным (простите за каламбур), но начинает некорректно работать. Тестовая прога, в частности, не получает от такого резидента значений. Поэтому от использования TD, по крайней мере, применительно к acp3_drv, мне пришлось отказаться.

2. Mikl___: «вот такая арифметика: mov dx,(offset begin + 0Fh)/16»
Если в листинге IDA написать
.code
org 0
seg_org equ $
org 100h
start: jmp begin

mov dx, (offset begin+0Fh)/16
mov ax, 3100h
int 21h
end_of_prog:
end start
то TASM при компиляции ругается (Relative quantity illegal) на строку mov dx, (offset begin+0Fh)/16. Не нравится почему-то TASM’у этот offset begin…

3. Mikl___: «…опиши, что возвращается в AX, BX, CX, DX при вызове AH=0 int 63h; AH=1 int 63h; AH=2 int 63h»
Вызовы int 63h при подключенной железке и неизменном состоянии во всех каналах измерения:
1) на входе AX=0000h. На выходе: AX=BX=CX=DX=0;.
2) на входе AX=0100h. На выходе: AX=0100h, BX=CX=DX=0;
3) на входе AX=0200h. На выходе: AX=00FF, BX=CX=DX=0.
Результаты стабильны и не зависят от количества вызовов int 63h при одном и том же значении AH.

Однако вызовы 63h при AH ={0, 1, 2} влияют на состояние регистров в последующих вызовах при AH =3. Например:
AH=0 --> AH=3:
AX: 03FF BX: 0000 CX: 0000 DX: 0000
(стабильно)

AH=1 --> AH=3:
AX: 0001 BX: C809 CX: 0000 DX: 001A
AX: 0002 BX: C781 CX: 0000 DX: 001B
AX: 0003 BX: C784 CX: 0000 DX: 001C
AX: 0004 BX: 0001 CX: 0000 DX: 001D
AX: 0005 BX: 0001 CX: 0000 DX: 001E
AX: 0006 BX: 0001 CX: 0000 DX: 001F
AX: 0007 BX: 0001 CX: 0000 DX: 0020
AX: 0000 BX: C805 CX: 0000 DX: 0021
AX: 0001 BX: C798 CX: 0000 DX: 0022
AX: 0002 BX: C777 CX: 0000 DX: 0023
AX: 0003 BX: C776 CX: 0000 DX: 0024
AX: 0004 BX: 0001 CX: 0000 DX: 0025
AX: 0005 BX: 0001 CX: 0000 DX: 0026
AX: 0006 BX: 0001 CX: 0000 DX: 0027

AH=2 --> AH=3:
AX: 0000 BX: EF09 CX: 0000 DX: 01A4
AX: 0007 BX: 0001 CX: 0000 DX: 01A4
AX: 0000 BX: EF2C CX: 0000 DX: 01A6
AX: 0002 BX: C773 CX: 0000 DX: 01A7
AX: 0003 BX: C780 CX: 0000 DX: 01A8
AX: 0000 BX: EF09 CX: 0000 DX: 01AA
AX: 0001 BX: EF08 CX: 0000 DX: 01AB
AX: 0000 BX: EF09 CX: 0000 DX: 01AC
AX: 0000 BX: EF08 CX: 0000 DX: 01AD
AX: 0000 BX: C807 CX: 0000 DX: 01AD
AX: 0000 BX: EF08 CX: 0000 DX: 01AE
AX: 0002 BX: C780 CX: 0000 DX: 01AF
AX: 0003 BX: C778 CX: 0000 DX: 01B0
AX: 0000 BX: EF09 CX: 0000 DX: 01B2
AX: 0001 BX: EF08 CX: 0000 DX: 01B3
AX: 0006 BX: 0001 CX: 0000 DX: 01B3
AX: 0000 BX: EF09 CX: 0000 DX: 01B4
AX: 0007 BX: 0001 CX: 0000 DX: 01B4
В последнем случае прибор вообще врет «как свидетель».

4. Mikl___: «…попробуй отключить обработчик 1Ch прерывания и отпишись, что из этого получится
Если «заглушить» int 1Ch командами
; mov dx,offset int_1Ch_entry
; mov ax,251Ch
; int 21h
фирменная тестовая прога вообще ничего не пишет, хотя запускается. Моя Бейсик-программа ловит нули в AX – DX после вызова int 63h.

Последний раз редактировалось I-Gor; 30.11.2010 в 18:31.
I-Gor вне форума Ответить с цитированием
Старый 30.11.2010, 11:04   #43
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

I-Gor
тогда вот так попробуй
;===========================
org 0
seg_org = $
org 100h
start: jmp begin

mov dx, (begin - seg_org +0Fh)/16
mov ah, 31h
int 21h
end start
;================================== =

Последний раз редактировалось Mikl___; 30.11.2010 в 13:15.
Mikl___ вне форума Ответить с цитированием
Старый 30.11.2010, 17:57   #44
I-Gor
 
Регистрация: 08.11.2010
Сообщений: 6
Хорошо

Mikl___:
«;===========================
org 0
seg_org = $
org 100h
start: jmp begin

mov dx, (begin - seg_org +0Fh)/16
mov ah, 31h
int 21h
end start
;================================== =»
Вот это – другое дело! Родился вполне жизнеспособный .com. Проверил. Работает. Так что, в вопросе о выделении памяти под резидент, думаю, поставлена окончательная точка.

Последний раз редактировалось I-Gor; 30.11.2010 в 18:20.
I-Gor вне форума Ответить с цитированием
Старый 02.12.2010, 05:37   #45
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

I-Gor
Видимо мы зашли в тупик в исследовании программы твоего резидента, поэтому самое время перейти к теоретической части работы платы твоего многоканального АЦП. То есть, как бы эту схему и программу к ней разрабатывал бы я сам. Итак, что мы имеем? 8-канальный АЦП, выдающий 8-ми или 10-ти или 12-ти разрядные данные (параметры АЦП можно узнать на кафедре -- это важно!). Общение с АЦП идет через порты ввода/вывода. Раз каналов 8 -- значит возможно несколько вариантов работы с АЦП.
1) Выделить на каждый канал по одному фиксированному порту ввода/вывода и последовательно опрашивать каждый канал изменяя только адрес порта
;------------------------------------------------
a1: mov dx,(номер_канала+базовый_адрес)
in AL,DX
mov [адрес_в_памяти],AL
inc номер_канала
and номер_канала,7
jmp a1
;----------------------------------------------
2) АЦП сам последовательно и циклично опрашивает каналы, мы работаем с одним единственным портом и по команде in AX,DX получаем в 3-х старших разрядах АХ номер канала, а в оставшихся младших разрядах результат измерения
;----------------------------------------------------------
a1: in AX,DX
mov [адрес_в_памяти],AX
jmp a1
;-----------------------------------------------------------------------
3) АЦП имеет один единственный порт ввода/вывода и мы командой out DX,AL посылаем туда номер канала, а по команде in AX,DX читаем результат измерения.
;-----------------------------------------------------
a1: mov dx,(базовый_адрес)
mov AL,номер_канала
out DX,AL
in AL,DX
mov [адрес_в_памяти],AL
inc номер_канала
and номер_канала,7
jmp a1
;------------------------------------------------------------------------
Первый вариант предполагает циклический опрос всех 8-ми каналов. Варианты 2 и 3 более универсальны и позволяют нам опрашивать любой канал и в любом порядке. Так как два первых варианта самые очевидные и простые в реализации (а мы не ищем легких путей), то попробуем разработать 3-ий вариант.

Последний раз редактировалось Mikl___; 02.12.2010 в 06:58.
Mikl___ вне форума Ответить с цитированием
Старый 02.12.2010, 06:07   #46
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

вероятно, многоканальный АЦП должен иметь (минимум) следующие входы/выходы:
1) 3 входа для адреса канала (2^3=8)
2) 8 или 10 или 12 выходов для цифрового кода
3) сигнал "Старт преобразования"
4) сигнал "Готов/занят"
возможно на него заходят сигналы
5) считывание
6) запись
7) сброс
предположим что на плате АЦП есть порт А (порт данных) откуда мы будем читать данные с АЦП, порт В (порт состояния) куда на один из разрядов приходит сигнал "Занят/готов" (пусть это будет 7-ой разряд) и с одного из разрядов снимается на АЦП сигнал "Старт" (пусть это будет 6-ой разряд) и порт С (порт номера канала) куда компьютер выставляет номер опрашиваемого канала.
;================================== ==================
mov dx,(порт С)
mov al,номер_канала
out dx,al; выставляем номер канала для АЦП
;-------------------------------------------------
mov dx,(порт B)
mov al,01000000b
out dx,al; сигнал на запуск АЦП
;-------------------------------------------------
a1: in al,dx
test al,10000000; сигнал "Занят/готов"
jz a1; ждем пока не появится сигнал о завершении преобразования
;---------------------------------------------------------------------
mov dx,(порт A)
in al,dx; получаем результат преобразования
(продолжение следует)
ж================================== =============================


I-Gor
в proc_5 замени
;================================== ==============
in al, dx ; читаем содержимое 320h порта в AL
mov ah, al ; AH = AL
inc dx ; DX = 321h
in al, dx ; читаем содержимое 321h порта в AL
xchg al, ah
dec dx
;================================== ==============================
на
;================================== ==============
in ax, dx ; читаем содержимое 320h порта в AX
;================================== ==============================
и посмотри что получится (возможно придется использовать вариант с in ax,dx / xchg al,ah)

Последний раз редактировалось Mikl___; 02.12.2010 в 06:59.
Mikl___ вне форума Ответить с цитированием
Старый 02.12.2010, 08:18   #47
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

При достаточно сложной логике, находящейся на плате АЦП (там тоже может быть микропроцессор) можно организовать обмен с многоканальным АЦП следующим образом:
;-------------------------------------------------------
mov dx,базовый_номер
a1: in al,dx
test al,10000000b
jz a1; ждем пока АЦП не перейдет в состояние готовности
mov al,установить_номер_канала
out dx,al; передали команду АЦП
mov al,номер_канала
out dx,al; передали команду АЦП
mov al,начало_преобразования
out dx,al; передали команду АЦП
a2: in al,dx
test al,10000000; сигнал "Занят/готов"
jz a2; ждем пока не появится сигнал о завершении преобразования
;---------------------------------------------------------------------
in al,dx; получаем результат преобразования от АЦП
mov [адрес_в_памяти],al
jmp a1

Последний раз редактировалось Mikl___; 02.12.2010 в 11:50.
Mikl___ вне форума Ответить с цитированием
Старый 02.12.2010, 18:09   #48
I-Gor
 
Регистрация: 08.11.2010
Сообщений: 6
Сообщение

Mikl___: «Видимо мы зашли в тупик в исследовании программы твоего резидента…»
Честно говоря, меня удивило твое сообщение. Я считал работу по существу выполненной, хотел задать еще пару-тройку вопросов по 63-му прерыванию и закрыть тему.

1. Насчет разрядности и порядка опроса.
Разрядность прибора на каждый аналоговый канал – 16 бит и не битом меньше. Преп даже удивился вопросу о разрядности, т. к. тестовая прога (ее скриншот я выкладывал в посте #34) ясно показывает 4 шестнадцатеричные цифры в результатах опроса каналов. В #34, равно как и в #42, я уже приводил состояние регистров после вызова int 63h с AX=3. Прерывание возвращает номер канала в младших (а не в старших) разрядах АХ, в остальных разрядах АХ получаются нули. Не о каких результатах измерения в AX (на выходе из int 63h) и речи быть не может. Этот результат возвращается в ВХ – те самые четыре шестнадцатеричные цифры, или 16 бит. В DX и CX, как ты уже отмечал, судя по всему, выходит порядковый номер измерения (младшая часть в DX, старшая, возможно, в CX). В этом смысле результаты, получаемые моей программой на Бейсике, сходятся с данными тестовой проги.

Однако в приборе кроме четырех аналоговых имеются еще и два релейных входа. Их внешние цепи могут находиться либо в замкнутом, либо в разомкнутом виде, нормальное состояние – разомкнутое. У нас к ним подключили две не фиксируемые кнопки, подобные кнопке Reset на системнике.

Если состояние этих входов не меняется, то опрос аналоговых каналов (причем без явного указания их номера на входе в int 63h!) идет последовательно от 0 до 7 (см. вложение к #34 или пост #42 в части AX=1 --> AX=3). Когда я готовил эти данные, то, для стройности картины, все датчики от прибора были отключены. Разница в результатах аналого-цифрового преобразования по каналам 0 - 3, связана, скорее всего, с внешними наводками.

То есть в указанных условиях при первом (условно) вызове int 63h и при входном AX=3 на выходе в AX получается канал 0, при втором вызове с AX=3 в AX – канал 1, при третьем вызове (тоже с AX=3) – канал 2, и т. д. до семи. Далее все повторяется сначала, т. е. int 63h при AX=3 на входе проводит последовательный циклический опрос. Другое дело – откуда числа от 0 до 7 в AX на выходе берутся. Они могут либо формироваться самой железкой, либо получаться программно. При первой гипотезе без принципиалки не разберешься (а принципиалка при выполнении курсовика не положена), при второй – достаточно внимательно рассмотреть листинг функции 3 прерывания 63h.

Самое интересное начинается, когда изменяется состояние релейных входов. Тогда последовательный отсчет каналов прерывается. В моменты нажатия и отпускания кнопок в АХ появляется канал 8, в BX – одно из значений {0, 1, 2, 3}, где 1 – нажата первая кнопка, 2 – нажата вторая кнопка, 3 – нажаты обе кнопки одновременно (при удержании какой-либо одной нажата вторая), 0 – кнопки отпущены. Причем фиксируется не само состояние дискретных входов, а именно изменение этого состояния. Далее прерванный опрос аналоговых каналов продолжается со следующего номера. Поясню это иллюстрацией:

AX: 0000 BX: C804 CX: 0000 DX: 015D
AX: 0001 BX: C804 CX: 0000 DX: 015E
AX: 0002 BX: C777 CX: 0000 DX: 015F
AX: 0003 BX: C780 CX: 0000 DX: 0160
AX: 0004 BX: 0001 CX: 0000 DX: 0161
AX: 0005 BX: 0001 CX: 0000 DX: 0162
AX: 0006 BX: 0001 CX: 0000 DX: 0163
AX: 0008 BX: 0002 CX: 0000 DX: 0164 нажата вторая кнопка
AX: 0007 BX: 0001 CX: 0000 DX: 0164
AX: 0000 BX: C807 CX: 0000 DX: 0165
AX: 0001 BX: C802 CX: 0000 DX: 0166
AX: 0002 BX: C780 CX: 0000 DX: 0167
AX: 0008 BX: 0000 CX: 0000 DX: 0167 отпущена вторая кнопка
AX: 0003 BX: C780 CX: 0000 DX: 0168
AX: 0004 BX: 0001 CX: 0000 DX: 0169
AX: 0008 BX: 0001 CX: 0000 DX: 0169 нажата первая кнопка
AX: 0005 BX: 0001 CX: 0000 DX: 016A
AX: 0008 BX: 0003 CX: 0000 DX: 016A в добавление к первой нажата вторая
AX: 0006 BX: 0001 CX: 0000 DX: 016B
AX: 0007 BX: 0001 CX: 0000 DX: 016C
AX: 0008 BX: 0000 CX: 0000 DX: 016D обе кнопки отпущены
AX: 0000 BX: C799 CX: 0000 DX: 016D
AX: 0001 BX: C803 CX: 0000 DX: 016E
AX: 0002 BX: C779 CX: 0000 DX: 016F

Последний раз редактировалось I-Gor; 02.12.2010 в 18:56.
I-Gor вне форума Ответить с цитированием
Старый 02.12.2010, 18:45   #49
I-Gor
 
Регистрация: 08.11.2010
Сообщений: 6
Стрелка

2. Насчет сигнала «Готов/занят».
Если опрашивать девайс (вызывать 63h при AX=3 на входе) слишком быстро, то получается примерно следующая картина:
AX: 0000 BX: C804 CX: 0000 DX: 015D результат по каналу 0
AX: 03FF BX: 0000 CX: 0000 DX: 0000
AX: 03FF BX: 0000 CX: 0000 DX: 0000

AX: 03FF BX: 0000 CX: 0000 DX: 0000
AX: 03FF BX: 0000 CX: 0000 DX: 0000
AX: 0001 BX: C804 CX: 0000 DX: 015E результат по каналу 1
AX: 03FF BX: 0000 CX: 0000 DX: 0000
AX: 03FF BX: 0000 CX: 0000 DX: 0000

AX: 03FF BX: 0000 CX: 0000 DX: 0000
AX: 03FF BX: 0000 CX: 0000 DX: 0000
AX: 0002 BX: C777 CX: 0000 DX: 015F результат по каналу 3
AX: 03FF BX: 0000 CX: 0000 DX: 0000

Следовательно, значение AX=03FFh в этом случае можно считать признаком занятости устройства.

3. О портах ввода-вывода.
Насчет портов вывода пока воздержусь, но вот рискну предположить, что портов ввода у прибора, по меньшей мере, два. Двенадцатью постами выше мы уже проводили эксперимент с заменой mov dx,[bx] … out dx,al (sub_2) на mov dx,320h. Не пашет прибор в итоге. Так что инструкцию mov dx,[bx] перед командой out пришлось реабилитировать.

4. Mikl___: «При достаточно сложной логике, находящейся на плате АЦП (там тоже может быть микропроцессор) можно организовать обмен…»

Ну, это уж ты, батенька, маху дал... Я еще в сентябре cпециально просил железку посмотреть. Системник, правда, открыть не разрешили, но вот железку дали (у них, по ходу, их несколько). Фото железки во вложении. Элементная база следующая: 5 операционников К174УД17А (из них 4 на входе); 3 триггера (один К555ТЛ2В и два К1533ТМ9); 10 счетчиков (5 x К555ИЕ19, 3 x К555ИЕ2, и по одному К555ИЕ5, К555ИЕ7); 5 мультиплексоров К155КП7; 6 буферных микросхем (2 x КМ555ЛИ1, 4 x КР1533ЛН2); преобразователь «напряжение – частота» (ПНЧ) КР1108ПП1 –1 шт.; аналоговый коммутатор КР590КН6 –1 шт; «сороконожка» (порт ввода-вывода) КР580ВВ55А. Ну, и резисторы, конденсаторы…
К удивлению своему, я не обнаружил там микросхему серии ПВ (АЦП в интегральном исполнении), это сильно упростило бы конструкцию. Причем минимум треть перечисленного хозяйства собственно к АЦП не имеет никакого отношения. Дело в том, что к прибору может подключаться еще и LCD-модуль (экранчик на фото вверху). В данной работе он не рассматривается, но в следующем семестре мне как пить дать припашут его программирование. Об этом известно точно. Несмотря на то, что железка довольно древней конструкции, экранчик этот вполне современный – DATA IMAGE CM1621 (CM160200). Он нужен для применения прибора во встраиваемых системах, чтобы не использовать компьютерный монитор. Упомянутые выше две кнопки позволяют избавиться и от клавиатуры. На экранчик этот выводит свои сообщения тестовая программа. Немного покопавшись в ней Turbo Debugger’ом, можно найти функции управления LCD. Ну, так вот. Часть схемы на плате как раз и нужна для подключения этого дисплея. Не исключено так же, что под него задействована и какая-то из функций 63h прерывания.

5. При разборе 63h мы предполагали, что единственный входной параметр там – значение AH (от 0 до 4). А, может быть, при некоторых значениях AH нужны еще какие-нибудь параметры в других регистрах? Может быть, ими и задают номер нужного канала (чтобы опрашивать только этот выбранный канал, а не восемь последовательно)? И может ли вообще этот номер задаваться извне (или это «личное дело» самой железки)? Честно говоря, кроме функции 3 int 63h я так и не уяснил смысл остальных (например, каким образом происходит сброс прибора). По-моему, нужно все-таки добить до конца 63h.
Вложения
Тип файла: zip sirius.zip (41.2 Кб, 7 просмотров)

Последний раз редактировалось I-Gor; 03.12.2010 в 16:11.
I-Gor вне форума Ответить с цитированием
Старый 03.12.2010, 04:08   #50
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

I-Gor
1) Может быть твоего преподавателя вопрос и удивил, но я, согласись, твой АЦП не видел, в данном случае все только через тебя. Вывод результата в виде 4 шестнадцатеричных цифр ни о чем не говорит: реально АЦП может быть и 8, и 10, и 12, и 16 разрядов.
2) Цитате «При достаточно сложной логике, находящейся на плате АЦП (там тоже может быть микропроцессор) можно организовать обмен…» предшествует «...как бы эту схему и программу к ней разрабатывал бы я сам…» и далее идут мои размышления.
3) Релейные входы пока рассматривать не будем.
4) При разборе 63h мы предполагали, что единственный входной параметр там – значение AH (от 0 до 4). А, может быть, при некоторых значениях AH нужны еще какие-нибудь параметры в других регистрах? Может быть, ими и задают номер нужного канала (чтобы опрашивать только этот выбранный канал, а не восемь последовательно)? И может ли вообще этот номер задаваться извне (или это «личное дело» самой железки)? Честно говоря, кроме функции 3 int 63h я так и не уяснил смысл остальных (например, каким образом происходит сброс прибора). По-моему, нужно все-таки добить до конца 63h.
А ты пишешь "Я считал работу по существу выполненной" а еще несколькими постами выше, где разбор программы практически и не начинался, ты уже писал:
«Следовательно, вторую часть задания групповыми усилиями mss и Tronx’а я считаю в принципе выполненной. Осталось только навести марафет. Ну, это уж мои проблемы. Если возникнут какие-то вопросы, напишу...
Собственно программа взаимодействия с пользователем там до неприличия проста. Это будет бесконечный цикл, выводящий на экран некую последовательность целых чисел (значение функции опроса). Потребуется также обработка нажатия какой-либо клавиши для выхода из этого бесконечного цикла, когда надоест. Возможно, нужна будет пара-тройка операторов для организации паузы внутри цикла, чтобы выводимая инфа не мельтешила на экране слишком часто. Для такой фигни, по-моему, достаточно и QBasic’а. Например:
DECLARE FUNCTION ACPquery ()
DO
PRINT ACPquery
IF INKEY$ = CHR$(27) THEN EXIT DO
LOOP
FUNCTION ACPquery

END FUNCTION
Можно, конечно, разукрасить экран, сделать более удобочитаемым вывод, однако особого смысла нет. «Соль» задачи не в этом: необходимо прописать функцию опроса (ACPquery в данном примере)... »
Там работы еще очень много
5) Мне до сих пор не понятна роль обработчика 1Ch прерывания, которое вызывается 19 раз в секунду. Не понятен вопрос с использованием портов, и даже не известно их количество, хотя номер базового порта, я думаю 320h...
6) Ты не написал о замене в proc_5 фрагмента
;================================== ==============
in al, dx ; читаем содержимое 320h порта в AL
mov ah, al ; AH = AL
inc dx ; DX = 321h
in al, dx ; читаем содержимое 321h порта в AL
xchg al, ah
dec dx
;================================== ==============================
на
;================================== ==============
in ax, dx ; читаем содержимое 320h порта в AX
;================================== ==============================
и посмотри что получится (возможно придется использовать вариант с in ax,dx / xchg al,ah)

Последний раз редактировалось Mikl___; 03.12.2010 в 04:29.
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Драйвер ISA устройства для DOS I-Gor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 12.11.2010 06:49
Драйвер для hp laserjet 1010 для windows 7 Юзер7 Общие вопросы C/C++ 6 04.08.2010 09:17
драйвер мыши для C++3.0 for dos masta777 Общие вопросы C/C++ 3 20.06.2009 17:31
Разработка драйвер USB-HID устройства _dx Win Api 5 10.06.2009 18:34
Для кадого ли устройства есть свой контроллер? Elm0 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 21.06.2007 20:42