Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 371
от 14.02.2006, 00:09

Администратор:Калашников О.А.
В рассылке:Подписчиков: 260, Экспертов: 23
В номере:Вопросов: 4, Ответов: 5


Вопрос № 35003: Есть какой-либо способ проверить содержимое параметров командной строки в МАСМ32, типа ds:80h не используя функцию GetCommandLine? И второе 417h всё ещё в силе? или и для этого тоже существует соответствующая функция? ..
Вопрос № 35004: Такой вот вопрос: имеется резидентный обработчик и надо проверить нажата-ли комбинация Alt-X (код - 2d00h) Проверять нажата-ли Shift,Caps Lock,... умею, а вот с остальным никак??? ..
Вопрос № 35026: И всё-таки не моглибы вы мне написать простенький обработчик на нажатие клавиш Alt-X(2d00h)(Если да, то пишет "Y",если нет,то - "N")?...
Вопрос № 35032: Добрый день. Вот пишу тпкой код. mov ax,0x0ffff mov es,ax mov si, table mov di, 0x10 mov cx, 0x18 ;; Размер ядра в двойных словах rep movsb table: dw.... Товесть я хочу штоб эти данные были ...

Вопрос № 35.003
Есть какой-либо способ проверить содержимое параметров командной строки в МАСМ32,
типа ds:80h не используя функцию GetCommandLine?
И второе 417h всё ещё в силе? или и для этого тоже существует соответствующая
функция?
Отправлен: 08.02.2006, 12:25
Вопрос задал: Яковлев Сергей Павлович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Яковлев Сергей Павлович!
Программирование для win32 совершенно другой принцип использует. Там нет ничего (или желательно от этого уйти) от ДОСА. Есть подпрограммы и обычное линейное адресное простарнство. Выделяешь память (или лучше использовать пространство локальных переменных в подпрограмме) и вызываешь функцию, которая заполняет тебе её параметрами командной строки. Всё очень просто.

Для работы с клавиатурой используются соответствующие подпрограммы и ловушки.

Приятного и увлекательного изучения WIN32!
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 08.02.2006, 12:48


Вопрос № 35.004
Такой вот вопрос:
имеется резидентный обработчик и надо проверить нажата-ли комбинация Alt-X (код - 2d00h)
Проверять нажата-ли Shift,Caps Lock,... умею, а вот с остальным никак???
Отправлен: 08.02.2006, 12:27
Вопрос задал: Ig0rSV (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгений Иванов
Здравствуйте, Ig0rSV!
Фиксируешь нажатие X, и проверяешь флажки нажатых управляющих клавиш.
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 08.02.2006, 12:51


Вопрос № 35.026
И всё-таки не моглибы вы мне написать простенький обработчик на нажатие клавиш Alt-X(2d00h)(Если да, то пишет "Y",если нет,то - "N")?
Отправлен: 08.02.2006, 15:50
Вопрос задал: Ig0rSV (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Ig0rSV!
вот небольшой пример. универсальный.
очень простой.

int_16h_entry:
pushf
or ah,ah
jz go_16
cmp ah,10h
jz go_16
exit_16:
popf
db 234
old_16_int dd 0

go_16:
push ds cs
pop ds
cld
cmp bptr [ds:sch_del],0
jz loc_6
mov bptr [ds:work-1],256-(ret_16-work)
; call out_bufer
dec bptr [ds:sch_del]
jmp _16exit

loc_6:
cmp wptr [ds:out_sch1],0
jz loc_7
mov bptr [ds:work-1],256-(ret_16-work)
; call out_bufer
dec wptr [ds:out_sch1]
and bptr [ds:f_1],255-2
_16exit:
mov bptr [ds:work-1],0
pop ds
jmp exit_16

loc_7:
cmp bptr [ds:sch_right],0
jz loc_8
; mov bptr [ds:work-1],256-(ret_16-work)
; call out_bufer
; dec bptr [ds:sch_right]
; jmp _16exit

loc_8:
; dec wptr [ds:out_sch1]
pop ds
popf
call int_16
pushf
push ds cs
pop ds
cld
cmp wptr [ds:out_sch1],65535
jnz loc_9
; cmp bptr [ds:f_2],0
; jz loc_9
; mov ah,bptr [ds:f_2]
; jmp loc_9_9

loc_9:
; mov wptr [ds:out_sch1],0
jmp work ;#
work:
push ds 40h
pop ds
test bptr [ds:17h],4
pop ds
jz ret_16
or al,al
jnz ret_16
loc_9_9:
push ax
mov al,1
call goto_proc
pop ax
jc ret_16
mov bptr [ds:work-1],256-(ret_16-work)
push es
pusha
mov al,0
call goto_proc
ret_conv_string:

loc_12:
popa
xor ax,ax
mov bptr [ds:work-1],al
pop es
ret_16:
pop ds
popf
iret

tabl_goto0 db 1Eh ;A
dw ascii_table
db 23h ;H
dw converter
db 20h ;D
dw convert_dec
db 21h ;F
dw convert_hex
db 2Eh ;C
dw convert_char_d
db 2Fh ;V
dw convert_char_h
db 12h ;E
dw convert_d_char
db 13h ;R
dw convert_h_char
db 0

;███ GOTO_PROC ██████████████████████████████████████████████████████████████
;IN:AL=0-вызов подпрограммы,=1-проверка правильности.
;AH-скан-код.
proc goto_proc ;=2ac
push si ax
mov si,ofs tabl_goto0
c102a:
lods bptr [cs:si]
or al,al
jz c302a
cmp al,ah
jz c202a
inc si
inc si
jmp c102a

c202a:
lodsw
mov si,ax
pop ax
cmp al,1
jc c252a
pop si
ret

c252a:
push ax
call si
c302a:
pop ax si
stc
ret
endp

proc int_16
pushf
call [cs:old_16_int]
ret
endp

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Что имеем - не храним, потерявши - плачем

Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 08.02.2006, 16:12


Вопрос № 35.032
Добрый день. Вот пишу тпкой код.
mov ax,0x0ffff
mov es,ax

mov si, table
mov di, 0x10
mov cx, 0x18 ;; Размер ядра в двойных словах
rep movsb

table:
dw....

Товесть я хочу штоб эти данные были в начале первого мегабайта: ffff0+10=100000h. table - это таблица дескрипторов. Потом пишу вот

lgdt [gd_reg]

gd_reg:
dw 8192
dd 0x0100000

Не работает. Если пробою например в область 800кбб то начинает работать. Почему я немогу в реальном режиме попасть на первый мегабайт памяти?
Отправлен: 08.02.2006, 18:49
Вопрос задал: OlegMA (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, OlegMA!
Потому что как минимум это всё стандартизировано. Есть драйвер HMA, есть HIMEM.
Есть также gate a20, тебе нужно открыть его.

---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 08.02.2006, 19:22

Отвечает: skif quest
Здравствуйте, OlegMA!
В Real Mode мы можем адресовать память до мегабайта. Это из-за разрядности регистров. Чтобы получить память выше, перейди в Protect Mode, или Unreal Mode.

PS загрузчик пишеш?
Ответ отправил: skif quest (статус: 1-ый класс)
Отправлен: 09.02.2006, 08:01


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.14 (бета) от 09.02.2006
Яндекс Rambler's Top100

В избранное