В ассемблере выдаёт не тот результат

В ассемблере выдаёт не тот результат.
Есть программа написаная на языке ассемблер.(Компилятор FAR2):
stk segment stack 'stack'
dw 128 dup(?)
stk ends
Dan segment 'data'
K dw 81
T dw ?
T1 dw ?
T2 dw ?
dan ends
cd segment 'code'
assume cs:cd, ds:Dan, ss:stk
Start:
mov ax,Dan
mov ds,ax

mov ax,K
add ax,K
sub ax,100
mov T,ax

mov dx,K
add dx,K
add dx,K
sub dx,T
mov ax,dx
mov T1,ax

mov bx,T1
mov cx,bx
add cx,T1
add cx,T1
add cx,T
add cx,T
add cx,T
sub cx,K
sub cx,K
sub cx,K
mov bx,cx
mov ax,bx
mov T2,ax

mov ah,4ch
int 21h
cd ends
end Start

НО! При компиляции вместо ожидаемых 486 , выдаёт 230. При пошаговом просмотре через отладчик, показывает, что расчёты идут правильно. Что T2 = 486. Но в ответе відаёт exit code=230. Проблема в 3 блоке. Где ищется Т2. Т.к. при составлении 1го и второго блоков таких ошибок не выходило. Давало верный ответ. Вчём проблема?

  • > Компилятор FAR2
    Что?

    > Проблема в 3 блоке.
    Нет, не в нём.

    > Вчём проблема?
    В том, что код возврата может принимать значения от 0 до 255 (8 двоичных разрядов) , а результат работы программы - 9 разрядов. Самый старший бит отсекается (тем более, что в старший байт регистра ax вы записываете номер функции завершения работы программы 4Ch), а число 486 (01E6h) по модулю 256 как раз и есть 230 (00E6h).
    Вставьте в программу вывод на экран и увидите, что вычисления производятся правильно:

    ;...
    mov bx,cx
    mov ax,bx
    mov T2,ax

    xor cx,cx
    mov bx,10
    PrepLoop:
    xor dx,dx
    div bx
    or dl,30h
    push dx
    inc cx
    test ax,ax
    jnz PrepLoop

    PrintLoop:
    pop ax
    int 29h
    loop PrintLoop

    mov ah,8
    int 21h
    mov ax,T2

    mov ah,4ch
    int 21h
    cd ends
    end Start