[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: 140 строк кода или тратегия про Assembler
Joker
Вот часа 3-4 писал код на языке assembler впервые!
И пока писал вспоминал как прекрасный и замечательный язык php вот листинг с программой которая проверяет 3 перменные.

Свернутый текст
.model small
.stack 100h
.data
a dw 1
b dw 2
c dw 2
m1 db "a<b<c",0dh,0ah,'$'
m2 db "a<c<b",0dh,0ah,'$'
m3 db "b<a<c",0dh,0ah,'$'
m4 db "b<c<a",0dh,0ah,'$'
m5 db "c<a<b",0dh,0ah,'$'
m6 db "c<b<a",0dh,0ah,'$'
m7 db "a=b=c",0dh,0ah,'$'
m8 db "a=b<c",0dh,0ah,'$'
m9 db "a=b>c",0dh,0ah,'$'
m10 db "a=c<b",0dh,0ah,'$'
m12 db "a>b=c",0dh,0ah,'$'
m13 db "a<b=c",0dh,0ah,'$'
.code
start:
mov ax,DGROUP
mov ds,ax
mov ax,a
; сравниваем
; a>=b
cmp ax,b
; если a>=b переход по метке
jge a_bol_rov_b
; если a<b переход по метке
jmp a_men_b
;a>=b
a_bol_rov_b:
je a_rov_b
jmp a_bol_b
;a=b
a_rov_b:
mov ax,a
cmp ax,c
jge a_bol_rov_c
jmp a_men_c
;a=b,a>=c
a_bol_rov_c:
je a_rov_c
jmp a_bol_c
;@a=b=c
a_rov_c:
mov dx,offset m7
jmp end_cmp
;@a=b>c
a_bol_c:
mov dx,offset m9
jmp end_cmp
;@a=b>c
a_men_c:
mov dx,offset m8
jmp end_cmp
;a>b
a_bol_b:
mov ax,c
; c>=b
cmp ax,b
jge c_bol_rov_b
jmp c_men_b
;@c<b<a
c_men_b:
mov dx,offset m6
jmp end_cmp
;a>b,c>=b
c_bol_rov_b:
je c_rov_b
jmp c_bol_b
;@a>b=c a>b,c=b
c_rov_b:
mov dx,offset m12
jmp end_cmp
;a>b,c>b,c<>a
c_bol_b:
mov ax,c
; c>=a
cmp ax,a
jge c_bol_a
jmp c_men_a
;@b<a<c a>b,c>b,c>a
c_bol_a:
mov dx,offset m3
jmp end_cmp
;@b<c<a a>b,b<c,a>c
c_men_a:
mov dx,offset m4
jmp end_cmp
;a<b
a_men_b:
mov ax,b
; b>=c
cmp ax,c
jge b_bol_rov_c
jmp b_men_c
;a<b,b>=c
b_bol_rov_c:
je b_rov_c
jmp b_bol_c
;@a<b=c
b_rov_c:
mov dx,offset m13
jmp end_cmp
;@a<b<c
b_men_c:
mov dx,offset m1
jmp end_cmp
;a<b,b>c
b_bol_c:
mov ax,a
; a>=c
cmp ax,c
jge t__a_bol_rov_c
jmp t__a_men_c
;a<b,b>c,a>=c
t__a_bol_rov_c:
je t__a_rov_c
jmp t__a_bol_c
;@b>c=a a<b,b>c,a=c
t__a_rov_c:
mov dx,offset m10
jmp end_cmp
;a<b,b>c,a>c c<a<b
t__a_bol_c:
mov dx,offset m5
jmp end_cmp
;@a<c<b a<b,b>c,a<c
t__a_men_c:
mov dx,offset m2
jmp end_cmp
end_cmp:
mov ah,09h
int 21h
mov ax,4c00h
int 21h
end start


Подсвичивать форум ассемблер не умеет...

Вот без подсветки думаю так лучше смотриться

Свернутый текст
.model small
.stack 100h
.data
a dw 1
b dw 2
c dw 2
m1 db "a<b<c m1",0dh,0ah,'$' ;1 2 3 +
m2 db "a<c<b m2",0dh,0ah,'$' ;1 3 2 +
m3 db "b<a<c m3",0dh,0ah,'$' ;2 1 3 +
m4 db "b<c<a m4",0dh,0ah,'$' ;3 1 2 +
m5 db "c<a<b m5",0dh,0ah,'$' ;2 3 1 +
m6 db "c<b<a m6",0dh,0ah,'$' ;3 2 1 +
m7 db "a=b=c m7",0dh,0ah,'$' ;1 1 1 +
m8 db "a=b<c m8",0dh,0ah,'$' ;1 1 2 +
m9 db "a=b>c m9",0dh,0ah,'$' ;2 2 1 +
m10 db "a=c<b m10",0dh,0ah,'$' ;1 2 1 +
m12 db "a>b=c m12",0dh,0ah,'$' ;2 1 1 +
m13 db "a<b=c m13",0dh,0ah,'$' ;1 2 2 +
.code
start:
mov ax,DGROUP
mov ds,ax
mov ax,a
; сравниваем
; a>=b
cmp ax,b
; если a>=b переход по метке
jge a_bol_rov_b
; если a<b переход по метке
jmp a_men_b
;a>=b
a_bol_rov_b:
je a_rov_b
jmp a_bol_b
;a=b
a_rov_b:
mov ax,a
cmp ax,c
jge a_bol_rov_c
jmp a_men_c
;a=b,a>=c
a_bol_rov_c:
je a_rov_c
jmp a_bol_c
;@a=b=c
a_rov_c:
mov dx,offset m7
jmp end_cmp
;@a=b>c
a_bol_c:
mov dx,offset m9
jmp end_cmp
;@a=b>c
a_men_c:
mov dx,offset m8
jmp end_cmp
;a>b
a_bol_b:
mov ax,c
; c>=b
cmp ax,b
jge c_bol_rov_b
jmp c_men_b
;@c<b<a
c_men_b:
mov dx,offset m6
jmp end_cmp
;a>b,c>=b
c_bol_rov_b:
je c_rov_b
jmp c_bol_b
;@a>b=c a>b,c=b
c_rov_b:
mov dx,offset m12
jmp end_cmp
;a>b,c>b,c<>a
c_bol_b:
mov ax,c
; c>=a
cmp ax,a
jge c_bol_a
jmp c_men_a
;@b<a<c a>b,c>b,c>a
c_bol_a:
mov dx,offset m3
jmp end_cmp
;@b<c<a a>b,b<c,a>c
c_men_a:
mov dx,offset m4
jmp end_cmp
;a<b
a_men_b:
mov ax,b
; b>=c
cmp ax,c
jge b_bol_rov_c
jmp b_men_c
;a<b,b>=c
b_bol_rov_c:
je b_rov_c
jmp b_bol_c
;@a<b=c
b_rov_c:
mov dx,offset m13
jmp end_cmp
;@a<b<c
b_men_c:
mov dx,offset m1
jmp end_cmp
;a<b,b>c
b_bol_c:
mov ax,a
; a>=c
cmp ax,c
jge t__a_bol_rov_c
jmp t__a_men_c
;a<b,b>c,a>=c
t__a_bol_rov_c:
je t__a_rov_c
jmp t__a_bol_c
;@b>c=a a<b,b>c,a=c
t__a_rov_c:
mov dx,offset m10
jmp end_cmp
;a<b,b>c,a>c c<a<b
t__a_bol_c:
mov dx,offset m5
jmp end_cmp
;@a<c<b a<b,b>c,a<c
t__a_men_c:
mov dx,offset m2
jmp end_cmp
end_cmp:
mov ah,09h
int 21h
mov ax,4c00h
int 21h
end start




Спустя 41 минута, 31 секунда (27.11.2009 - 22:33) VolCh написал(а):
Если этот алгоритм на PHP реализовывать, то тоже страшно может быть smile.gif

Спустя 35 минут, 39 секунд (27.11.2009 - 23:09) Joker написал(а):
на php в 12 строчек сделать легко.

Спустя 2 часа, 33 минуты, 43 секунды (28.11.2009 - 01:42) VolCh написал(а):
Ну покажи smile.gif

Спустя 11 часов, 9 минут, 22 секунды (28.11.2009 - 12:52) glock18 написал(а):
я бы сказал, что строк 5 smile.gif
из консоли:
$a = isset($argv['a']) ? $argv['a'] : die('a argument missed');
$b = isset($argv['b']) ? $argv['b'] : die('b argument missed');
$c = isset($argv['c']) ? $argv['c'] : die('c argument missed');
$res = sort(array($a, $b, $c), SORT_NUMERIC);
print_r($res);


через браузер все так же можно, только вместо $argv -> $_GET
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.