Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 641 • Страница 18 из 33<  1 ... 15  16  17  18  19  20  21 ... 33  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 05.12.2005
Откуда: Rostov-on-Don
L.A.W. Если бы мне нужны были только эти задания... :) Кроме этих у меня ещё партия. С ними вожусь, просто время ограничено - вот и хотел обратиться за помощью на родной форум ;)

_________________
Intel Inside ;-)



Партнер
 

Member
Статус: Не в сети
Регистрация: 12.07.2005
Откуда: Млечный путь
Код:
AnComStr Proc Near         
         mov si,81h
         mov di,offset SourceFileName
         mov al,byte ptr cs:[80h]
         or al,al
         jz AbProg          ;Если нет параметров
anc1: ;Missing first spaces
         mov al,[si]
         or al,al
         jz ancZ
         cmp al,' '
         jnz anc2
         inc si
         jmp anc1
anc2: ;Read SourceFileName
         mov al,[si]
         or al,al
         jz ancZ
         cmp al,' '
         jz ancZ ;!
         mov [di],al
         inc si
         inc di
         jmp anc2

ancZ:    mov [di-1],byte ptr 0 ; Erase 0Dh symbol
      ret
AnComStr Endp


Вообщем написал это для считывания из командной строки имени файла, над котрым нужно производить действия.
Дальше работаю с 4eh для открытия совпадающего файла, т.к. могут использоваться шаблоны в имени файла. Возникла проблема: открываются только файлы с именем в 1 символ. В чем проблема не могу разобраться. Плохая процедура чтения из PSP или может из-за того, что SourceFileName не ASCIIZ строка (не знаю как ее сделать). Может предложите свой вариант.

_________________
В этом мире меня подводят доброта и порядочность...


 

Member
Статус: Не в сети
Регистрация: 12.07.2005
Откуда: Млечный путь
pls hlp :-)

_________________
В этом мире меня подводят доброта и порядочность...


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
?Am(d)ber? Гы! Ну ты крут! А она у тебя нормально выходит? Вообще-от переход из процедуры на метку, которая не в этой процедуре находится - плохая идея...
А программа у тя COM или EXE? Возможно стоит просто в явном виде поставить сегментные регистры.
И вобще - не мучайся ты с определеением конца строки. Просто используй значение из cs:[80h] в качестве счетчика символов. Т.е. сначала сделай mov CL,СS:[80h], сравни с нулем, если равно - выход (но не переход на метку вне процедуры), если не равно - удаляешь пробелы из начала и при этом уменьшаешь СL. Когда пробелы кончились просто запускаешь цикл со счетчиклм и переносишь посимволь имя файла из PSP в переменную.
Я использовал такой код:
Код:
   mov   CL,ES:[80h]   ;получаем длинну параметра
   cmp   CL,0      ;из PSP
   je   wrong      ;длинна равна нулю - параметров нет. переходим на соответствующую метку
   mov   CH,0      
   mov   DI,81h       ;ES:DI - хвост в PSP
cyc:   cmp   byte ptr ES:[DI]," "   ;сканируем хвост, пока пробелы
   inc   DI
   je   cyc
   mov   BX,0
   mov   SI,0
mcopy:   mov   AL,byte ptr ES:[DI]
   mov   smask+SI,AL   ;посимвольно переносим маску из PSP в переменную smask
   inc   SI
   inc   DI
   cmp   SI,CX      ;пока не кончится строка параметров
   je   cont
   cmp   byte ptr ES:[DI]," "   ;или пока не наткнемся на пробел
   jne   mcopy

Он немного отличается от того что я тебе предлагал т.к. у меня после маски в строке параметров еще кой-че передавалось.

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 12.07.2005
Откуда: Млечный путь
Программа COM, а в COM программе все сегментные регистры на PSP установлены по-умолчанию. Переход из процедуры по метке, конечно, плохая идея, вот только странно, почему считывает "1.txt", но не считывает "11.txt".

Спасибо за код, буду пробовать.
Добавлено спустя 8 минут, 19 секунд
Еще есть вопрос - может кто знает где можно найти описание алгоритмов вычисления тактовой частоты процессоров до P5 с помощью системного таймера. Старше легко считать при помощи rdtsc, но нужна поддержка старых моделей.

