Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как вывести максимальное число на экран  (Прочитано 22706 раз)
0 Пользователей и 10 Гостей смотрят эту тему.
sersad
Гость
« : 27-12-2008 11:11 » 

Добрый день, поистине неисповедимы пути ассемблера, при написании этой программы хотелось что бы был найден максимальный элемент и показан на экране, и как результат на экране не то что нужно, подскажите что не так.

begin:   jmp setup
    mass db 1,2,3,4,5
    max db'максимальный$'
setup:
      mov cl,4
      lea bx,mass
      mov al,[bx]
      inc bx
      m2: cmp al,[bx]
      jnc m1
      mov al,[bx]
      m1: inc bx
      dec cl
      jnz m2
      mov max ,al
      mov ah,09
      lea dx,max
      int 21h
      xor ax,ax
      int 16h
      int 20h
Записан
4y4z
Участник

ru
Offline Offline
Младший саппорт


« Ответ #1 : 03-01-2009 17:13 » 

Если бы это был код на С и других языках высокого уровня, то после каждой операции по изменению содержимого переменных(а таковыми в данном случае естественно будут все регистры после выполнения mov) то  нужно было бы вывести на печать содержимое измененной переменной. Но в данном случае нужно пропустить программу через отладчик. Увидите как меняется содержимое регистров, чтобы проверить правильно ли она работает.
Записан

Ищу работу. (разработка/тестирование/отладка)
SAVC
Гость
« Ответ #2 : 04-01-2009 16:25 » 

Насколько я понял, ты на TASM пишешь.
И линкуешь в COM файл.
Давно уже ничего не делал для x86
Но по старой памяти написал бы вот так:

Код:
	mov	si,offset mass
mov cl,5

lodsb
m1: mov ah,al
m2: dec cl
jz m3
lodsb
cmp ah,al
jc m1
jmp sort m2

m3: mov byte ptr max,ah
mov ah,9
mov dx,offset max
int 21h
mov ah,0
int 16h
int 20h

max: db '  максимальный$'
mass: db 1,2,3,4,5

jmp short m2
« Последнее редактирование: 04-01-2009 18:00 от RXL » Записан
sersad
Гость
« Ответ #3 : 08-01-2009 10:12 » 

Не могли бы вы подсказать что за команда    jmp sort m2  а то программа пишет что такого она не знает
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 08-01-2009 10:31 » 

а так )

jmp  m2 
Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 08-01-2009 10:40 » 

jump sort = jump short ?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sersad
Гость
« Ответ #6 : 12-01-2009 20:46 » 

Доброго времени суток присланная прога от SAVC, выдает такое же сообщение как и мой вариант, не ищет она число и не выводит его на экран, а выводит надпись " максимальный"
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 13-01-2009 07:32 » 

sersad, ну правильно не выводит Улыбаюсь числа, зато ищет Улыбаюсь
а если сделать
Код:
m3:	mov	byte ptr max,ah
mov ah,9
mov dx,offset max
int 21h
; теперь нужно вывести максимальное число, которое лежит, кажется в ah,
;предварительно преобразовав в символ и добавить знак $
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sersad
Гость
« Ответ #8 : 13-01-2009 12:28 » 

Sla, получилось вот так
 begin:   jmp setup
    mass db 1,2,3,4,5
    max db'0$'
setup:
      mov cl,4
      lea bx,mass
      mov al,[bx]
      inc bx
      m2: cmp al,[bx]
      jnc m1
      mov al,[bx]
      m1: inc bx
      dec cl
      jnz m2
      mov max ,al
      mov ah,09
      add max,48
      lea dx,max
      int 21h
      xor ax,ax
      int 16h
      int 20h
пришлось несколько переделать программу , пришлось отказаться от записи "максимальный" потому как не понимаю почему но не подменяется это сообщение тем числом которое прога вычислила , очевидно что не хватает ему места, а как это сделать пока не знаю.И еще не считает она почему то числа более 9. Подскажите .
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 13-01-2009 12:40 » 

вообще-то оно не будет работать с числами больше 15
почему? Думаю, что сам ответишь

а вот почему не выводилось
так ты ж пред выводом строки запихнул в ah код функции,тем самім затерев результат
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 13-01-2009 12:41 » 

sersad, и...  оформляй код тегами [code][/code]
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sersad
Гость
« Ответ #11 : 15-01-2009 14:01 » 

Sla, не то чтобы больше 15 оно и больше 10 не считает(правильно подмечено "оно") у меня пока только это и получается,если вы про эту команду mov max ,al   --   так ты ж пред выводом строки запихнул в ah код функции,тем самім затерев результат-- если можно то конкретно ткните где что не так , не особенно понял.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 15-01-2009 14:27 » 

sersad, слухай, откоментируй этот код, на каждую строчку
Код:
begin:	jmp setup
mass db 1,2,3,4,5
max db'0$'
setup:
mov cl,4 ;количество чисел
lea bx,mass ;загрузить указатель
mov al,[bx] ;al=mass[0]
inc bx ;увеличить индекс массива
m2:
cmp al,[bx]
jnc m1
mov al,[bx]
m1:
inc bx
dec cl
jnz m2
mov max ,al
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sersad
Гость
« Ответ #13 : 16-01-2009 11:51 » 

begin:   jmp setup
    mass db 1,2,3,4,5
    max db'0$'
setup:
      mov cl,4        счетчик количества цифр
      lea bx,mass     загружаем в регистр bx
      mov al,[bx]     первое число в al
      inc bx          следующее число 
      m2: cmp al,[bx] сравниваем новое число с тем что в al
      jnc m1          смотрим флаг переход на m1
      mov al,[bx]     следующее число в al
      m1: inc bx      следующее число
      dec cl          уменьшаем счетчик
      jnz m2          смотрим флаг переход на m2
      mov max ,al     запись результата работы проги в al
      mov ah,09       вывод числа на экран
      add max,48      сложить значения max с 48
      lea dx,max      переслать max  в регистр dx
      int 21h         прерывание
      xor ax,ax       очистить регистр ax
      int 16h         прерывание
      int 20h         завешение программы
но есть для меня и здесь не ясные команды так на пример мне не понятен смысл add max,48 ;      xor ax,ax ; потому  как если эти значения не вводить то не остается открытым окно проги, а так хотелось его увидеть.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 16-01-2009 12:05 » 

sersad, 48 добавляем чтобы вывести число на экран
поэтому у тебя и  выводятся числа от 0 до 9, а реально - тебе доступно для сортировки числа размерностью al (0...255)

зы... я тебя просил оформи свой код тегами  [code] [/code]

 
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines