Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.19;
Скачать: CL | DM;

Вниз

ASM   Найти похожие ветки 

 
Denis__ ©   (2009-02-27 18:51) [0]

Хай всем) Знаю, что не в тему, но тут есть знатоки асма, знаю тоже.
Задача : Выяснить, является ли N (cлово) степенью тройки. Если да, то в К записать эту степень, если нет К = -1. Сделал тремя способами, вопрос - как лучше?
Вариант 1
DW N ?            ; слово-N
...
DB K 0            ;    байт-К = 0
CMP N, 1       ;   сравниваем  N и  3^0
JE L_END      ;   если N == 3^0, то  выход,  К == 0
MOV K, -1
MOV AX, 1    
MOV BX, 1
XOR CL, CL  ;    Счетчик
L:
INC CL        
ADD BX, BX ;    BX == 2BX
JO L_END    ;    Если возникло переполнение, то выход, К == -1
ADD BX, AX ;    BX == 3^CL
JO L_END    ;   Если возникло переполнение, то выход, К == -1
MOV AX, BX;   AX == 3^CL
CMP N, AX  ;   Сравниваем N и 3^CL
JB L              ;  “<”  ==>  идем в L  
JA L_END    ;  “>”  ==>  выход, K == -1
MOV K, CL  ;   N == 3^CL ==> K == CL
L_END:

Вариант 2
-----------------------------------------------------
DW N ?            ; слово-N
...
DB K 0            ;    байт-К = 0
CMP N, 1       ;   сравниваем  N и  3^0
JE L_END      ;   если N == 3^0, то  выход,  К == 0
MOV K, -1
MOV AX, 1    
MOV BX, 3
XOR CL, CL  ;    Счетчик
L:
INC CL  
MUL BX        ; AX == 3^CL
JO L_END    ; Переполнение – выход, К == -1
CMP N, AX  ;   Сравниваем N и 3^CL
JA L              ;  “>”  ==>  идем в L  
JB L_END    ;  “<” ==>  выход, K == -1
MOV K, CL  ;   N == 3^CL ==> K == CL
L_END:

-----------------------------------------------------
Вариант 3
DW N ?            ; слово-N
...
DB K 0            ;    байт-К = 0
CMP N, 1       ;   сравниваем  N и  3^0
JE L_END      ;   если N == 3^0, то  выход,  К == 0
MOV K, -1
MOV AX, N  
MOV BX, 3
XOR DX, DX
XOR CL, CL  ;    Счетчик
L:
INC CL  
DIV BX        ; AX == AX/3
CMP DX, 0
JE L_END    ;  Остаток не ноль – выход, К == -1  
CMP AX, 1
JNE L           ; AX > 1 - продолжаем
MOV K, CL  ;   N == 3^CL ==> K == CL
L_END:


 
Сергей М. ©   (2009-02-27 20:10) [1]


> вопрос - как лучше?


Контрвопрос - каковы критерии оценки на "хуже-лучше" ?


 
Denis__ ©   (2009-02-27 20:18) [2]

эээ.... Я полагаюсь на ваши соображения по этому поводу=). Кроме того, вопрос "как лучше" предполагал не только оценку, но и возможное предложение альтернативного варианта.(Ассемблер только начал изучать и практически уверен, что все можно сделать гораздо оптимальнее по всем параметрам) Учиться готов всегда. Кроме того, возможно, Вы можете что-нибудь посоветовать по оформлению кода?


 
Сергей М. ©   (2009-02-27 20:25) [3]

Я просто подумал, что это учебная задача)

Тем более что в ней не пахнет Delphi вообще и BASM конкретно и в частности.

Не лучше ли будет для начала переложить все эти три произведения для ВASM-скрипки 32-разрядного оркестра ?


 
Sha ©   (2009-02-27 20:30) [4]

Есть еще четвертый вариант: глянуть в CPU window для

function log3(n: integer): integer;
var
 i: integer;
begin;
 Result:=0;
 i:=1;
 while i<n do begin;
   inc(Result);
   i:=3*i;
   end;
 if i<>n then Result:=-1;
 end;


 
Denis__ ©   (2009-02-27 20:30) [5]

Да, это учебная задача. К сожалению, критерии оценки не были озвучены, да я думаю, что "5" будет у тех кто написал что-то "похожее на правду"=) Сюда пришел просто поучиться у тех, кто реально пишет, а не просто знает теорию. Delphi действительно не пахнет, что я сразу и честно сказал :

> Знаю, что не в тему, но

Кроме того, пока мы пишем "под дос" то есть никаких 32 разрядов=) Возможно будем писать под Unix, но еще ничего не известно.


 
Сергей М. ©   (2009-02-27 20:38) [6]


> глянуть в CPU window


Угу.
Выкинуть оттуда лишнее, если оно очевидно для учебной задачи - вот и будет "как лучше")



Страницы: 1 вся ветка

Текущий архив: 2009.04.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
15-1235165401
Юрий
2009-02-21 00:30
2009.04.19
С днем рождения ! 21 февраля 2009 суббота


2-1236147252
Vladimir
2009-03-04 09:14
2009.04.19
передача массива в качестве параметра


2-1235826463
Nazarius
2009-02-28 16:07
2009.04.19
как в memo написать в определенную строчку


15-1234818834
AlexDan
2009-02-17 00:13
2009.04.19
Уравнения затухающих волн..


3-1217925347
Николай2008
2008-08-05 12:35
2009.04.19
SQL Server + копирование = connection string