jmp start nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop .macro Main ldr #a, 068h ldr #b, 070h ldr #c, 040h ; 5,75 movl a0, 00h movl a1, 42h movl a2, 70h ; 2,25 movl b0, 00h movl b1, 41h movl b2, 20h movl c0, 00h ;Для сравнений с 0 movl c1, 00h ;Для Т movl c2, 00h ;Буферная переменная movl c3, 24 ;Буферная переменная AddF SubF: Sub1 AddF1: Add1 Exit: .endm .macro AddF cmp b0, a0 jnz SubF ; Если нет jz Addf1 ;Если да jmp Exit .endm ;-------------------------------------------- .macro Sub1 ;--------------------Инверсия NOT %b0 ADDL %b0, 02h ;---------------------------- CMP %b0, %a0 jz nor NOT %b0 ADDL %b0, 02h jnz AddF1 nor: ;------------------------B=0? CMP b1, c0 jnz nor1 ; Если нет CMP b2, c0 jnz nor1 ; Если нет jmp Exit ;---------------------------- nor1: ;------------------------A=0? CMP a1, c0 jnz nor2 ; Если нет CMP a2, c0 jnz nor2 ; Если нет mov %a1, %b1 mov %a2, %b2 ;Инверсия знака NOT %a0 ADDL %a0, 02h jmp Exit ;---------------------------- nor2: MOV %c1,%a0 ;T<-sA CMP a1, b1 jnz nor3 CMP a2, b2 jnz nor3 movl a0, 00h movl a1, 00h movl a2, 00h jmp Exit nor3: movl b2, 66h jmp Exit .endm .macro Add1 ;------------------------B=0? CMP b1, c0 jnz norm ; Если нет CMP b2, c0 jnz norm ; Если нет jmp Exit ;---------------------------- norm: ;------------------------A=0? CMP a1, c0 jnz norm1 ; Если нет CMP a2, c0 jnz norm1 ; Если нет mov %a1, %b1 mov %a2, %b2 jmp Exit ;---------------------------- norm1: MOV %c1,%b0 ;T<-sB MOV %c2,%a1 ;Переменную в буфер SUB %c2, %b1 ;dA-dB>=0? JNS norm2 ;-----------------------A<->B MOV %c2,%a0 MOV %a0,%b0 MOV %b0,%c2 MOV %c2,%a1 MOV %a1,%b1 MOV %b1,%c2 MOV %c2,%a2 MOV %a2,%b2 MOV %b2,%c2 ;---------------------------- norm2: ;--------------------------dp MOV %c2,%a1 ;Переменную в буфер SUB %c2, %b1 ; ;---------------------------- JZ norm4 ;-----------------------dp<24 SUB %c3, %c2 JNZ norm3 ; jmp Exit ;---------------------------- norm3: ;------------dp->pA and A<->B MOV %c2,%a1 ;dp SUB %c2, %b1 ; MOV %a1,%c2 ADDL %a1, 10h ADDL %a1, 10h ADDL %a1, 10h ADDL %a1, 10h MOV %c3,%a0 MOV %a0,%b0 MOV %b0,%c3 MOV %c3,%a1 MOV %a1,%b1 MOV %b1,%c3 MOV %c3,%a2 MOV %a2,%b2 MOV %b2,%c3 ;---------------------------- norm5: ;-----Сдвиг mA вправо, pA, dp SHR %a2 ADDL %a1, 1 SUBL %c2, 1 JNZ norm5 ;---------------------------- norm4: ADD %a2, %b2 JC norm6 jmp Exit norm6: ADDL %a1, 1 JNC norm7 jmp Exit norm7: SHR %a2 jmp Exit .endm ;-------------------------------------------- start: Main .end