Member 11004573 Ответов: 1

Сортировки массива на ассемблере


Привет всем!

я пытаюсь отсортировать массив в порядке убывания на языке ассемблера, но у меня все еще есть две ошибки
1:**ошибка** Array123.asm(12) относительный прыжок за пределы диапазона на 007Fh байт


2:**Ошибка** Array123.asm(119) относительный скачок из диапазона на 0080h байт


Обе ошибки в операторе цикла, пожалуйста, помогите мне, если кто-нибудь решит этот запрос.

.model small
.stack 100h
.data
Array db 1,2,3,4,5,6,7,8,9
.code
Main Proc
mov ax,@data
mov ds,ax
;Make Different Session
mov cx,10
Again:
jcxz Comp
mov bl,Array
cmp bl,Array+1
jl One

One:
mov bl,Array
mov cl,Array+1
XCHG bl,cl
mov Array,bl
mov Array+1,cl

mov bl,Array+1
cmp bl,Array+2
jl Two

Two:
mov bl,Array+1
mov cl,Array+2
XCHG bl,cl
mov Array+1,bl
mov Array+2,cl

;Threee
mov bl,Array+2
cmp bl,Array+3
jl Three

Three:
mov bl,Array+2
mov cl,Array+3
XCHG bl,cl
mov Array+2,bl
mov Array+3,cl

;Fourr
mov bl,Array+3
cmp bl,Array+4
jl Four

Four:
mov bl,Array+3
mov cl,Array+4
XCHG bl,cl
mov Array+3,bl
mov Array+4,cl

;Five
mov bl,Array+4
cmp bl,Array+5
jl Five

FIve:
mov bl,Array+4
mov cl,Array+5
XCHG bl,cl
mov Array+4,bl
mov Array+5,cl

;Six
mov bl,Array+5
cmp bl,Array+6
jl Six

Six:
mov bl,Array+5
mov cl,Array+6
XCHG bl,cl
mov Array+5,bl
mov Array+6,cl

;Seven
mov bl,Array+6
cmp bl,Array+7
jl Seven

Seven:
mov bl,Array+6
mov cl,Array+7
XCHG bl,cl
mov Array+6,bl
mov Array+7,cl

;Eight
mov bl,Array+7
cmp bl,Array+8
jl Eight

Eight:
mov bl,Array+7
mov cl,Array+8
XCHG bl,cl
mov Array+7,bl
mov Array+8,cl

;Ninth
mov bl,Array+8
cmp bl,Array+9
jl Ninth

Ninth:
mov bl,Array+8
mov cl,Array+9
XCHG bl,cl
mov Array+8,bl
mov Array+9,cl

Loop Again
;Display Session
Comp:
mov dl,Array
add dl,48
mov ah,02
int 21h

mov dl,Array+1
add dl,48
mov ah,02
int 21h

mov dl,Array+2
add dl,48
mov ah,02
int 21h

mov dl,Array+3
add dl,48
mov ah,02
int 21h
mov dl,Array+4
add dl,48
mov ah,02
int 21h

mov dl,Array+5
add dl,48
mov ah,02
int 21h
mov dl,Array+6
add dl,48
mov ah,02
int 21h

mov dl,Array+7
add dl,48
mov ah,02
int 21h

mov dl,Array+8
add dl,48
mov ah,02
int 21h

mov dl,Array+9
add dl,48
mov ah,02
int 21h

mov ah,4ch
int 21h

Main Endp
End Main

Tomas Takac

Я бы сказал, что вы прыгаете слишком далеко. Данная метка должна быть короткой (от -128 до +127 байт от инструкции, следующей за прыжком).

1 Ответов

Рейтинг:
0

Kornfeld Eliyahu Peter

У вас есть два варианта:
1. Сделайте так, чтобы весь ваш код использовал дальние указатели (это означает, что компилятор будет использовать word/dword для вычисления адреса)

Main Proc FAR

2. Сделайте так, чтобы только цикл использовал дальние указатели
jcxz FAR Comp