Ошибка перехода - Assembler

Узнай цену своей работы

Формулировка задачи:

Нужно выполнить задание с условнм переходом Написал код
.model small
    .stack 100h
    .data
        cr_lf db 0Ah, 0Dh, '$'
        a dw 20
        b dw 5
        x dw ?
        s dw 5 dup ('?')
        m dw '-'
        z1 dw ?
        z2 dw ?
        mesg db 'Delenie na 0', '$'
    .code
    start:  mov ax, @data
        mov ds, ax
        mov ax, a
        mov bx, b
        cmp ax, bx
        jg @@3
        jl @@4
    ; a=b
        xor ax, ax
        mov ax, -5
        mov x, ax
        xor ax, ax
        xor bx, bx
        jmp @@minus
    ; a>b
    @@3:
        xor ax, ax
        mov ax, b       ;ax -> b
        cwd
        idiv a          ;ax-> b/a
        add ax, -61     ;ax-> b/a - 61
        mov x, ax
        js @@minus
        jns @@plus
    ; a<b
    @@4:
        xor ax,ax
        mov ax, b
        cmp ax, 0
        je @@Error
        sub ax, a
        add ax,-5 ; млaдш.часть ах=ах+(-5)
        adc dx, 0ffffh ; старшая часть dx=dx+(-5)
        cwd
        idiv b
        mov x, ax
        cmp x, 0
        jl @@minus
        jg @@plus
    ; деления на 0
    @@Error:
        mov ah,09h
        mov dx, offset mesg
        int 21h
        jmp @@Exit
    ; вывод отрицательного числа
    @@minus:
        xor ax, ax
        xor bx, bx
        mov ax, x
        mov bx, m
        mov s, bx
        sub ax, 0001b   ; превращение 
        xor ax, 0FFFFh  ; в положительное число или neg ax
        mov z1, ax
        xor ax, ax
        mov ax, z1
        xor bx, bx
        mov bl, 1010b
        div bl
        add ax, 30h
        mov s+1, ax
        xor ax, ax
        mov ax, z1
        div bl
        mul bl
        mov z2, ax
        mov ax, z1
        sub ax, z2
        add ax, 30h
        mov s+2, ax
        mov s+3, '$'
        mov ah, 09h
        mov dx, offset s
        int 21h
        jmp @@Exit
    ; вивод положительного числа
    @@plus:
        xor ax, ax
        xor bx, bx
        mov ax, x
        mov bl, 1010b
        div bl
        add ax, 30h
        mov s, ax
        xor ax, ax
        mov ax, x
        div bl
        mul bl
        mov z2, ax
        mov ax, ax
        sub ax, z2
        add ax, 30h
        mov s+1, ax
        mov s+3, '$'
        mov ah,09h
        mov dx, offset s
        int 21h
        jmp @@Exit
    @@Exit:
        mov ax, 4c00h
        int 21h
        end start
но выскакивает ошибка **Error** os2lab1.asm(37) Relative jump out of range by 0002h bytes почитал в нете за ошибку - пишут что это из-за ограниченифя в диапазоне, но как исправить не понял помогите исправаить пожадуйста

Решение задачи: «Ошибка перехода»

textual
Листинг программы
61        xor ax, ax
62        xor bx, bx
63        mov ax, x
64        mov bx, m
 
68       mov z1, ax
69       xor ax, ax
70       mov ax, z1
 
92        xor ax, ax
93        xor bx, bx
94        mov ax, x
95        mov bl, 1010b
 
99        xor ax, ax
100        mov ax, x
 
103        mov z2, ax
104        mov ax, ax
105       sub ax, z2

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы