Минимум и максимум поменять местами - Assembler

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

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

Привет всем. Есть программа, которая по сути работает, но не знаю почему зацикливается и выдает странный результат, в ассемблере я все еще пока-что профан, не могли бы вы мне подсказать причину ? Работать должна в emu8086
.8086 
.model tiny 
 
.code 
org 100h 
N92254891: 
mov ah,2Ch 
int 21h 
mov bx,60 
mov ch,dh 
mov al,dl 
mul bl 
mov dh,bh 
mov dl,ch 
add ax,dx 
mul bx 
mov ch,bh 
add ax,cx 
mov Seed,ax 
mov bx,8 
call Rnd 
add ax,3 
mov Rows,ax 
inc bx 
call Rnd 
add ax,3 
mov Cols,ax 
mul Rows 
mov Len,ax 
mov cx,ax 
lea di,Matrix 
CreateLoop: 
call Rnd 
mov ax,Seed 
stosw 
loop CreateLoop 
lea dx,Text1 
mov ah,9 
int 21h 
mov ax,Rows 
xor cx,cx 
call WriteInt 
mov al,'x' 
int 29h 
mov ax,Cols 
xor cx,cx 
call WriteInt 
mov ah,9 
lea dx,Text2 
int 21h 
call WriteMatrix 
mov cx,Len 
dec cx 
lea bx,Matrix 
mov di,bx 
mov si,bx 
MinMax: 
add bx,2 
mov ax,[bx] 
cmp ax,[di] 
jle NotMax 
mov di,bx 
NotMax: 
cmp ax,[si] 
jge NotMin 
mov si,bx 
NotMin: 
loop MinMax 
 
;ÏåðåìåГ*Г* ìåñòГ*ìè Г¬Г*êñèìóìГ* ГЁ ìèГ*èìóìГ* 
;Гў di Г*äðåñ Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îãî ýëåìåГ*ГІГ* 
;Гў si Г*äðåñ ìèГ*ГЁГ¬Г*ëüГ*îãî 
mov ax,[si] 
xchg ax,[di] 
mov [si],ax 
 
mov ah,9 
lea dx,Text3 
int 21h 
call WriteMatrix 
xor ah,ah 
int 16h 
int 20h 
 
WriteInt: 
push bx 
push di 
std 
cwd 
xor ax,dx 
sub ax,dx 
push dx 
lea di,Buff+9 
mov bx,10 
WrInt1: 
cwd 
div bx 
or dl,30h 
mov [di],dl 
dec di 
dec cx 
test ax,ax 
jnz WrInt1 
pop ax 
and al,2Dh 
jz WrInt2 
stosb 
dec cx 
WrInt2: 
test cx,cx 
jle WrInt3 
mov al,20h 
rep stosb 
WrInt3: 
cld 
inc di 
mov dx,di 
mov ah,9 
int 21h 
pop di 
pop bx 
ret 
 
WriteMatrix: 
lea si,Matrix 
xor bx,bx 
mov cx,Len 
WrMtrx1: 
push cx 
lodsw 
mov cx,7 
call WriteInt 
inc bx 
mov ax,bx 
cwd 
div Cols 
test dx,dx 
jnz WrMtrx2 
lea dx,CRLF 
mov ah,9 
int 21h 
WrMtrx2: 
pop cx 
loop WrMtrx1 
ret 
 
Rnd: 
push dx 
mov ax,Seed 
mov dx,101 
mul dx 
add ax,59077 
mov Seed,ax 
mul bx 
mov ax,dx 
pop dx 
ret 
 
Text1 db 'Г„Г*Г*Г* Г¬Г*òðèöГ* ($' 
Text2 db '):' 
CRLF db 13,10,36 
Text3 db 10,'ГЊГ*êñèìóì ГЁ ìèГ*èìóì ïîìåГ*ÿëèñü ìåñòГ*ìè:',13,10,36 
Seed dw ? 
Rows dw ? 
Cols dw ? 
Len dw ? 
Matrix dw 110 dup (?) 
Buff db 10 dup (?),36 
end N92254891

Решение задачи: «Минимум и максимум поменять местами»

textual
Листинг программы
mov al,'x' 
int 29h

Объяснение кода листинга программы

  1. Переменная al содержит значение 'x'.
  2. Выполняется команда перехода на функцию 29h.
  3. Функция 29h выполняет обмен значениями между регистрами ah и bl.
  4. Значение регистра ah теперь содержит минимум, а значение регистра bl - максимум.
  5. Возвращается управление в предыдущую программу.

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


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

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

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