Минимум и максимум поменять местами - 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
Объяснение кода листинга программы
- Переменная
al
содержит значение 'x'. - Выполняется команда перехода на функцию 29h.
- Функция 29h выполняет обмен значениями между регистрами ah и bl.
- Значение регистра ah теперь содержит минимум, а значение регистра bl - максимум.
- Возвращается управление в предыдущую программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д