Другие языки программирования и технологии

Объясните команды Си/ассемблер

1) unsigned char byte 18;
2)scan=inportb(0x60);
3) byte17=peekb(0x40,0x17);
4)old=getvect(9);
5)mov a,ch;
6)mov x,cx;
7) case 5:printf( "IRQ 5 ");break;
1) unsigned char byte 18;
Ошибка синтаксиса

2)scan=inportb(0x60);
в переменную scan возвращается значение функции (скорее всего чтение порта)
3) byte17=peekb(0x40,0x17);
макрос чтения по прямому адресу памяти
4)old=getvect(9);
в переменную old возвращается значение функции (скорее всего пользовательская функция)
5)mov a,ch;
6)mov x,cx;
скорее всего a и x переменные, в которые заносится значения регистров ch и cx
7) case 5:printf( "IRQ 5 ");break;
метка оператора switch при равенстве 5 выполняются printf( "IRQ 5 "); и break; (выход из оператора switch)
Виктор Кунц
Виктор Кунц
82 839
Лучший ответ
Сергей Мутаф byte17=peekb(0x40,0x17) и где здесь байт памяти, а где смещение, это какой то скан код клавиатуры?
Сергей Мутаф как ошибку исправить
http://pastebin.com/KhXJDAWS
на строке 71
http://joxi.ru/D2P0oLgiEEJk23
Синтаксис старого Borland/Turbo C/C++, MSDOS
Чуть подправлю и добавлю.

1 - Ересь =) Если byte18 слитно, то не ересь - а описана перменная byte18 как беззнаковый символ =)
(есть подозрение т. к. ниже есть переменная byte17)
2 - inportb(0x60) - функция считывает данные из порта 60h (клавиатура) и записывает в scan
3 - peekb(0x40,0x17) фукнция читает данные из памяти с сегментом 40h, и смещением 17h - там хранится состояние доп. клавиш (shift, alt)
4 - getvect(9) берет адрес старого вектора (обработчика) прерывания 09h (клавиатура) и записывает в указатель old.
5 - a = ch (верхней части регистра cx)
6 - x = cx (регистру cx)
7 - если в switch (который описан выше) сработает условие, при котором значение = 5 - выведется надпись IRQ5.
Андрей Сапунов
Андрей Сапунов
84 764
Андрей Сапунов inportb, peekb, getvect - стандартные функции в стареньком Borland/Turbo C.