_________________
В этом мире меня подводят доброта и порядочность...


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
?Am(d)ber? писал(а):
Еще есть вопрос - может кто знает где можно найти описание алгоритмов вычисления тактовой частоты процессоров до P5 с помощью системного таймера. Старше легко считать при помощи rdtsc, но нужна поддержка старых моделей.

Хм... Задачка довольно не тривиальная... Буду дома - гляну.
Добавлено спустя 5 минут, 43 секунды
Кстати, чуть раньше в этой теме был дискуссия по поводу того что RDTSC поддерживают 4-ки и некоторые 3-ки. Попробуй прямо так!
А процами младше 286 я думаю можно и пренебречь.

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 09.10.2004
Откуда: Краснодар
помогите плз с заданием:
H=max{a,min{b^2,ac}}
набрать нужно в паскале. После моих стараний выдает в ответе только С, либо А.
вот мое:
asm
mov al,b
mul al
mov bx,ax
mov bl,a
mov mov cl,c
mul cl
cmp ax,bx
jmp m1
jl m2
m1:mov ax,bx
jmp m3
m2:mov cx,ax
m3:mov ax,cx
jl m4
jmp m5
m4:mov ax,cx
jmp m6
m5:mov cx,ax
m6:mov y,cx
end;

PS просьба не стебаться, т.к. в ассемблере я N00B, помогите плз!

_________________
if you don't live for this you will die for nothing©


 

Member
Статус: Не в сети
Регистрация: 12.07.2005
Откуда: Млечный путь
L.A.W. писал(а):
?Am(d)ber? писал(а): Еще есть вопрос - может кто знает где можно найти описание алгоритмов вычисления тактовой частоты процессоров до P5 с помощью системного таймера. Старше легко считать при помощи rdtsc, но нужна поддержка старых моделей.

Хм... Задачка довольно не тривиальная... Буду дома - гляну.Добавлено спустя 5 минут, 43 секундыКстати, чуть раньше в этой теме был дискуссия по поводу того что RDTSC поддерживают 4-ки и некоторые 3-ки. Попробуй прямо так!А процами младше 286 я думаю можно и пренебречь.

Мне нужно чтоб, был детект частоты у 286 - P5. Насколько я понял, счетчик тактов только у P5. Преподаватель засмеяла мой алгоритм ввиду его маленького размера и сказала, что весь основной замут делает rdtsc. Из-за этого сказала делать для старых моделей. Вроде как взять инструкцию, узнать сколько тактов она выполняется. Пргогнать к примеру 1000 раз цикл с этой инструкцией. Т.е. будем знать сколько тактов выполнил процессор. А время вроде как кроме таймера ничем не замеришь? Только вот еще считать 1 такт=1Гц? Вроде для старых cpu так принято. Есть исходник с таймером, но он очень много задач выполняет, я что-то именно код для частоты не могу выдрать оттуда.

_________________
В этом мире меня подводят доброта и порядочность...


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
шкет Ну ты бы хоть комментариев добавил, где ты и что делаешь. Так ваще без поллитры не разберешься. А с поллитрой найдутся и другие дела... ;-)
Добавлено спустя 6 минут, 7 секунд
?Am(d)ber? писал(а):
Преподаватель засмеяла мой алгоритм ввиду его маленького размера и сказала, что весь основной замут делает rdtsc

Скажи ей куда ей нужно сходить. ;-) Если проц поддерживает RDTSC (а 4-ки вроде должны), то считать частоту по-другому - глупость. Насчет наличия счетчика тактов у процов младше P5 - дискуссия была выше. Было сказано, что 4-ки и некоторые 3-ки (486 и 386, если не в курсе) его поддерживают.
L.A.W. писал(а):
Вроде как взять инструкцию, узнать сколько тактов она выполняется

Ну допустим.
?Am(d)ber? писал(а):
Пргогнать к примеру 1000 раз цикл с этой инструкцией.

А сколько тактов тратится на организацию цикла мы учтем?
Плюс такую проверку можно писать только для конкретной модели проца.
ИМХО товя преподавательница несет чушь. И сама слабо представляет, о чем говорит.
Добавлено спустя 2 минуты, 36 секунд
?Am(d)ber? Кстати, посоветую преподвательнице учесть, что в многозадачной ОС в распоряжении проги находится не все процессорное время. Там еще, как минимум, планировщик. Пусть или сама четко сформулирует задание или принимает что есть.

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 12.07.2005
Откуда: Млечный путь
В многозадачных ОС вроде как надо Sleep юзать. А если она будет программу тестировать на какой-нибудь тройке, то там полюбому ДОС. И она от меня так просто не отстанет, потомучто это курсовой :D

