Решения задачи #11.
5. Edward Samokhvalov - 40 байт.
Даны
два массива одинаковой длины, нужно отличия
второго записывать в первый на
соответствующие байты и количество таких
замен занести в bx.
;tasm
/m task.asm |
; 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 |
; 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 |