Вращение бинарного изображения вокруг своей оси на произвольный угол. Освоение предметной области ВИСУ на примере практической задачи работы с визуальными сценами, страница 4

jc vos

pop a

jmp m2

vos:           pop a

jmp m

m2:

mov a, funk

mov tg_l, r4

cjne a, #0, ctg_l

mov dph,#8Fh

mov dpl, #00h

mov a, alpha

mov dpl, a

m4:           movx a, @dptr

inc dptr

inc alpha

mov b, a

mov a, tg_l

clr c

subb a, b

jc rel

djnz kolvopovt, m4

rel: dec alpha

push a

mov dph,#8Ch

mov a,alpha

mov dpl,a

movx a,@dptr

mov cos_a_h ,a

mov dph,#8Dh

mov a, alpha

mov dpl,a

movx a,@dptr

mov cos_a_l,a

pop a

ret

ctg_l:        mov dph,#91h

mov dpl, #00h

mov a, alpha

mov dpl, a

m5:           movx a, @dptr

inc dptr

inc alpha

mov b,a

mov a, tg_l

clr c

subb a, b

jc rel

djnz kolvopovt, m5

jmp rel

get_gamma: ;гамма-результирующий угол

mov a,chetvert

mov b,chetvg

add a,b

mov chetvert,a

push a

mov a,chetvert

cjne a,#5, gop

mov chetvert,#1

cjne a,#6, gop

mov chetvert, #2

cjne a,#7, gop

mov chetvert, #3

gop:          pop a

mov a,alpha

add a,beta

mov gamma,a

clr c

subb a,#90

jnc nepex

jmp vihod

nepex:       inc chetvert

push a

mov a,chetvert

cjne a,#5, neravno

mov chetvert,#1

neravno:   pop a

mov gamma,a

vihod:       push a

mov dph,#8Ch

mov a,gamma

mov dpl,a

movx a,@dptr

mov cos_g_h ,a

mov dph,#8Dh

mov a,gamma

mov dpl,a

movx a,@dptr

mov cos_g_l,a

mov dph,#8Ah

mov a,gamma

mov dpl,a

movx a,@dptr

mov sin_g_h ,a

mov dph,#8Bh

mov a,gamma

mov dpl,a

movx a,@dptr

mov sin_g_l,a

pop a

ret

get_new_coords_x: ;вычисляем новые координаты,узнавая в какой они будут ;четверти

clr c

mov a,beta

mov b,#1

subb a,b

jc grad

mov a,chetvert

cjne a,#4, ne_4

mov r1,sin_g_h

mov r0,sin_g_l

mov r3,#0

mov r2, x_coord

lcall mul42

jmp umnog_2

ne_4:         mov a,chetvert

cjne a,#3, ne_3

mov r1,cos_g_h

mov r0,cos_g_l

mov r3, #0

mov r2, x_coord

lcall mul42

jmp umnog_2

ne_3:         mov a,chetvert

cjne a,#2, ne_2

mov r1,sin_g_h

mov r0,sin_g_l

mov r3,#0

mov r2,x_coord

lcall mul42

jmp umnog_2

ne_2:         mov r1,cos_g_h

mov r0,cos_g_l

mov r3,#0

mov r2,x_coord

lcall mul42

umnog_2: ;mov a,r5 ;должно быть деление

;mov r1,a

;mov a,r4

;mov r0,a

;mov r3,cos_a_h

;mov r2,cos_a_l

;lcall mul42

mov r1,cos_a_h

mov r0,cos_a_l

lcall div42

;mov r0,#E8h

;mov r1,#03h

;lcall div42

cjne r5,#0,starsh_x

mov new_coord_x,r4

jmp get_new_coords_y

grad:         inc new_coord_y

inc new_coord_x

jmp gradex

starsh_x:   mov new_coord_x,r5

get_new_coords_y:

mov a,chetvert

cjne a,#4, ne_4_2

mov r1,cos_g_h

mov r0,cos_g_l

mov r3,#0

mov r2,x_coord

lcall mul42

jmp umnog_3

ne_4_2:     mov a,chetvert

cjne a,#3, ne_3_2

mov r1,sin_g_h

mov r0,sin_g_l

mov r3,#0

mov r2,x_coord

lcall mul42

jmp umnog_3

ne_3_2:     mov a,chetvert

cjne a,#2, ne_2_2

mov r1,cos_g_h

mov r0,cos_g_l

mov r3,#0

mov r2,x_coord

lcall mul42

jmp umnog_3

ne_2_2:     mov r1,sin_g_h

mov r0,sin_g_l

mov r3,#0

mov r2,x_coord

lcall mul42

umnog_3: ;mov a,r5

;mov r1,a

;mov a,r4

;mov r0,a

mov r1,cos_a_h

mov r0,cos_a_l

lcall div42

;mov r0,#E8h ;делим на 1000,т.к. значения триг-х ф-й 4 разряда после , и ;в таблицах они умножены на 1000

;mov r1,#03h

;lcall div42

cjne r5,#0,starsh_y

mov new_coord_y,r4

jmp rel_ex

starsh_y:   mov new_coord_y,r5

rel_ex:      clr c

mov a,chetvert

;mov dph_pix, a

subb a,#2

jc ch1

add a,#2

subb a,#3

jc ch2

add a,#3

subb a,#4

jc ch3

add a,#4

subb a,#5

jc ch4

ch1:           ;inc new_coord_y

;inc new_coord_x

clr c

mov dph,#0

mov dpl,#0

mov a,consty

mov b,new_coord_y

subb a,b

inc a

mov b,#177

mul ab

;mov dph_pix, a

;mov r0, a

;mov r1, #0

;mov r2, #177

;mov r3, #0

;lcall mul42

mov r4,a

mov r5,b

;mov dpl_pix, r4

mov a,constx

mov b,new_coord_x

clr c

add a,b

mov b, r4

add a,b

jnc perep

inc r5

mov dph_pix, r5

mov dpl_pix, r4

jmp perep

ch2:           mov dph,#0

mov dpl,#0

mov a,consty

mov b,new_coord_x

subb a,b

mov r0, a

mov r1, #0

mov r2, #177

mov r3, #0

lcall mul42

clr c

mov a, consty

mov b,new_coord_y

subb a,b

mov b, r4