Image

Здравствуйте!
мне нужна ваша помощь по ассемблеру)
есть такая часть кода:

    xchg SI, DX
    xor AX, AX
    mov AH,2
    int 21h


и почему то, после 21-го прерывания моя программа куда-то улетает(за пределы моего кода)
компилировала на ml

причём с данной проблемой я сталкиваюсь не в первый раз, обычно она исчезает после каких-то хитрых махинаций с кодом. Просто уже действительно хочется разобраться.

вот весь код:


.286

DATA segment
    N dw 6h

DATA ends

STK segment stack
    db 100h dup (0)
STK ends

CODE segment
    ASSUME CS:CODE,DS:DATA,SS:STK
main:
    mov AX,DATA
    mov DS,AX
    push N
    xor DX, DX
    call Fact
    mov SI, AX
    shr AX, 8
    push AX
    call TetrToCh16
    mov AX, SI
    mov SI, DX
    push AX
    call TetrToCh16   
    xchg SI, DX
    xor AX, AX
    mov AH,2
    int 21h
    mov DX, SI
    xor AX, AX
    mov AH,2
    int 21h   
    int 21h
    mov AX,4C00h
    int 21h

    TetrToCh16 PROC
        push BP
        mov BP, SP
        xor AX, AX
        xor DX, DX
    mov BX,DS   
    mov CX,CS   
    mov DS,CX
        mov BX, offset Dig16

        mov AL, 0F0h
        AND AX, [BP+4]
        shr AX, 4
        xlat
        shl AX, 8
        OR DX, AX       

        mov AL, 0Fh
        AND AL, [BP+4]
        xlat
        OR DL, AL   

       
        pop BP;
        ret +2
       
        Dig16 db '0123456789ABCDEF'       
    TetrToCh16 ENDP

    Fact PROC
    push BP
    mov BP, SP
    mov AX, 1
    mov CX, [BP+4]
    m:
        mul CX
        loop m
    pop BP
    ret+2
   
    Fact ENDP
   
CODE ends
end main

За код прошу не ругать, я начинающий программист)