IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Оптимизация программы
сообщение
Сообщение #1


Бывалая
***

Группа: Пользователи
Сообщений: 290
Пол: Женский
Реальное имя: Анютка

Репутация: -  7  +


Программа заменяет слово РАК на слово ЩУКА.
Что в ней можно изменить, чтобы выиграть во времени/объёму?

.model small
.stack 100h

locals
.const
replace_with db 'щука$'
.data
string db 'рак, ракрак, рака',0


.code
Begin:
mov ax,@data
mov ds,ax
mov si,offset string
mov ax,0

cld
get_char:
mov bx,ax
lodsb
or al,al
jz eol
cmp al,'A'
jb put_char
cmp bl,'A'
jae put_char

cmp al,'р'
jne put_char
cmp byte ptr [si],'а'
jne put_char
cmp byte ptr [si+1],'к'
jne put_char
cmp byte ptr [si+2],'A'
jae put_char
add si,2

lea dx, replace_with
mov ah,9
int 21h

jmp get_char

put_char:
mov dx,ax
mov ah,2
int 21h
jmp get_char

eol:
mov ax,4C00h
int 21h
end Begin


Сообщение отредактировано: Анна -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Оптимизация программы
Перед тем, как программу оптимизировать, надо вообще-то добиться ее правильной работы:

Цитата(Console)
F:\Asm30>anna
щукаак, ракрак, щукаак
по-моему не совсем то, что требовалось?

Добавлено через 12 мин.
Как минимум не хватает
	lea dx, replace_with 
mov ah,9
int 21h
add si, 2 ; Вот этого

jmp get_char
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалая
***

Группа: Пользователи
Сообщений: 290
Пол: Женский
Реальное имя: Анютка

Репутация: -  7  +


Приношу извинения, поправила первый пост.

Цитата("исходная строка")
рак, ракрак, рака


Цитата("результат")
щука, ракрак, рака
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Зачем тебе это - не понимаю, но вот если заменить вот это:

cmp al,'р' 
jne put_char
;cmp byte ptr [si],'а'
;jne put_char
;cmp byte ptr [si+1],'a'
;jne put_char
;
cmp word ptr [si], 0eae0h ; экономим 5 байтов
jne put_char
cmp byte ptr [si+2],'A'
jae put_char
;add si,2
;
inc si
inc si ; экономим 1 байт: ADD - 3 байта

Оно тебе надо из-за 6-ти байт заморачиваться?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалая
***

Группа: Пользователи
Сообщений: 290
Пол: Женский
Реальное имя: Анютка

Репутация: -  7  +


Зачем оптимизация?
Задание такое в институте smile.gif Не моя это заморочка.

Это, как я поняла, оптимизация по объему и быстродействию?

А что еще можно изменить, чтобы было только оптимизировано по объему (за счёт снижения быстродействия), либо только по быстродействию (за счёт увеличения объёма) ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
А что еще можно изменить, чтобы было только оптимизировано по объему (за счёт снижения быстродействия)
Замени
; mov bx,ax 
; на
xchg bx,ax

; и
; mov dx,ax
; на
xchg dx, ax

- это уменьшит объем, но увеличит время выполнения (XCHG регистр/регистр занимает 1 байт, но выполняется за 3 такта, в то время как MOV регистр/регистр выполняется всего за 2 такта, но и занимает 2 байта). Кстати, ты бы сказала, процессор какой?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалая
***

Группа: Пользователи
Сообщений: 290
Пол: Женский
Реальное имя: Анютка

Репутация: -  7  +


Проц не обговаривается.

cmp word ptr [si], 0eae0h
не заработала...
Что не так?

Сообщение отредактировано: Анна -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
Что не так?
Что значит "не заработала"? Не компилируется? Не выводит результат? Что? Я перед тем, как запостить, наверное проверил, тебе не кажется, что я б не написал, если б не работало?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






P.S. Чтоб не утверждать что-то и не спорить просто так (возможно - проблема в том, что у меня Windows не русифицирован, поэтому я запускаю неЮникодные приложения через утилиту AppLocale, которая "заставляет" приложение думать, что оно запущено в русской локали, отсюда очень даже возможна проблема с кодировкой). Открой LST-файл, и сделай следующее:

      1	0000			     .model small
2 0000 .stack 100h
3
4 locals
5 0000 .const
6 0000 F9 F3 EA E0 24 replace_with db 'щука$'
7 0005 .data
8 0000 F0 E0 EA 2C 20 F0 E0+ string db 'рак, ракрак, рака',0
9 EA F0 E0 EA 2C 20 F0+
10 E0 EA E0 00
...


В восьмой строке видишь коды E0 и EA? Посмотри, какие коды у тебя фигурируют точно на том же месте, и запиши их в обратном порядке в
cmp word ptr [si], 0eae0h; у меня сначала идет E0 , потом EA, здесь пишем наоборот
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Бывалая
***

Группа: Пользователи
Сообщений: 290
Пол: Женский
Реальное имя: Анютка

Репутация: -  7  +


      1	0000			     .model small
2 0000 .stack 100h
3
4 locals
5 0000 .const
6 0000 E9 E3 AA A0 24 replace_with db 'щука$'
7 0005 .data
8 0000 E0 A0 AA 2C 20 E0 A0+ string db 'рак, ракрак, рака',0
9 AA E0 A0 AA 2C 20 E0+
10 A0 AA A0 00

...


Заменила на
cmp word ptr [si], 0AAA0h

Всё заработало. Спасибо. Просто не сразу уловила, что есть 0eae0h ...

Добавлено через 7 мин.
Кстати, почему указывать нужно в обратном порядке?

Сообщение отредактировано: Анна -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Цитата
Кстати, почему указывать нужно в обратном порядке?
Потому что Интеловский порядок, Little-Endian. См. здесь, например: Wiki: Порядок байтов
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 15.11.2019 14:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name