MYCODE: segment .code
org 100h

%macro addone 2
    mov si, %1 ; Индекс конца списка
	mov cx, %2 ; Количество элементов
	xor dx, dx
	xor ax, ax
	mov dl, 1h			; b1
	
goida_loop1:
	xor ax, ax
	mov al, byte[si]
	add ax, dx
	mov byte[si], al
	xor dx, dx
	mov dl, ah
	dec si
	loop goida_loop1
%endmacro
	
%macro func40 4
    mov si, %1 ; Индекс конца списка
	mov cx, %2 ; Количество элементов
	xor dx, dx
	xor ax, ax
	mov dl, byte[%3]			; b1
	
goida_loop:
	xor ax, ax
	mov al, byte[si]
	add ax, dx
	mov byte[si + %4 - %3], al
	xor dx, dx
	mov dl, ah
	dec si
	loop goida_loop
%endmacro
	
%macro func41 4
	mov cx, %2
	mov si, %1
	
neg_goida41:
	mov dl, byte[si]
	not dl
	mov byte[si], dl
	dec si
	loop neg_goida41
	addone %1, %2
	func40 %1, %2, %3, %4
%endmacro
	
START:
	mov byte[4], 1h
	mov byte[3], 0h
	mov byte[2], 0h
	mov byte[1], 1h
	mov byte[16], 0ffh
	mov byte[15], 0ffh
	mov byte[14], 0ffh
	mov byte[13], 0ffh
    func41 3, 3, 4, 16

    mov ax, 5c00h
	int 21h

func33:
    mov ah, byte[a1]
    mov al, byte[a2]
    xor dx, dx
    mov dl, byte[b1]
    add ax, dx
    mov byte[c1], ah
    mov byte[c2], al
ret

func34:
    mov ah, byte[a1]
    mov al, byte[a2]
    xor dx, dx
    mov dl, byte[b1]
    sub ax, dx
    mov byte[c1], ah
    mov byte[c2], al
ret

func35:
    mov ah, byte[a1]
    mov al, byte[a2]
    shl ax, 1
    mov byte[c1], ah
    mov byte[c2], al
ret

    align 16, db 90h
    db '=[MYDATA BEGIN]='
    db 'A1A2=['
a1  db 1h
a2  db 2h
    db ']'
    align 16, db '.'
    db  'B1=.['
b1  db 3h
    db ']'
    align 16, db '.'
    db 'C1C2=['
c1  db  4h
c2  db  5h
    db  ']'
    align 16, db '.'
