Мое почтение всем. Дизассемблирую одну программку, получающую управление из MBR. Наткнулся на такой код: Код (Text): seg000:2BD1 loc_12BD1: ; CODE XREF: sub_12BC0+Ej ... seg000:2BD4 call kb_get_enhanced_keystroke seg000:2BD7 mov si, ds:kb_scan_ASCII seg000:2BDB call kb_get_enhanced_keystroke seg000:2BDE mov di, ds:kb_scan_ASCII seg000:2BE2 cmp si, 2400h seg000:2BE6 jnz short loc_12BF3 seg000:2BE8 cmp di, 9400h seg000:2BEC jnz short loc_12BF3 seg000:2BEE call sub_12FA0 seg000:2BF1 jmp short loc_12C02 ... seg000:2E52 kb_get_enhanced_keystroke proc near ; CODE XREF: sub_12BC0+14p seg000:2E52 ; sub_12BC0+1Bp seg000:2E52 pusha seg000:2E53 mov ah, 10h seg000:2E55 int 16h ; KEYBOARD - GET ENHANCED KEYSTROKE (AT model 339,XT2,XT286,PS) seg000:2E55 ; Return: AH = scan code, AL = character seg000:2E57 mov cs:kb_scan_ASCII, ax seg000:2E5B mov cs:kb_ASCII, al seg000:2E5F mov cs:kb_scan, ah seg000:2E64 popa seg000:2E65 retn seg000:2E65 kb_get_enhanced_keystroke endp ... Если верить этой таблице скан кодов, то 0x24 -- код клавиши j, ее же ASCII -- 0x6A. Получается, что условие никогда не выполнится... М.б. я в чем-то ошибаюсь? Причем, подобный код встречается в программе не один раз... Any ideas? Заранее благодарен.
Не знаю, поддерживает ли BIOS Unicode. М.б. дело и в "китайском" -- программу (предположительно) писали тайваньцы. Но не совсем понятно, как работать с этим чудом: там во всех проверках ASCII с нулем сравнивается...
Какая кодировка в MBR? Судя по этому куску кода, его писал либо человек, не знающий ассемблера, либо какой-то страшный ЯВУ. А что за программка? Загрузчик какой? ЗЫ функции эти возвращаюи в AL ноль есль нажата не буквоцифра. Возможно оно проверяет Ctrl+что-нибудь , Alt или Shift
>Какая кодировка в MBR? MBR вообще не выводит никаких строк. >Судя по этому куску кода, его писал либо человек, не знающий ассемблера, либо какой-то страшный ЯВУ. Это еще цветочки. Я уже столького натерпелся от этого исходника. Например: Код (Text): seg000:2C05 sub_12C05 proc near ; CODE XREF: sub_12ACD+9Ep seg000:2C05 mov ax, 2A22h seg000:2C08 shr ax, 0Ah seg000:2C0B inc ax ; ax = 0xB seg000:2C0C cmp ax, 7 seg000:2C0F jnz short loc_12C12 seg000:2C11 inc ax seg000:2C12 seg000:2C12 loc_12C12: ; CODE XREF: sub_12C05+Aj seg000:2C12 xor cx, cx seg000:2C14 mov es, cx seg000:2C16 mov dx, es:413h ; dx: BASE MEMORY SIZE IN KBYTES seg000:2C1B cmp dx, 280h seg000:2C1F jz short loc_12C22 seg000:2C21 dec dx seg000:2C22 seg000:2C22 loc_12C22: ; CODE XREF: sub_12C05+1Aj seg000:2C22 sub dx, ax На ЯВУ не похоже. Ни стековых кадров ни какой-нибудь шаблонности. >А что за программка? Загрузчик какой? Близко к этому. Это загрузчик программы управления устройством Magic Card Plus 7.0. Возможно, там же находится и сама программа управления устройством, не только загрузчик. >ЗЫ функции эти возвращаюи в AL ноль есль нажата не буквоцифра. Возможно оно проверяет Ctrl+что-нибудь , Alt или Shift О, а это уже интереснее. Т.е. эта табличка некорректна?
> MBR вообще не выводит никаких строк. Это был не вопрос, а удивление 2400h соответствует Alt-J а 9400h - Ctrl-Tab