Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2009, 18:47   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию Поиск минимума в массиве.

Написала программу нахождения минимума. Главное условие, должен использоваться способ адресация по базе со смещением. Посмотрите пожалуйста то ли я делаю. И как вывести полученный результат? Зарание спасибо

.model tiny
.code
org 100h
main:
xor ax,ax
xor bx,bx
mov bx,offset arr
mov ax,word ptr arr[bx] ;занесли первый элеменент, на регистр, ax=min
mov cx,4 ;так как первый элемент уже обработан количество повторений=n-1
cyc:
mov bx,[bx+2] ;переходим на следующий эелемент
cmp word ptr arr[bx],ax ;сравниваем текущее значение с min, word ptr используется так как нам нужен не 1 байт а 2
jl min ;если bx<min переходим на min
min:
mov ax,bx
loop cyc

int 21h
ret

arr dw 2,4,5,1,6
end main
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 17.09.2009, 18:55   #2
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Код:
cmp word ptr arr[bx],ax 
jl min 
min:
mov ax,bx
loop cyc
а если больше min, куда деваться?
jl min
loop cyc
min:
mov ax,bx
loop cyc
Д'якон вне форума Ответить с цитированием
Старый 17.09.2009, 19:01   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

да поняла косяк. ну как вывести значение?
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 17.09.2009 в 19:06.
Sparky вне форума Ответить с цитированием
Старый 17.09.2009, 19:06   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Может так.
Код:
.model tiny
.code
org 100h
main:
xor ax,ax
xor si,si
mov bx,offset arr
mov ax,word ptr [bx] ;занесли первый элеменент, на регистр, ax=min
mov cx,4 ;так как первый элемент уже обработан количество повторений=n-1
cyc:
add si,2 ;переходим на следующий эелемент
cmp word ptr [bx+si],ax ;сравниваем текущее значение с min, word ptr используется так как нам нужен не 1 байт а 2
jnl skeep ;если элемент >= min переходим на skeep
mov ax,[bx+si]
skeep:
loop cyc

int 20h
ret

arr dw 2,4,5,1,6
end main
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 17.09.2009 в 19:09.
Goodwin98 вне форума Ответить с цитированием
Старый 17.09.2009, 19:08   #5
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

а через bx нельзя? а ваш код подойдет под условия? и почему mov cx,4 ;так как первый элемент уже обработан количество повторений=n-1, там разве не +2 будет?
Вот так можно?
.model tiny
.code
org 100h

main:
xor ax,ax
xor bx,bx
mov bx,offset arr
mov ax,word ptr arr[bx] ;занесли первый элеменент, на регистр, ax=min
mov cx,4 ;так как первый элемент уже обработан количество повторений=n-1
cyc:
mov bx,[bx+2] ;переходим на следующий элемент
cmp word ptr arr[bx],ax ;сравниваем текущее значение с min, word ptr используется так как нам нужен не 1 байт а 2
jng no ;если bx>=min переходим на no
mov ax,word ptr arr[bx]
loop cyc
int 21h
ret
no:
loop cyc


arr dw 2,4,5,1,6
end main
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 17.09.2009 в 19:15.
Sparky вне форума Ответить с цитированием
Старый 17.09.2009, 19:18   #6
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
а через bx нельзя? а ваш код подойдет под условия?
А что здесь не через bx разве?
В bx - база, а в si - смещение.
Цитата:
и почему mov cx,4 ;так как первый элемент уже обработан количество повторений=n-1, там разве не +2 будет?
Число в cx задает сколько раз будет повторятся цикл. См действие команды loop
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 17.09.2009, 19:18   #7
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Прости ступила, не туда посмотрела Спасибо, но вот как вывести это значение?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 17.09.2009, 19:27   #8
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Покуда числа меньше 10, то можно обойтись.
Код:
add al,30h ; делаем из числа символ
mov dl,al
mov ah,2
int 21h ; выводим его на экран
Если будут числа по больше, то можно так
Код:
@oi1:  
        xor     cx, cx
        mov     bx, 10
@oi2:   
        cwd
        div     bx
; Делим число на десять. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
        push    dx
        inc     cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
        test    ax, ax
        jnz     @oi2
; Теперь приступим к выводу.
        mov     ah, 02h
@oi3:   pop     dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
        add     dl, 30h
        int     21h
; Повторим ровно столько раз, сколько цифр насчитали.
        loop    @oi3
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 17.09.2009, 19:28   #9
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

org 100h
main:
xor ax,ax
xor si,si
mov bx,offset arr
mov ax,word ptr [bx] ;занесли первый элеменент, на регистр, ax=min
mov cx,4 ;так как первый элемент уже обработан количество повторений=n-1
cyc:
add si,2 ;переходим на следующий эелемент
cmp word ptr [bx+si],ax ;сравниваем текущее значение с min, word ptr используется так как нам нужен не 1 байт а 2
jnl skeep ;если элемент >= min переходим на skeep
mov ax,[bx+si]
skeep:
loop cyc

cmp ax,0
je mes
jnl mes2
;int 20h
;ret
mes:
mov ah,9
mov dx,offset yes
int 21h
ret

mes2:
mov ah,9
mov dx,offset no
int 21h
ret


no:
db 'no',0ah,0dh,'$'

yes:
db 'yes',0ah,0dh,'$'
arr dw 2,4,5,1,6
end main

вот так я ее оттестила, работает верно, но вот второй вопрос остался открытым
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 17.09.2009, 19:29   #10
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

а что значат @?

add al,30h ; делаем из числа символ
mov dl,al
mov ah,2
int 21h ; выводим его на экран
вот этот вариант я видела, пробовала даже но пишет ошибку приведения типов Хотя теперь работает
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 17.09.2009 в 19:32.
Sparky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в массиве ADSoft PHP 1 07.08.2009 11:17
Програма на Pascal: нахождение минимума с помощью процедуры в 2мерном массиве. Нужна помощь. Lopirion Помощь студентам 2 28.12.2008 21:23
Нахождение минимума и максимума в трехмерном массиве 1234 Помощь студентам 11 26.05.2008 16:23
Поиск минимума Иринкаа Помощь студентам 1 19.11.2007 22:00
Задача на поиск минимума Stan Паскаль, Turbo Pascal, PascalABC.NET 3 25.06.2007 19:23