_________________
В этом мире меня подводят доброта и порядочность...


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
?Am(d)ber? писал(а):
В многозадачных ОС вроде как надо Sleep юзать.

Для задержки да. А подсчитать тактову частоту по методике твоей преподши - невозможно. Sleep там ваще не причем.
?Am(d)ber? писал(а):
И она от меня так просто не отстанет, потомучто это курсовой

А в задании на курсовое проектирование было сказано какой проц? Ну и плюс - проверь, вдруг тройки тоже RDTSC держат.

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 12.07.2005
Откуда: Млечный путь
Я имел ввиду то, что написал на асм приложение под win32, используя rdtsc+sleep. Конечно, sleep к методу препода отношения не имеет. В книге аппартное программирование сказано, что rdtsc начиная с P5. Тоже и на оверах


 

Member
Статус: Не в сети
Регистрация: 09.10.2004
Откуда: Краснодар
L.A.W.
коментарии... хм :D как я написал выше
шкет писал(а):
в ассемблере я N00B
то про коментарии можно забыть, ибо это мне помогали, что-то правил сам и т.д. вот что получилось то и написал. Прошу помочь либо исправить что не так, либо написать заново.

_________________
if you don't live for this you will die for nothing©


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
Откуда: Rostov-on-Don
Очень жаль, что на мою просьбу никто не откликнулся ((( Видимо зря понадеялся на родной форум, придётся жертвовать другими предметами и вкуривать ещё 4 проги по ассемблеру :(

_________________
Intel Inside ;-)


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
шкет писал(а):
помогите плз с заданием:
H=max{a,min{b^2,ac}}

Тады поясни - тебе прога нужна на паскале или на асме? Если на асме - как вводятся знаечения переменных a,b,c?

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 12.07.2005
Откуда: Млечный путь
Вообщем есть код с системным таймером, насчет работы с таймером вроде все понятно, инициализируем, запрещаем маскируемые и немаскируемые прерывания, запускаем. Потом идет выполнение циклов с определенной инструкцией и считывание нового значения таймера. Никак не могу въехать как получается частота. По идее после всех итераций цикла мы получаем какое-то кол-во тиков счетчика, потом считаем сколько должно было затратится тактов на выполнение итих циклов с инструкциями. Потом делим. Но в этом коде не догнал, где имеено "вес" цикла. Либо там так хитро сделано, что не надо делить? Вот код

_________________
В этом мире меня подводят доброта и порядочность...


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
?Am(d)ber? По-моему ты паришься не по делу... Попробуй еще почитать по БИОСу. Может в нем хранится инфа о частоте. У старых процов диапазон частот был довольно скромный, так что они вполне могут присутствовать в БИОСе в том или ином виде.
Добавлено спустя 1 минуту, 55 секунд
Foxtrot писал(а):
Видимо зря понадеялся на родной форум

Я могу посоветовать, посмотреть твой исходник, если нужно. Но писать прогу с нуля у меня нет ни времени ни желания.

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 09.10.2004
Откуда: Краснодар
L.A.W.
H=max{a,min{b^2,ac}} где H-слово, a,b,c-байт
вводить в borland pascal 7.0 через оператор(или не оператор-хз как называется) ASM, т.е. после var, label, writeln и т.д. пишешь asm и начинаешь писать прогу. см.пример выше.

_________________
if you don't live for this you will die for nothing©


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
Код:
mov AL,b
mul AL   ;теперь в AX - b^2
push AX ;запихнули в стек
mov AL,c
mul a     ;теперь в AX - a*c
pop BX
cmp AX,BX
jl: label1
push AX
label1: push BX
pop AX   ;в АХ - min{b^2,ac}
mov BX,a
cmp AX,BX
jl: label2
mov h,BX
label2: mov h,AX ; теперь в h - max{a,min{b^2,ac}}

По-идее должно работать. Хотя писал на коленке - могут быть и ошибки...

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 09.10.2004
Откуда: Краснодар
L.A.W.
БОЛЬШОЕ Спасибо! Выручил! :beer:

_________________
if you don't live for this you will die for nothing©


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 641 • Страница 18 из 33<  1 ... 15  16  17  18  19  20  21 ... 33  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan