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




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

Member
Статус: Не в сети
Регистрация: 15.11.2003
Откуда: Moscow\Russia
i db 0
.....
mov i,2
.....
mov si,i*8
**Error** v34_12.ASM(31) Expecting scalar type

Почему ????



Партнер
 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Ты же не на C программируешь. :) imul si, i, 8 (вроде так).


 

Member
Статус: Не в сети
Регистрация: 30.06.2005
Откуда: Питер
Билли Бонс писал(а):
Ты же не на C программируешь. :) imul si, i, 8 (вроде так).

Билли, зачем так? Есть же проще способ:
Код:
i db 0
...
mov   i,2
...
mov   si,i
shl   si,3    ; si = i * 8


p.s. Парни, если пишете код, обрамляйте соответствующими тэгами, читать невозможно!


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Holmes писал(а):
Билли, зачем так?

Ну так универсальнее, а на 8 умножать тогда уж лучше так:
Код:
mov si, i
lea si, [si*8]


 

Advanced member
Статус: Не в сети
Регистрация: 12.01.2004
Билли Бонс
Билли Бонс писал(а):
а на 8 умножать тогда уж лучше так:

Не лучше. shl/shr работают быстрее, если мне не изменяет память

_________________
Sapienti sat


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
--Vel-- писал(а):
Не лучше. shl/shr работают быстрее, если мне не изменяет память
Неа, наверно, изменяет. :) lea быстрей и комбинируется лучше (а на современных процах - одинаково быстро работают).


 

Advanced member
Статус: Не в сети
Регистрация: 13.04.2003
Откуда: Салават
--Vel--
LEA всегда был быстр, а сдвиги на Netburst жутко долгие

_________________
О браузерах без субъективизма http://people.overclockers.ru/GReY/16906/Obektivnyj_test_brauzerov


 

Advanced member
Статус: Не в сети
Регистрация: 12.01.2004
Билли Бонс, GReY ну запинали, сдаюсь. Вот только на классических x86 сдвиги были одними из самых быстрых операций. Но согласен, что в современным условиям это имеет мало отношения

_________________
Sapienti sat


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
--Vel-- писал(а):
Вот только на классических x86 сдвиги были одними из самых быстрых операций.

80286: lea - 3 такта; shl (больше 1) - 5+n
80386: lea - 2 такта; shl - 3
80486: lea - 1 такт; shl - 2
Pentium: lea - 1 такт, UV-конвейер; shl - 1 такт, U-конвейер


 

Advanced member
Статус: Не в сети
Регистрация: 12.01.2004
Билли Бонс, да, видимо что-то напутал, т.к. помнилось, что shl выполняется за один такт. Скорее всего спутал с количеством байт, которыми программируется операция

_________________
Sapienti sat


 

Member
Статус: Не в сети
Регистрация: 30.06.2005
Откуда: Питер
Билли Бонс писал(а):
Holmes писал(а):
Билли, зачем так?

Ну так универсальнее, а на 8 умножать тогда уж лучше так:
Код:
mov si, i
lea si, [si*8]

Я знаю, но сдвиг нагляднее, для новичков - самое то!


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Holmes Нагляднее - это imul :D, а соответствие сдвига и умножения нагляднее, imho, скорее не для новичков, а для уже опытного ассемблерщика.


 

Advanced member
Статус: Не в сети
Регистрация: 12.01.2004
Билли Бонс как раз для новичков нагляднее - чтобы степени двойки учили. Обратная сторона - приучает использовать сдвиги везде, где только можно. Но уж лучше так, чем семь раз делать add

_________________
Sapienti sat


 

Member
Статус: Не в сети
Регистрация: 30.06.2005
Откуда: Питер
Билли Бонс писал(а):
Holmes Нагляднее - это imul :D, а соответствие сдвига и умножения нагляднее, imho, скорее не для новичков, а для уже опытного ассемблерщика.

Опытный заюзает lea. Сдвиги как промежуточный вариант. :)
В остальном согласен с --Vel--'ом. ;)

Занятный этюд:
новичок:
Код:
push  edx
mov   eax,35
imul  eax,7
pop   edx


опытный:
Код:
mov   eax,35
mov   ebx,eax
shl   eax,3
sub   eax,ebx


профи:
Код:
mov   eax,35
mov   ebx,eax
not   ebx
lea   eax,[eax * 8 + ebx]


p.s. Just for fun.


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
--Vel--, Holmes Наглядность и полезность - понятия вообще-то разные, ну да не будем спорить.
Holmes А так быстрее:
Код:
mov eax, 245
:D


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Предлагаю на этом с оффтопом закончить.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 15.01.2006
Откуда: Минск
Вот задание

Разработать COM-программу, которая выполняет следующее:
1) открывает два файла: один на чтение, второй на запись;
2) читает содержимое 1-го файла в буфер;
3) записывает содержимое буфера в обратном порядке во 2-й файл.

Прогу надо написать (желасетьно на TASM)
Не секрет, что это лаба в универе, но у нас так класно учат - вот вам метода и как хотите так и делайте. И никакого обьяснения.

Помогоите пожалуйста!

_________________
У одних нефанатов рожи позеленели, у других рожи посинели.
И только у правильных нефанатов рожи красные и довольные.


 

Member
Статус: Не в сети
Регистрация: 12.05.2005
Откуда: Poland/Germany
TheVITALI
обьяснить как программировать невозможно, только общие принципы. если ты сам не пытаешься разобраться самостоятельно, то толку не будет. никто за тебя писать целую прогу не будет, могут только с какими то вопросами помочь.

_________________
God bless the Europe and USA !


 

попробуй в инете поискать что-нибудь типа "уроков по асму", гугл тебе в помощь.
а так на вскидку: на http://www.firststeps.ru/ есть достаточно инфы по твоему заданию (расписано подробно, с исходниками).


 

Member
Статус: Не в сети
Регистрация: 15.01.2006
Откуда: Минск
Нас так асьме учат....

Да мне и асьма то и ненада, но вот лабу написать требуют.

вот что пока написал( вернее исправил из методички)
Цитата:
.model tiny
.stack
.data
handle dw 0 ;дескриптор файла
filename db 'filename';20 dup(0) ;им¤ файла
p_fname dd filename ;указатель на им¤ файла

handle2 dw 0 ;дескриптор файла
filename2 db 'filename2' ;им¤ файла
p_fname2 dd filename2 ;указатель на им¤ файла

buff db 2048 dup(0) ;буфер размером 2 б
p_buff dd buff ;указатель на буфер
fsize dw 0 ;длина файла
.code
;org 100h
start:
mov ax, @data
mov ds, ax ;в ds Ц адрес сегмента данных

;открываем или создаем файл
xor cx, cx ;атрибуты файла - обычный файл
mov bx, 2 ;доступ дл¤ чтени¤-записи
mov dx, 1 ;файл существует Ц открыть его,
;иначе Ц вернуть ошибку
lds si, p_fname ;указатель на им¤ файла
mov ah, 6ch ;номер функции DOS
int 21h ;открываем файл
jnc m1 ;если файл существовал,то переход
mov dx,10h ;создать файл
mov ah,6ch ;номер функции DOS
int 21h ;создаем файл
jc exit ;выход, в случае ошибки
m1: ;файл открыт успешно
mov handle, ax ;сохраним дескриптор файла

;открываем или создаем файл2
xor cx, cx ;атрибуты файла - обычный файл
mov bx, 2 ;доступ дл¤ чтени¤-записи
mov dx, 1 ;файл существует Ц открыть его,
;иначе Ц вернуть ошибку
lds si, p_fname2 ;указатель на им¤ файла
mov ah, 6ch ;номер функции DOS
int 21h ;открываем файл
jnc m2 ;если файл существовал,то переход
mov dx,10h ;создать файл
mov ah,6ch ;номер функции DOS
int 21h ;создаем файл
jc exit ;выход, в случае ошибки
m2: ;файл открыт успешно
mov handle2, ax ;сохраним дескриптор файла


;определ¤ем размер файла
mov ah, 42h
mov bx, handle
mov al, 2 ;устанавливаем файловый указатель
xor cx, cx ;в конец файла
xor dx, dx
int 21h ;в ax - размер файла (если только
mov fsize, ax ;его длина не более 65535 байт)
mov ah, 42h
mov bx, handle
mov al, 0 ;возвращаем файловый указатель
xor cx, cx ;на прежнее место (в начало)
xor dx, dx
int 21h
;читаем весь файл в буфер
mov ah, 3fh ;функци¤ чтени¤
mov bx, handle ;дескриптор файла
mov cx, fsize ;размер файла
lds dx, p_buff ;адрес буфера
int 21h ;читаем
jc exit ;если неудача - выход
mov fsize, ax ;количество прочитанных байт
;вывод содержимого буфера на экран
mov ah, 40h ;записываем в
mov bx, 1 ;STDOUT
mov cx, fsize ;fsize байт
lds dx, p_buff ;из буфера buff
int 21h
;закрываем файл
mov ah, 3eh
mov bx, handle
int 21h
exit: ;выход из программы
mov ah, 4ch
int 21h
end start


а как дальше дописать чтобы чмтало строчки в файле 1 с последней к первой и сохраняло во второ файл незнаю. И разбираться немогу - нам, студентам, надо учить ещё один язык програмирования(моделирования) gpss

Может ктонибудь может добавить пару строчек кода в мою программу?

_________________
У одних нефанатов рожи позеленели, у других рожи посинели.
И только у правильных нефанатов рожи красные и довольные.


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

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


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

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


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

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