The assembly program runs but is in an infinite loop

my program runs, but unfortunately it is in an infinite loop on the first task

y = a / b + c
Liczby wprowadzamy w kodzie szesnastkowym (HEX)
Wprowadz liczbe a

It asks here for the first number a in hexadecimal code.
no matter what I put in, the program keeps looping on this task.
I don’t see the possible solution for this problem.

Here is the instruction for my program

Design and run a procedure in 80×86 assembly language that implements na
8 byte variables operation:
multiplication,
division,
determining the remainder of division (modulo),
adding
to determine the result of the equation:

a y = a % b + c
b y = a / b + c
c y = a * b + c
d y = (a + b) % c
e y = a + b % c
f y = a + b * c
g y = a + b / c
h y = (a / b) % c
i y = a * (b + c)

We display the input data on the screen entered in hexadecimal code,
operation sign and result in hexadecimal code. For the result of the operation with
error, we display “***” in the result field.
Use fast multiplication or division algorithm in the program

Here is the code

format PE Console 4.0

entry start
include 'WIN32A.INC'
include 'win_macros.inc'
section '.text' code readable executable

start:
        wyswietl txt5
        wyswietl txt6
loop_1:
        wyswietl txt1
        mov ecx, 8
        mov esi, 7

zmienna_A:
        call pobierz_znak   ;funkcja pobrania znaku
        shl al,4    ;przesuniecie bitowe w lewo
        push ax     ;wrzucenie na stos rejestru ax
        call pobierz_znak
        pop dx     ;zdjecie ze stosu
        add al,dl
        mov byte[zm1+esi],al  ;byte - odwolanie sie do jednego bajtu zmiennej (esi - oznacza, do ktorego bajta sie odwolujemy) ;przypisanie odpowiedniego bajtu do rejestru al
        dec esi  ;dekrementacja esi
        loop zmienna_A
        jmp loop_2

loop_2:
        wysw_znak 13
        wysw_znak 10   ;endl
        wyswietl txt2
        mov cx, 8
        mov esi, 7

zmienna_B:
        call pobierz_znak
        shl al,4
        push ax
        call pobierz_znak
        pop dx
        add al,dl
        mov byte[zm2+esi],al
        dec esi
        loop zmienna_B
        jmp loop_3

loop_3:
        wysw_znak 13
        wysw_znak 10
        wyswietl txt3
        mov cx, 8
        mov esi, 7
zmienna_C:
        call pobierz_znak
        shl al,4
        push ax
        call pobierz_znak
        pop dx
        add al,dl
        mov byte[zm3+esi],al
        dec esi
        loop zmienna_C
        jmp dalej

dalej:

        mov bx,0 ;licznik przesuniec
        mov dl,0
        jmp sprawdzenie_1

sprawdzenie_1:

        mov esi, 7
        jmp sprawdzenie_1.1

sprawdzenie_1.1:
        dec esi

sprawdzenie_1.2:
        mov al, byte[zm2+esi]    ;bitowa wartosc [zm2+esi]
        cmp al, 0
        jne dziel_a
        cmp esi, 0
        jne sprawdzenie_1         ;jezeli b = 0 to wyswietla '***'
        jmp bledny_wynik

dziel_a:

        mov al,byte[zm2+7]  ;przypisanie 7 bajta (7 czesc bitową) do rejestru al - rejestr 8 bitowy / 1 bajtowy
        rcl al,1    ;przesuniecie w lewo z zachowaniem wysunietego bitu w fladze carry
        jc dziel_d   ;jezeli flaga carry != 0

dziel_b:

        mov ecx,8
        mov esi,0
        clc      ;ustawia flage carry na 0

dziel_c:
        mov al,byte[zm2+esi]
        rcl al,1
        mov byte[zm2+esi],al
        inc esi

        loop dziel_c
        inc bx   ;licznik przesuniec
        jmp dziel_a

dziel_d:

        mov esi,7
        jmp dziel_d.1

dziel_d.1:
        dec esi
        jmp dziel_d.2

dziel_d.2:
        mov al,byte[zm1+esi]
        mov ah,byte[zm2+esi] ; porównujemy czy dzielna >= dzielnik
        cmp al,ah
        ja dziel_e
        mov dl,0
        jb dziel_g

        cmp esi,0
        jne dziel_d.1
        jmp dziel_e

dziel_e: ;odejmowanie krok 3
         mov ecx,8
         mov esi,0
         clc

dziel_f:
        mov al,byte[zm1+esi]
        mov dl,byte[zm2+esi]
        sbb al,dl
        mov byte[zm1+esi],al ; działanie dzielna = dzielna - dzielnik (A = A - C)
        inc esi
        loop dziel_f
        mov dl,1  ; ustawiamy w miejsce C ze schematu liczbe 1

dziel_g:
        mov ecx,8
        mov esi,0
        clc

dziel_h:
        mov al,byte[wynik1+esi] ; przesuwamy zmienną wynikową o 1 w lewo
        rcl al,1
        mov byte[wynik1+esi],al
        inc esi
        loop dziel_h

dziel_i:
        add byte[wynik1],dl ;do pierwszego bajtu wyniku1 dodajemy rejestr dl
        cmp bx,0
        jne dziel_j ; porównujemy licznik przesuniec do 0 jesli nie to skok do porównania dzielnej z dzielnikiem
        cmp bx,0
        je dodaj_1

dziel_j:
        dec bx
        mov ecx,8
        mov esi,7

dziel_k:
        mov al,byte[zm2+esi]
        rcr al,1    ;przesuniecie w prawo z uwzglednieniem flagi carry
        mov byte[zm2+esi],al
        dec esi
        loop dziel_k
        jmp dziel_d

dodaj_1:
        mov ecx,8
        mov esi,0
        clc

dodaj_2:
        mov al,byte[wynik1+esi]
        mov dl,byte[zm3+esi]
        adc al,dl
        mov byte[wynik3+esi],al
        inc esi
        loop dodaj_2
        jmp wynik_1

wynik_1:
        wysw_znak 10
        wysw_znak 13     ;endl
        wyswietl txt4

wynik_2:
        mov esi,7
        mov ecx,8    ;indeks wyswietlanego bitu
        jmp wynik_3

wynik_2.a:
        dec esi

wynik_3:
        mov al,byte[wynik3+esi]
        shr al,4
        cmp al,10
        jae wynik_4
        add al,48
        jmp wynik_5

wynik_4:
        add al,55

wynik_5:
        wysw_znak al ;pierwsza liczba bitu

wynik_6:
        mov al,byte[wynik3+esi]        ;przypisanie rejestrowi al bitowej wartosci [wynik3+esi]
        shl al,4
        shr al,4
        cmp al,10
        jae wynik_7
        add al,48
        jmp wynik_8

wynik_7:
        add al,55

wynik_8:
        wysw_znak al       ;druga liczba bitu
        loop wynik_2.a
        jmp last

bledny_wynik:
        wysw_znak 10
        wysw_znak 13
        wyswietl txt4
        wysw_znak 42
        wysw_znak 42
        wysw_znak 42    ;dzielenie przez zero powoduje wyswietlenie gwiazdek


last:
        wysw_znak 10
        wysw_znak 13
        wyswietl txt7
        pob_znak
        cmp al,'q'
        je def_end
        cmp al,'q'
        jne last      ;kiedy nie zostanie wcisniety klawisz q to zapetlenie

def_end:

        end_prog

section '.data' data readable writeable

        zm1 dq 0
        wynik1 dq 0   ;dq = ( 64 bit  => 8 bajtów )
        wynik2 dq 0
        wynik3 dq 0
        zm2 dq 0
        zm3 dq 0

        txt5 db 'y = a / b + c ',10,13,0
        txt6 db 'Liczby wprowadzamy w kodzie szesnastkowym (HEX)!',10,13,0

        txt1 db 'Wprowadz Liczbe a:',10,13,0
        txt2 db 'Wprowadz Liczbe b:',10,13,0
        txt3 db 'Wprowadz Liczbe c:',10,13,0
        txt4 db 'a / b + c = ',0

        txt7 db 'Aby zakonczyc program wcisnij klawisz "q"',0

pobierz_znak:
ety1:         ;zakres wprowadzanych danych
        pob_znak

        cmp al,'0'
        jb start
        cmp al,'9'
        jbe cyfra
        cmp al,'A'
        jb start
        cmp al,'F'
        jbe duza_litera
        cmp al,'a'
        jb start
        cmp al,'f'
        ja start

mala_litera:
        push ax
        wysw_znak al
        pop ax
        sub al,87
        jmp ety2
duza_litera:
        push ax
        wysw_znak al
        pop ax
        sub al,55
        jmp ety2
cyfra:
        push ax
        wysw_znak al
        pop ax
        sub al,48

ety2:
        ret





Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật