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

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


Информационный Канал Subscribe.Ru

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

Выпуск № 780
от 19.11.2004, 04:30

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 5986
Отправлено ответов: 15938
Активность: 266.2 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

andre
Статус: Опытный
Общий рейтинг: 119.75
URL: мой сайт правда старый не обновлял давно надо бы заняться да руки не доходя
Телефон: 972544517423
[Подробней >>]
_vt
Статус: Профессиональный
Общий рейтинг: 118.64
[Подробней >>]
DSota
Статус: Доверительный
Общий рейтинг: 123.73
[Подробней >>]
 
Ayl
Статус: Профессиональный
Общий рейтинг: 116.04
[Подробней >>]
Стас
Статус: Профессиональный
Общий рейтинг: 122.68
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 110.73
[Подробней >>]
 
Gibbel
Статус: Профессиональный
Общий рейтинг: 104.31
URL: Savage Metal Club - жизнь в стиле рок-н-ролл
Телефон: +7 901 710 3146
[Подробней >>]
bocha
Статус: Профессиональный
Общий рейтинг: 119.19
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 5960. 1) Возможно ли программы, рекомендуемые к книге Калашникова О.А. "Ассемблер? Это просто", устанавить и работать с ними под Windows ХР? 2) Как подписаться на рассылку новостей начинающему пользователю и что для этого надо? С Уважением Ан... (ответов: 1)
Вопрос № 5964. Ув эксперты! Для апдейта VC++ 6.00 нужно скачать + поставить свежее SDK. А как сделать то же для Ассемблера (MASM)? Спасибо заранее.... (ответов: 1)
Вопрос № 5966. Привет участникам рассылки! Необходимо создать dll-ку. Имеется шаблон (см. приложение) из Izcelio-на. Вопос такой: можно ли не описывать функцию DllEntry а только указать точку входа DllEntry:.И как это сделать? Заранее благодарен за ответы 1! ... (ответов: 1)
Вопрос № 5967. Здравствуйте !!! Я никак не могу написать программу на ассемблере: Дан массив чисел. Числа, стоящие на нечетных позициях необходимо заменить ASCII-кодами соответствующих символов (т.е. 1 – 31h, 2 – 32h …) Помогите пожалуйста!!! От: ... (ответов: 1)
Вопрос № 5968. Я чувствую себя дураком , но всё же задам этот вопрос. У меня проблема глобального характера. В тупом языке Borland Pascal я делаю игрушенцию. Половина на Асме (обычно я полностью делаю на Асме) Задача такова, необходимо использовать обработчик преры... (ответов: 5)
Вопрос № 5969. Здраствуйте, господа эксперты. Не скажете как перевести видяху на низком уровне в какой нить приличный видеорежим (800х600 например)... (ответов: 2)
Вопрос № 5970. Пишу так: cseg segment org 100h Start: mov ah,9 mov dx,offset mess int 21h mov ah,86h mov cx,100h mov dx,5555h int 15h jmp start mess db "a$" cseg ends end start 86h int 15h - формирование задержки, но через ... (ответов: 2)
Вопрос № 5972. Вопрос не простой, но наверняка вы с ним уже сталкивались. 1)Нужно перемножить два числа размером в 72 (можно чуть меньше) бита (ну чтоб одним mul\'ом или imul\'ом не обошлось). 2)Этот результат вывести на экран. Кто знает, объясните. Я не прошу код ... (ответов: 2)
Вопрос № 5973. Имеется программа: не могли бы вы объяснить те места, где стоит ;? и если нетрудно проверить правильность осталых рассуждений.ПЖАЛСТА (P.S. на мой взгляд в проге есть какой-то БАГ, но я еще не разобрался где, а что думаете вы?) (P.P.S. где можно скач... (ответов: 2)
Вопрос № 5974. Здравствуйте господа эксперты!!! Если не затруднит, то подскажите пожайлуста где можно достать информацию по программированию звуковой карты на ассемблере.... (ответов: 1)
Вопрос № 5975. Уважаемые эксперты! Если во время передачи данных функцией send произойдёт отключение от инета, функция вернёт сразу ошибку или будет ожидать ещё некоторое время (чему оно равно по умолчанию в VERSION1_1) или же не вернёт управление проге вообще, пок... (ответов: 1)
Вопрос № 5976. Здравствуйте! Если у кого-нибудь есть исходники с использованием I2C или DCC или просто какая-нибудь инфа по этим умным вещам 8), просьба ответить на мыло HELP_ME_PLEASE@MAIL.RU. (подписчикам просьба тоже проявить инициативу ;) ) Спасибо всем откликн... (ответов: 2)
Вопрос № 5977. Есть ли какая-нибудь API функция котороя ищет строку в тексте и возращает ее адрес? или, если не сложно, можете написать исходник такой процедуры? а то меня чего-то не получается ее написать =(... (ответов: 1)
Вопрос № 5978. Уважаемые Эксперты. Как в ДОСе произвести проверку CRC файла? Я создал прогу, которая патчил файл. Нужно, чтобы перед патчингом она проверяла CRC. Какие для этого нужны функции? Если у кого есть примеры - дайте пожалуйста.... (ответов: 1)

Вопросов: 14, ответов: 23


 Вопрос № 5960

1) Возможно ли программы, рекомендуемые к книге Калашникова О.А. "Ассемблер? Это просто", устанавить и работать с ними под Windows ХР?
2) Как подписаться на рассылку новостей начинающему пользователю и что для этого надо?
С Уважением Анатолий.



Вопрос отправлен: 07.11.2004, 13:00
Отправитель: Анатолий

[Следующий вопрос >>] [Список вопросов]

Отвечает andre

Добрый день, Анатолий!
можно уточнить какие программы
а на рассылку попишись на сайте там русским языком обьяснено

Ответ отправлен: 07.11.2004, 13:21
Отправитель: andre


 Вопрос № 5964

Ув эксперты!
Для апдейта VC++ 6.00 нужно скачать + поставить свежее SDK.
А как сделать то же для Ассемблера (MASM)?
Спасибо заранее.



Вопрос отправлен: 07.11.2004, 22:00
Отправитель: Ling

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Доброе время суток, Ling!
Если необходима какая-то функция, описанная в свежем SDK, то взять сишный хидер, в котором она описана, и создать собственный inc-файл, в котором перевести нужные сишные структуры, константы и пр., на язык ассемблера.
А вообще, ассемблер не предназначен для программирования под Win32 - куда как удобнее писать на Си.
* Origin : I′d like to change the world, but I have no source code


Ответ отправлен: 08.11.2004, 22:25
Отправитель: _vt


 Вопрос № 5966

Привет участникам рассылки!
Необходимо создать dll-ку. Имеется шаблон (см. приложение) из Izcelio-на.
Вопос такой: можно ли не описывать функцию DllEntry а только указать
точку входа DllEntry:.И как это сделать?
Заранее благодарен за ответы 1!


Приложение:


Вопрос отправлен: 08.11.2004, 09:33
Отправитель: 1

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Доброе время суток, 1!

ml -c -coff yourdll.asm
link /dll /subsystem:windows yourdll.obj /entry:DllEntry


Учти, что в этом случае ты вполне себе запутаешься с т.н. манглингом и проще создать def-файл, где прописать все нужные параметры.
* Origin : I′d like to change the world, but I have no source code


Ответ отправлен: 08.11.2004, 22:25
Отправитель: _vt


 Вопрос № 5967

Здравствуйте !!! Я никак не могу написать программу на ассемблере: Дан массив чисел. Числа, стоящие на нечетных позициях необходимо заменить ASCII-кодами соответствующих символов (т.е. 1 – 31h, 2 – 32h …)
Помогите пожалуйста!!!
От:



Вопрос отправлен: 08.11.2004, 11:41
Отправитель: rewer8 (rewer8@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает DSota

Здравствуйте, rewer8!


Приложение:

Ответ отправлен: 09.11.2004, 14:50
Отправитель: DSota


 Вопрос № 5968

Я чувствую себя дураком , но всё же задам этот вопрос.
У меня проблема глобального характера.
В тупом языке Borland Pascal я делаю игрушенцию.
Половина на Асме (обычно я полностью делаю на Асме)
Задача такова, необходимо использовать обработчик прерываний для мыши AX=0Ch
в ES:DX нужно кидать офсет процедуры (фар), которую нужно исполнять.
Но я покажу проблему, которая встаёт, на Асм проге.
.model tiny
.code
org 100h
start:
mov ax,13h
int 10h
xor ax,ax
int 33h
mov ax,1
int 33h
mov ax,3
int 33h
mov ax,000ch
mov cx,2
mov dx,offset draw
int 33h
;-------------
mov ax, 0a000h
mov es,ax
;-------------
Если так, то работает , а поставьте это после старта:, то будет глюк.Насколько я понимаю это из-за изменения es, но что же делать мне, если Паскаль сам его может поменять, да и вообще всё это обходить будет слишком не рационально подскажите , Пожалуйста (;-( )xor ah,ah
int 16h
mov ax,000ch
mov cx,0
int 33h
ret
draw proc
mov ax,2
int 33h
shr cx,1
mov di,dx
shl dx,2
add di,dx
shl di,6
add di,cx
stosb
dec ax
int 33h
retf
draw endp
end start



Вопрос отправлен: 08.11.2004, 16:18
Отправитель: Юра (ZLOI13@yandex.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Добрый день, Юра!
Честно говоря, не понял, в чем у тебя проблема. Функция 0Ch прерывания 33h требует передачи дальнего указателя на пользовательскую процедуру в регистрах ES:DX. Поэтому, если у тебя изменяется регистр ES, то перед вызовом этой функции его нужно установить правильно. Например, так:
push es
push cs
pop es
... ; установка остальных параметров для 33-его прерывания
int 33h
pop es
P.S. А на Паскаль (и, в частности, Borland Pascal) не гони - нифига он не тупой!


Ответ отправлен: 09.11.2004, 14:23
Отправитель: Ayl


Отвечает _vt

Приветствую Вас, Юра!
Не понял я, причем тут Паскаль? Там свободно можно изменять содержимое регистра ES. Хотя бы текст или код ошибки приведи? И почему ты дал текст на ассемблере, если у тебя ошибка в Паскале?
* Origin : I′d like to change the world, but I have no source code


Ответ отправлен: 08.11.2004, 22:27
Отправитель: _vt


Отвечает Стас

Добрый день, Юра!
Может просто сохранить ES и восстановить его перед выходом из проги. Возможно ES паскаль использует по своему.

Ответ отправлен: 08.11.2004, 23:19
Отправитель: Стас


Отвечает ASMодей

Здравствуйте, Юра!
Паскаль наверное действительно изменяет ES, но кто тебе мешает его использовать?


Приложение:

Ответ отправлен: 09.11.2004, 13:24
Отправитель: ASMодей


Отвечает DSota

Доброе время суток, Юра!
При установке функции мыши адрес драв передаеться в регистрах es:dx. По
умолчанию в СОМфайле es=cs. По этому вариант программы "без глюка" работает. Когда же ты
меняешь es, то она процедуру DRAW ищет не там, и уходит на
[0a000:offset draw].


Приложение:

Ответ отправлен: 09.11.2004, 14:33
Отправитель: DSota


 Вопрос № 5969

Здраствуйте, господа эксперты.
Не скажете как перевести видяху на низком уровне в какой нить приличный видеорежим (800х600 например)



Вопрос отправлен: 08.11.2004, 21:17
Отправитель: Swick

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Здравствуйте, Swick!

INT 10 - VESA SuperVGA BIOS - SET SuperVGA VIDEO MODE
AX = 4F02h
BX = new video mode (see #04082,#00083,#00084)
ES:DI -> (VBE 3.0+) CRTC information block, bit mode bit 11 set
(see #04083)
Return: AL = 4Fh if function supported
AH = status
00h successful
01h failed
Notes: bit 13 may only be set if the video mode is present in the list of
accelerated video modes returned by AX=4F00h
if the DAC supports both 8 bits per primary color and 6 bits, it will
be reset to 6 bits after a mode set; use AX=4F08h to restore 8 bits
SeeAlso: AX=4E03h,AX=4F00h,AX=4F01h,AX=4F03h,AX=4F08h
(Table 00083)
Values for VESA video mode:
00h-FFh OEM video modes (see #00010 at AH=00h)
100h 640x400x256
101h 640x480x256
102h 800x600x16
103h 800x600x256
104h 1024x768x16
105h 1024x768x256
106h 1280x1024x16
107h 1280x1024x256
108h 80x60 text
109h 132x25 text
10Ah 132x43 text
10Bh 132x50 text
10Ch 132x60 text
---VBE v1.2+ ---
10Dh 320x200x32K
10Eh 320x200x64K
10Fh 320x200x16M
110h 640x480x32K
111h 640x480x64K
112h 640x480x16M
113h 800x600x32K
114h 800x600x64K
115h 800x600x16M
116h 1024x768x32K
117h 1024x768x64K
118h 1024x768x16M
119h 1280x1024x32K (1:5:5:5)
11Ah 1280x1024x64K (5:6:5)
11Bh 1280x1024x16M
---VBE 2.0+ ---
120h 1600x1200x256
121h 1600x1200x32K
122h 1600x1200x64K
81FFh special full-memory access mode
Notes: the special mode 81FFh preserves the contents of the video memory and
gives access to all of the memory; VESA recommends that the special
mode be a packed-pixel mode. For VBE 2.0+, it is required that the
VBE implement the mode, but not place it in the list of available
modes (mode information for this mode can be queried directly,
however).
as of VB E 2.0, VESA will no longer define video mode numbers
SeeAlso: #00010,#00011,#00084,#00191
Index: video modes;VESA
(Table 00084)
Values for S3 OEM video mode:
201h 640x480x256
202h 800x600x16
203h 800x600x256
204h 1024x768x16
205h 1024x768x256
206h 1280x960x16
207h 1152x864x256 (Diamond Stealth 64)
208h 1280x1024x16
209h 1152x864x32K
20Ah 1152x864x64K (Diamond Stealth 64)
20Bh 1152x864x4G
211h 640x480x64K (Diamond Stealth 24)
211h 640x400x4G (Diamond Stealth64 Video / Stealth64 Graphics)
212h 640x480x16M (Diamond Stealth 24)
301h 640x480x32K
Note: these modes are only available on video cards using S3's VESA driver
SeeAlso: #00083,#00191,#00732 at INT 1A/AX=B102h
Index: video modes;S3
Format of VESA VBE CRTC Information Block:
Offset Size Description (Table 04083)
00h WORD total number of pixels horizontally
02h WORD horizontal sync start (in pixels)
04h WORD horizontal sync en d (in pixels)
06h WORD total number of scan lines
08h WORD vertical sync start (in scan lines)
0Ah WORD vertical sync end (in scan lines)
0Ch BYTE flags (see #04084)
0Dh DWORD pixel clock, in Hz
11h WORD refresh rate, in 0.01 Hz units
this field MUST be set to pixel_clock / (HTotal * VTotal),
even though it may not actually be used by the VBE
implementation
13h 40 BYTEs reserved
Bitfields for VESA VBE CRTC Information Block flags:
Bit(s) Description (Table 04084)
0 enable double scanning
1 enable interlacing
2 horizontal sync polarity (0 positive, 1 negative)
3 vertical sync polarity (0 positive, 1 negative)
SeeAlso: #04083
* Origin : I′d like to change the world, but I have no source code


Ответ отправлен: 08.11.2004, 22:32
Отправитель: _vt


Отвечает DSota

Добрый день, Swick!
http://www.codenet.ru/progr/video/vesa121.php

Ответ отправлен: 09.11.2004, 13:47
Отправитель: DSota


 Вопрос № 5970

Пишу так:
cseg segment
org 100h
Start:
mov ah,9
mov dx,offset mess
int 21h
mov ah,86h
mov cx,100h
mov dx,5555h
int 15h
jmp start
mess db "a$"
cseg ends
end start
86h int 15h - формирование задержки, но через долю секунды весь экран в буквах а. Даже при cx=dx=0FFFFh. В чем дело?



Вопрос отправлен: 08.11.2004, 23:46
Отправитель: Serega

[Следующий вопрос >>] [Список вопросов]

Отвечает Стас

Доброе время суток, Serega!
счас пробежался по биосу, там тупое dec cx; dec dx.
Т.е. никаких микросекунд, никакого таймера, все зависит только от проца.
Вывод - сервис устарел.

Ответ отправлен: 09.11.2004, 10:05
Отправитель: Стас


Отвечает DSota

Здравствуйте, Serega!
При запуске из-под виндовс задержка работает некорректно в 98, а после 2000 и вообще не работает... Нужно пользоваться другим способом. Например процессор (ниже), или таймер.

Приложение:

Ответ отправлен: 09.11.2004, 13:42
Отправитель: DSota


 Вопрос № 5972

Вопрос не простой, но наверняка вы с ним уже сталкивались.
1)Нужно перемножить два числа размером в 72 (можно чуть меньше) бита (ну чтоб одним mul\'ом или imul\'ом не обошлось).
2)Этот результат вывести на экран.
Кто знает, объясните. Я не прошу код (хотя он не помешал бы), а просто хочу узнать алгоритм действий.



Вопрос отправлен: 09.11.2004, 22:19
Отправитель: Serega

[Следующий вопрос >>] [Список вопросов]

Отвечает DSota

Здравствуйте, Serega!
Просто вспомни умножение столбиком на бумаге, и организуй это в алгоритме.

Ответ отправлен: 11.11.2004, 14:36
Отправитель: DSota


Отвечает Ayl

Добрый день, Serega!

Да алгоритм-то элементарный. Это тебе не деление :-)
Пусть у нас разрядная сетка состоит из N разрядов. Считаем все числа беззнаковыми. И пусть нам нужно перемножить два числа (X и Y), состоящими из K бит (N < K <= 2*N). Представим их так:
X = a * 2^N + b
Y = c * 2^N + d

Тогда по обычным правилам перемножения суммы получаем:
Z = X * Y = a*c * 2^(2*N) + (a*d + b*d) * 2^N + b*d

Т.е. вычисляешь с помощью 4-х mul'ов частичные произведения и дальше с помощью сложения и сдвигов формируешь общее произведение.

Если число K > 2*N, то дейстыуешь таким же образом, но уже используешь для представления одного числа не 2 слагаемых, а 3 или больше. Например, для K = 72 при разрядной сетке 32 бита нужно использовать такое представление:
X = a * 2^64 + b * 2^32 + c
Y = d * 2^64 + e * 2^32 + f

Тогда Z = X * Y вычисляется так:
(a * 2^64 + b * 2^32 + c) * (d * 2^64 + e * 2^32 + f) =
= (a*d)*2^128 + (a*e + b*d)*2^96 + (a*f + b*e + c*d)*2^64 +
+ (b*f + c*e)*2^32 + c*f


Ответ отправлен: 10.11.2004, 14:51
Отправитель: Ayl


 Вопрос № 5973

Имеется программа: не могли бы вы объяснить те места, где стоит ;? и если нетрудно проверить правильность осталых рассуждений.ПЖАЛСТА (P.S. на мой взгляд в проге есть какой-то БАГ, но я еще не разобрался где, а что думаете вы?)
(P.P.S. где можно скачать описания прерываний на русском?)
ЗАРАНЕЕ БЛАГОДАРЕН!!! Олег
; Программа выполняет запись самой себя в то место памяти, куда она уже загружена.
cseg segment
assume cs:cseg, ds:cseg, ss:cseg, es:cseg
org 100h
;==BEGIN==
start:
mov dx,offset file_name ; заносим в dx адрес строки с именем открываемого файла
call open_file ; вызываем процедуру открытия файла
jc error_file ;если ошибка пи открытии файла, то переходим на метку error_file
;==file opened==
mov bx,ax ;???заносим в BX уникальный номер открытого файла
mov ax,3Fh ;????ф-ция чтения файла (запись содержимого файла в память)
mov cx,offset finish-100h ; в CX заносим размер нашего сегмента (; Запи сываем длину нашей программы (кол-во читаемых байт))
mov dx,offset start ; в DX заносим адрес начала нашего сегмента
int 21h ;читаем (записываем файл в память) начиная с указанного адреса (c адреса начала нашего сегмента)
;==file read==
call close_file ;вызываем процедуру закрытия файла
;==output msg==
mov ah,9h ;(***) вывод сообщение о закрытии файла
mov dx,offset msg_ok
int 21h ;выводим
ret ;?????????????????? зачем????? возвращение на строку close_file endp ??????
;==can\'t open file==
error_file:
mov ah,2h ;???????
mov dl,7 ;?????????
int 21h
ret ;???Использование инструкции ret для завершения программы предпочтительней, т.к. мы экономим один байт.
;Однако, это работает только в том случае, если мы не трогали стек (не изменяли регистры SS:SP).
;Все наверное помнят, что при загрузке *.com-программы вершина стека устанавливается на конец нашего сегмента,
;т.е. SP=0FFFFh. Если мы зайдем в процедуру или в прер ывание, то SP уменьшится на два (SP=SP-2, т.е. SP будет равен
;0FFFDh). Поэтому и не происходит путаницы: выходить ли в DOS или вернуться из процедуры. В любом случае, выход в
;DOS происходит только в том случае, если SP=0FFFFh.
;по-этому нет выхода из программы int 20h (в 20h нет необходимости)


;==procedures==
open_file proc ;поцедура открытия файла (голова)
cmp handle,0FFFFh ;?????смотрим равен ли уникальный номер файла(нах-ся в переменной handle) 0FFFFh. условие, что файл был открыт.
jne quit_open ;если не равен, то переходим на метку quit_open
mov ax,3D00h ;открытие файла, только чтение
int 21h ; открываем файл
mov handle,ax ;заносим в переменную handle уникальный номер открытого файла
ret ;возвращение из поцедуры в основную программу (на строку jc error_file)
quit_open: ;метка выхода зи поцедуры open_file с ошибкой
stc ;???????; Устанавливаем флаг переноса в 1, необходимый для подтверждения факта открытия файла (для jc).
ret ;возвращение из поцедуры в основную программу (на строку jc error_file)
handle dw 0FFFFh ;????присваиваем handle значение 0FFFFh
open_file endp ;поцедура открытия файла (хвост)
close_file proc ;поцедура закрытия файла (голова)
cmp handle,0FFFFh ;??смотрим равен ли уникальный номер файла(нах-ся в переменной handle) 0FFFF
je no_close ;если равен то -> на метку ni_close
mov ah,3Eh ;ф-ция закрытия файла
mov bx,handle ;заносим в переменную handle уникальный номер открытого файла
int 21h ;закрываем файл
mov handle,0FFFFh ;????присваиваем handle значение 0FFFFh
no_close: ; метка запрещения закрытия файла
ret ;возвращение из поцедуры в основную программу (на строку mov ah,9h ;(***))
close_file endp ;поцедура закрытия файла (хвост)
;==data==
file_name db \'D:Masm611wless009.com\',0
msg_ok db \'all in order!\',0Ah,0Dh,\'$\' ; 0Ah,0Dh - переход в начало следующей строки, типа writeln или puts().
fi nish equ $
cseg ends
end start



Вопрос отправлен: 10.11.2004, 18:42
Отправитель: Oleg

[Следующий вопрос >>] [Список вопросов]

Отвечает Стас

Приветствую Вас, Oleg!
>ret ;??????????????????
close_file endp непричем.
Когда управление передается COM программе стек содержит 0(SP=FFFE).
Это адрес на который попадет программа когда выполнит завершающий RET. По адресу cs:0 лежит иструкция INT20h.
Поэтому сожно завершать программу RET (если указатель SP=значению при входе в программу), можно INT20h, можно mov
ah,4ch int 21h.
>mov ah,2h ; mov dl,7 ; int 21h
Это звук биииип. (символ с кодом 07 - beep)
>cmp handle,0FFFFh ;
т.к. в начале программы handle=0FFFFh то это проверка чтобы не открыть файл дважды (после открытия handle изменяется).Смысла в этой проверке не вижу.
>stc ;Устанавливаем флаг переноса в 1
Что здесь не понятно - все откоментарено. Это чтоб jc error_file сработал при ошибке.
>handle dw 0FFFFh ;????присваиваем handle значение 0FFFFh
Опять все нормально откоментарено. Едвали "номер файла" может вырасти до 65535, поэтому это своеобразн ый флаг что файл еще не открыт.
>cmp handle,0FFFFh
И опять проверяем что файл был открыт.
>mov handle,0FFFFh ;????присваиваем handle значение 0FFFFh
Т.е. флаг что файл закрыт, и можно открывать по новому. Вообще, не понятен смысл этих проверок, зачем они нужны?
И вообще всей проги, чушь читать файл в тоже место где сейчас исполняется код...


Ответ отправлен: 10.11.2004, 22:54
Отправитель: Стас


Отвечает Ayl

Здравствуйте, Oleg!
mov bx,ax ;???заносим в BX уникальный номер открытого файла
Непонятно? Ну смотри. При открытии файла с помощью функции 3Dh прерывания 21h в регистре AX возвращается номер файла (хэндл или дискриптор). Если произошла ошибка, то в этот же регистр записывается код ошибки. А сам факт возникновения ошибки отмечается с помощью флага переноса (CF).
mov ax,3Fh ;????ф-ция чтения файла (запись содержимого файла в память)
А тут-то что непонятно? Кстати, вот и первая ошибка - 3Fh нужно заносить не в регистр AX, а в регистр AH.
Прерывание 21h содержит большое количество различных функций. Поэтому перед вызовом этого прерывания в регистр AH нужно занести номер требуемой функции.

ret ;?????????????????? зачем????? возвращение на строку close_file endp ??????
Чего-чего? Вообще-то тут происходит завершение программы и выход в DOS. При выполнении этой инструкции из стека выбирается одно слово (смещение в кодовом сегменте) и управление передается на этот адрес. Т.к. при запуске COM-программы в стеке находится значение 0, то после выполнения команды ret управление будет передано на адрес CS:0. А в этом месте находится код команды int 20h, т.е. завершение программы.

mov ah,2h ;???????
mov dl,7 ;?????????
int 21h
Вызов 2-й функции 21-го прерывания (вывод символа на консоль). Выводится 7-й символ (звонок).
ret ;???Использование инструкции ret для завершения программы ...
Завершение программы. (см. выше).

cmp handle,0FFFFh ;?????смотрим равен ли уникальный номер файла(нах-ся в переменной handle) 0FFFFh. условие, что файл был открыт.
При старте программы в ячейку памяти с именем handle заносится значение 0FFFFh. Это признак того, что мы еще не открывали файл. Когда мы откроем файл, то в эту ячейку будет занесен номер файла. Тем самым при попытке повторного открытия файла эта операция выполнена не будет и будет возвращена ошибка. В противном случае мы пытаемся открыть файл.

stc ;???????; Устанавливаем флаг переноса в 1, необходимый для подтверждения факта отк рытия файла (для jc).
Ровно то, что написано. Установка фйлага переноса для последующей проверки.

handle dw 0FFFFh ;????присваиваем handle значение 0FFFFh
см. комментарий выше. Определение двух байт в памяти, присвоение адресу первого байта имени handle и запись в эти ячейки значения 0FFFFh.

А вообще у меня большие сомнения в работоспособности этого кода, т.к. при чтении достаточно большого файла будет затерт исходный код программы в памяти и тогда вообще неизвестно, что будет выполняться.


Приложение:

Ответ отправлен: 11.11.2004, 16:52
Отправитель: Ayl


 Вопрос № 5974

Здравствуйте господа эксперты!!!
Если не затруднит, то подскажите пожайлуста где можно достать информацию по программированию звуковой карты на ассемблере.



Вопрос отправлен: 12.11.2004, 10:45
Отправитель: Саша (BIG_BOY@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Gibbel

Добрый день, Саша!
Программирование на ассемблере отличается тем, что оно жестко привязывается к "железу". Поэтому, программирование разных устройств одного класса может координально отличаться.
Уточните, с какой именно звуковой картой вы хотите работать.

Ответ отправлен: 12.11.2004, 11:11
Отправитель: Gibbel


 Вопрос № 5975

Уважаемые эксперты! Если во время передачи данных функцией send произойдёт отключение от инета, функция вернёт сразу ошибку или будет ожидать ещё некоторое время (чему оно равно по умолчанию в VERSION1_1) или же не вернёт управление проге вообще, пока не передадутся все данные?



Вопрос отправлен: 13.11.2004, 14:50
Отправитель: Alex

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Добрый день, Alex!
Будет какое-то время ждать и вернет ошибку. Бегло пробежавшись по MSDN в разделе WinSock, прочитал, что подобные параметры устанавливаются функцией setsockopt(...), и вроде как в Windows не реализовано изменение тайм-аута соединения. Но могу ошибаться, потому RTFM MSDN ;)
* Origin : I′d like to change the world, but I have no source code


Ответ отправлен: 13.11.2004, 20:50
Отправитель: _vt


 Вопрос № 5976

Здравствуйте!
Если у кого-нибудь есть исходники с использованием I2C или DCC или просто какая-нибудь инфа по этим умным вещам 8), просьба ответить на мыло HELP_ME_PLEASE@MAIL.RU.
(подписчикам просьба тоже проявить инициативу ;) )
Спасибо всем откликнувшимся. ...



Вопрос отправлен: 13.11.2004, 16:24
Отправитель: UKY (HELP_ME_PLEASE@MAIL.RU)

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Добрый день, UKY!
Что есть I2C? Системная шина? У Ральфа Брауна был I2C.LST. Да и вообще - www.gg.ru ;)
* Origin : I′d like to change the world, but I have no source code


Ответ отправлен: 13.11.2004, 20:50
Отправитель: _vt


Отвечает DSota

Здравствуйте, UKY!
1. http://www.itt-ltd.com.ua/I2CRef.html
2. http://www.gaw.ru/html.cgi/txt/interface/iic/start.htm
3. http://www.semiconductors.philips.com/acrobat/various/i2c_overview_2h_2003.pdf
4. http://kazus.ru/modules.php?name=News&file=article&sid=36
К сожалению, я не программировал эту шину на персоналках, и ничего определенного об этом сказать не могу.
Я тебе намылил исходники драйверов видеокарты с ее использованием... Может
пригодятся...

Ответ отправлен: 17.11.2004, 10:43
Отправитель: DSota


 Вопрос № 5977

Есть ли какая-нибудь API функция котороя ищет строку в тексте и возращает ее адрес? или, если не сложно, можете написать исходник такой процедуры? а то меня чего-то не получается ее написать =(



Вопрос отправлен: 14.11.2004, 20:29
Отправитель: UsAr

[Следующий вопрос >>] [Список вопросов]

Отвечает bocha

Здравствуйте, UsAr!


Приложение:

Ответ отправлен: 15.11.2004, 23:53
Отправитель: bocha


 Вопрос № 5978

Уважаемые Эксперты. Как в ДОСе произвести проверку CRC файла? Я создал прогу, которая патчил файл. Нужно, чтобы перед патчингом она проверяла CRC. Какие для этого нужны функции? Если у кого есть примеры - дайте пожалуйста.



Вопрос отправлен: 15.11.2004, 00:01
Отправитель: monrus (monrus@bk.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Стас

Здравствуйте, monrus!
Читаешь файл (можно порциями), считаешь его CRC. Не каких специальных функций не надо.

Ответ отправлен: 15.11.2004, 15:42
Отправитель: Стас



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (22)
C / C++ (18)
Perl (5)
Builder / Delphi (16)
Pascal (19)
Basic / VBA (9)
Java / JavaScript (7)
PHP (17)
Криптография (7)
WinAPI (18)
Радиоэлектроника (12)
Пользователю
Windows 95/98/Me (37)
Windows NT/2000/XP (58)
"Железо" (38)
Поиск информации (21)
Администратору
Windows NT/2000/XP (35)
Linux / Unix (19)
Юристу
Гражданское право (10)
Семейное право (5)
Трудовое право (8)
КоАП (5)

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





http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное