Использование директивы JUMPS в TASM - Assembler

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

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

Здравствуйте. Не знаю насколько глупый вопрос, но у меня следующую проблему выдает Turbo Assembler:
**Error** my.asm(246) UBYV_POSLED(45) Relative jump out of range by 000Fh bytes **Error** my.asm(246) UBYV_POSLED(52) Relative jump out of range by 0081h bytes
Вот в этом участке кода:
.MODEL SMALL
.STACK 100h
 
.DATA
 
    mass_A DW 100 dup(0)
    mass_B DW 100 dup(0)
    mass_C DW 100 dup(0)
    i_A DW 0
    j_A DW 0
    i_B DW 0
    j_B DW 0
    i_C DW 0
    j_C DW 0
    temp DW 0
    numToStr DW 7 dup(?),'$' 
    buffer DW 0ah,11 dup(' ')
    messin_1 DB 'Input number N',10,13,'$'
    messin_2 DB 13,10,'Input elements ',10,13,'$'
    messin_3 DB 'Input number M',10,13,'$'
    text DB "",0dh,0ah
    text1 DB '   Number = ''$' 
    newline DB 10,13,'$'
    newSpace DB ' ','$'
 
.CODE
 
ubyv_posled MACRO mass, iline, jline
    LOCAL cycli
    LOCAL cyclj
    LOCAL yes
    LOCAL addbx
    LOCAL one
    LOCAL no
    LOCAL prin
    LOCAL prin1
    LOCAL xi
    LOCAL stolb
        push di
        push bx
        push cx
        push ax
        mov cx, iline
        xor di, di
        cycli:
            push cx                                 ;сохраняем счетчик по i
            mov cx, jline                           ;загружаем в счетчик j
            cmp cx, 1                               ;проверямем, если столбец
            ;jle stolb
            dec cx                                  ;уменьшаем длинну строки, что бы не выйти за пределы массива
            xor bx, bx
            cyclj:
                push ax                             ;сохраняем
                push bx                             ;значения регистров
                mov ax, mass[di]                    ;в ax первый элемент
                mov bx, mass[di+2]                  ;в bx второй элемент 
                cmp ax, bx                          ;сравниваем два соседних элемента
                jg yes                              ;если разность первого и второго больше нуля то переходим по метки yes
                jle no                              ;если меньше либо рава нулю то переходим по метки no
                yes:
                pop bx                              ;восстанавливаем значение bx
                pop ax                              ;восстанавливаем значение ax
                cmp bx, 0                           ;смотрим на значение регистра bx
                jnz addbx                           ;если последовательность уже формируется переходим по метки addbx
                jz one                              ;если это первые элементы последовательности переходим по метки one
                no:
                pop bx                              ;восстанавливаем значение bx
                pop ax                              ;восстанавливаем значение ax
                cmp bx, 0                           ;смотрим на значение регистра bx
                jnz prin                            ;если последовательность существует, то передаем её на печать по метки prin
                jz xi
                addbx:
                inc bx                              ;увеличиваем значение количества элементов в последовательности
                jmp xi
                one:
                mov bx, 2                           ;теперь в последовательности два элемента
                mov ax, di                          ;заносим в ax стартовый индекс последовательности
                jmp xi
                prin:
                print_pos                           ;отправляем на печать массив, начальный индекс и длинну последовательности
                xi:                     
                add di, 2                           ;увеличиваем смещение в массиве
                loop cyclj
            cmp bx, 0                               ;проверяем, если вдруг вся строка была убывающей последователностью
            jz stolb
            print_pos                                          
            stolb:
            add di, 2                               ;из-за того, что мы проходим на один элемент меньши, увеличиваем смещение в массиве
            pop cx                                  ;восстанавливаем счетчик по i
            loop cycli
        pop ax
        pop cx
        pop bx
        pop di
    ENDM
    
    print_pos MACRO
    LOCAL cyclm
        push di
        push cx
        push bx
        push ax
        xor di, di
        mov di, ax
        mov cx, bx
        cyclm:
            mov ax, mass_A[di]
            lea bx, numToStr
            call bin2str
            pop ax
            mov ah, 9
            lea dx, numToStr+1
            int 21h
            printMessage newSpace
            add di,2
            loop cyclm
        printMessage text1
        pop ax
        pop bx
        mov ax,bx
        lea bx, numToStr
        call bin2str
        pop ax
        mov ah, 9
        lea dx, numToStr+1
        int 21h
        printMessage newline
        xor ax, ax
        xor bx, bx
        pop cx
        pop di
    ENDM
Преподаватель сказал, что нужно использовать .JUMPS для корректной работы переходов, но Turbo Assemble не воспринимает и пишет:
**Error** my.asm(2) Unknown character
Что сделать в данном случае, что бы переходы были достаточными?

Решение задачи: «Использование директивы JUMPS в TASM»

textual
Листинг программы
loop cycli

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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