Правила - Рейтинг участников - Библиотека решений

Решения задачи #11.

1. Условие задачи

2. G3 - 37 байт.

3. [stl] - 38 (37) байт.

4. Ayl - 38 байт.

5. Edward Samokhvalov - 40 байт.

 

Условие задачи.

Даны два массива одинаковой длины, нужно отличия второго записывать в первый на соответствующие байты и количество таких замен занести в bx.  

 

Решение by G3:

;tasm /m task.asm
;tlink /x /3 /t task.obj
;37 байт
;by G3

.model tiny
.386
.code
org 100h

Start:
mov cl,M2-M1 ;2
mov di,offset M1 ;3
MainLoop:
mov al,[di+M2-M1] ;3
xor al,[di] ;2
jz L1 ;2

xor [di],al ;2
inc bx ;1
L1:
inc di ;1
loop MainLoop ;2

ret ;1

M1 db 'ASSEMBLER' ;9
M2 db 'FOREVER!!' ;9

end Start

 

Решение by [stl]:

; task11.asm
; by [stl]
; tasm task11.asm
; tlink /x /3 /t task11.obj
; 39 bytes (maybe 38 if strings shorter than 256b)
.386
IDEAL
MODEL tiny
CODESEG
ORG 100h
start:
diff=OFFSET M2-OFFSET M1
mov cx,9
mov si,OFFSET M1
loop0:
mov al,[si+diff]
xor [si],al
jz short continue
inc bx
continue:
mov [si],al
inc si
loop loop0
ret
M1 DB "ASSEMBLER"
M2 DB "FOREVER!!"
END start

 

Решение by Ayl:

; Assembler Tasks COMPO #11
; tasm 11.asm
; tlink /x /t 11.obj
; 11.com
; by Ayl
; size: 38 bytes with data, 20 bytes only code

.Model TINY
.286

.Code
.StartUp
mov cl, (m2 - m1) ; загрузить размер массива
lea si, m1 ; загрузить адрес массива, который будет изменяться
mov bp, cx ; загрузить смещение второго массива относительно первого
r:
mov al, [si + bp] ; загрузить очередной элемент эталонного массива 
; (несмотря на адресацию от SS адресуем то, что надо: SS = CS = DS!)
sub al, [si] ; высчитываем разницу между элементами (про sub в задании ничего не сказано!)
jz c ; если элементы равны - переходим к следующему элементу
add [si], al ; иначе добавляем разницу к элементу первого массива (m2[i] = m1[i] + (m2[i] - m1[i])!)
inc bx ; и корректируем счетчик разлиций
c:
inc si ; переходим к следующему элементу
loop r ; перебираем весь массив

ret ; все!

m1 db 'ASSEMBLER'
m2 db 'FOREVER!!'
end

 

Решение by Edward Samokhvalov:

;bY S/-\m0Khval0FF Edw/==\RD
;flat assemler for windows 1.42 (FASM)
;http://fasm.metro-nt.pl/fasm142.zip
;40 bYt3zZ
org 100h
mov si, B0T_ET0_MOU_PA3MEP4UK
davay_ka:
mov al, byte ptr m2+si-1
sub byte ptr m1+si-1, al
jz XPEH
inc bx ;для протокола
XPEH: mov byte ptr m1+si-1, al
dec si
jnz davay_ka
ret
m1 db "ASSEMBLER"
m2 db "AS*EMBLER"
B0T_ET0_MOU_PA3MEP4UK = $-m2 

 

Hosted by uCoz