Использование директивы JUMPS в TASM - Assembler
Формулировка задачи:
Здравствуйте. Не знаю насколько глупый вопрос, но у меня следующую проблему выдает Turbo Assembler:
Вот в этом участке кода:
Преподаватель сказал, что нужно использовать .JUMPS для корректной работы переходов, но Turbo Assemble не воспринимает и пишет:
Что сделать в данном случае, что бы переходы были достаточными?
**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
**Error** my.asm(2) Unknown character
Решение задачи: «Использование директивы JUMPS в TASM»
textual
Листинг программы
loop cycli
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д