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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 1017
от 08.04.2008, 15:05

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

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 130252: Здраствуйте уважаемые эксперты помогите плиз написать программу , а то у меня ни как не получается Написть программу которая во введенной строке с клавиатуры заменяет все цифры на пробелы. Длина строки 100 символов, в строке могут быть как цифры ...
Вопрос № 130272: Доброго времени суток, Уважаемые!!! У меня к Вам просьба, объясните мне, ПОЖАЛУЙСТА, (КАК МОЖНО ДОХОДЧИВЕЕ) как работает эта программа, которая производит чтение и сравнение системного времени по прерываниям от таймера, что это за цифры мы загруж...
Вопрос № 130281: Последний заход по расстояние Левенштейна... Задача след. сделать данный алг. на ассембере, или переделать, то я я написал на Паскале на ассемблер, вернее сделать просто вставки. вот сам алг. int LevenshteinDistance(char s[1..n], char t[1...
Вопрос № 130304: Здравствуйте, уважаемые эксперты. При выполнении лабораторной работы столкнулся со следующей проблемой: не получается сделать переключение бита яркость фона/мерцание. Выкладываю код лабораторной полностью. Заранее спасибо....

Вопрос № 130.252
Здраствуйте уважаемые эксперты помогите плиз написать программу , а то у меня ни как не получается
Написть программу которая во введенной строке с клавиатуры заменяет все цифры на пробелы. Длина строки 100 символов, в строке могут быть как цифры так и буквы. Заранее спс
Отправлен: 02.04.2008, 18:33
Вопрос задал: LNEOl (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, LNEOl!

Программа в приложении.
Команды компилятора:
TASM PROGR
TLINK PROGR / t
Удачи!

Приложение:

---------
И только наступив на грабли мы приобретаем драгоценный опыт!

Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 02.04.2008, 20:05
Оценка за ответ: 4


Вопрос № 130.272
Доброго времени суток, Уважаемые!!!
У меня к Вам просьба, объясните мне, ПОЖАЛУЙСТА, (КАК МОЖНО ДОХОДЧИВЕЕ) как работает эта программа, которая производит чтение и сравнение системного времени по прерываниям от таймера, что это за цифры мы загружаем в регистры… . И напишите, ПОЖАЛУЙСТА, комментарии.
СПАСИБО!!!:-)

Приложение:

Отправлен: 02.04.2008, 20:44
Вопрос задала: Alena De Lon (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Airyashov
Здравствуйте, Alena De Lon!
Программа работает так получает адрес старого обработчика 08h
Перехватывает прерывание 08h своей подпрограммой new_08
Читает время из прараметров системы 40h:6Ch -лежит dword это счетчик таймера,
прибавляет к нему значение 18*2, 1 сек в тактах прерывания часов 08h, сохраняет это значение в переменной окончания времени time_end
затем устанавливает переменную flag в значение FFh
и выводит точку пока flag не 0
когда flag=0, выводит сообщение, востанавливает перехваченное прерывание и завершается

в обработчике прерывания 80h каждые 55мс усменьшается значение переменной flag
Ответ отправил: Airyashov (статус: 1-ый класс)
Ответ отправлен: 02.04.2008, 21:51

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Alena De Lon!
В приложении программа с подро-о-обными комментариями :)
Если останется что-то непонятное, милости просим в мини-форум.
Да, если запустить программу под Windows, то увидим слишком много точек.
Явно больше 18*2...
Этого не стоит пугаться. Дело в том, что если программу запустить под чистым ДОС-ом, то увидим ожидаемый результат.
Там программа полностью владеет всеми ресурсами и работает практически одна.
Но под Windows программа работает, можно сказать, под эмулятором ДОС-а, а он работает
только тогда, когда ему выделится время! Отсюда значительные задержки...
Удачи в освоении ассемблера...

Приложение:

---------
Удачи!

Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 03.04.2008, 10:28
Оценка за ответ: 5
Комментарий оценки:
Игорь Витальевич, ОГРОМНОЕ СПАСИБО!!!:-)
Буду теперь разбираться... .
И Вам УДАЧИ!!!


Вопрос № 130.281
Последний заход по расстояние Левенштейна...
Задача след. сделать данный алг. на ассембере, или переделать, то я я написал на Паскале на ассемблер, вернее сделать просто вставки.
вот сам алг.
int LevenshteinDistance(char s[1..n], char t[1..m])
declare int d[0..n,0..m]
declare int i, j, cost
for i := 0 to n
d[i,0] := i
for j := 0 to m
d[0,j] := j
for i := 1 to n
for j := 1 to m
if s[i] = t[j] then cost := 0
else cost := 1
d[i,j] := minimum(d[i-1,j ] + 1, // insertion
d[i, j-1] + 1, // deletion
d[i-1,j-1] + cost) // substitution
return d[n,m]

Код на Паскале
const
cuthalf = 100; // константа, ограничивающая макс. длину
// обрабатываемых строк

var
buf: array[0..cuthalf * 2) - 1)] of integer; // рабочий буффер, заменяет
// матрицу, представленную
// в описании

function min3(a, b, c: integer): integer; // вспомогательная функция
begin
Result := a;
if b < Result then
Result := b;
if c < Result then
Result := c;
end;

// реализация функции в принципе соответствует описанию с одной оговоркой:
// матрица из описания заменена статическим буффером, длина которого
// равна удвоенной максимальной длине строк
// это сделано для 1) экономии памяти и во избежание её перераспределений
// 2) повышения быстродействия (у меня функция работает
// в обработчике onfilterRecord)
// таким образом, в реализации половинами буффера представлены только
// две последние строки матрицы, которые меняются местами каждую
// итерацию внешнего цикла (по i)... для определения того, какая из половин
// буффера является "нижней строкой", служит переменная flip
// т. е. при flip = false первая половина буффера является предпоследней
// строкой, а вторая - последней; при flip = true наоборот,
// первая половина - последняя строка, вторая половина - предпоследняя

function LeveDist(s, t: string): integer;
var
i, j, m, n: integer;
cost: integer;
flip: boolean;
begin
s := copy(s, 1, cuthalf - 1);
t := copy(t, 1, cuthalf - 1);
m := length(s);
n := length(t);
if m = 0 then
Result := n
else if n = 0 then
Result := m
else
begin
flip := false;
for i := 0 to n do
buf[i] := i;
for i := 1 to m do
begin
if flip then
buf[0] := i
else
buf[cuthalf] := i;
for j := 1 to n do
begin
if s[i] = t[j] then
cost := 0
else
cost := 1;
if flip then
buf[j] := min3buf[cuthalf + j] + 1),
(buf[j - 1] + 1),
(buf[cuthalf + j - 1] + cost
else
buf[cuthalf + j] := min3buf[j] + 1),
(buf[cuthalf + j - 1] + 1),
(buf[j - 1] + cost;
end;
flip := not flip;
end;
if flip then
Result := buf[cuthalf + n]
else
Result := buf[n];
end;
end;
П.С. Я переделал, но оно выдает неправильный результат вообще. Переделанный мною код в приложении

Приложение:

Отправлен: 02.04.2008, 21:36
Вопрос задал: _Алексей Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Trulala
Здравствуйте, _Алексей Сергеевич !

Смотрите текст программы в приложении.

Trulala просил изменить ответ:

Данные у нас в стеке, а мы обращаемся к ним с использованием DS по умолчанию.
В функции LevenshteinDistance_asm нужно регистру DS присвоить значение SS или же
указывать префикс переопределения сегмента при адресации SS:[bx+...]

Нужно добавить четыре строки в функцию:

function LevenshteinDistance_asm
begin
asm
push ds

mov ax,ss
mov ds,ax ;DS:= SS

...

pop ds
end
end;

-----
∙ Отредактировал: Boriss (Профессор)
∙ Дата редактирования: 07.04.2008, 17:34

Приложение:

Ответ отправил: Trulala (статус: 1-ый класс)
Ответ отправлен: 04.04.2008, 20:53
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо за помощь


Вопрос № 130.304
Здравствуйте, уважаемые эксперты. При выполнении лабораторной работы столкнулся со следующей проблемой: не получается сделать переключение бита яркость фона/мерцание. Выкладываю код лабораторной полностью.
Заранее спасибо.

Приложение:

Отправлен: 03.04.2008, 00:29
Вопрос задал: Saidman (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Airyashov
Здравствуйте, Saidman!
continue: ;Включим мерцание
mov ah,10h
mov al,03h
mov bl,1 ;Мерцание какой бит устанавливайте 7?
int 21h ;// сдесь 10h!!!

BL 0 - бит D7 байта атрибутов управляет интенсивностью фона символов (символы не мигают),
1 - бит D7 байта атрибутов управляет миганием символов
Ответ отправил: Airyashov (статус: 1-ый класс)
Ответ отправлен: 03.04.2008, 08:04
Оценка за ответ: 5
Комментарий оценки:
спс))проглядел)


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

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

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

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

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

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


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


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.72.8 от 05.04.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное