Главная страница
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.025 c
15-1234767612
123-ий
2009-02-16 10:00
2009.04.19
Работа с Excel


3-1219219719
Max Zyuzin
2008-08-20 12:08
2009.04.19
ADO. переподключение после обрыва соединения


3-1219225831
AlexeyK
2008-08-20 13:50
2009.04.19
При сохранении созданой записи она исчезает


8-1192723012
hahol_64_rus
2007-10-18 19:56
2009.04.19
доступ к файлам


15-1234596212
Palladin
2009-02-14 10:23
2009.04.19
Декларирование указателя в Си