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
Участник
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 а то программа пишет что такого она не знает
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 08-01-2009 10:31 » |
|
а так )
jmp m2
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 08-01-2009 10:40 » |
|
jump sort = jump short ?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
sersad
Гость
|
|
« Ответ #6 : 12-01-2009 20:46 » |
|
Доброго времени суток присланная прога от SAVC, выдает такое же сообщение как и мой вариант, не ищет она число и не выводит его на экран, а выводит надпись " максимальный"
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #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
|
|
« Ответ #9 : 13-01-2009 12:40 » |
|
вообще-то оно не будет работать с числами больше 15 почему? Думаю, что сам ответишь
а вот почему не выводилось так ты ж пред выводом строки запихнул в ah код функции,тем самім затерев результат
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #10 : 13-01-2009 12:41 » |
|
sersad, и... оформляй код тегами [code][/code]
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
sersad
Гость
|
|
« Ответ #11 : 15-01-2009 14:01 » |
|
Sla, не то чтобы больше 15 оно и больше 10 не считает(правильно подмечено "оно") у меня пока только это и получается,если вы про эту команду mov max ,al -- так ты ж пред выводом строки запихнул в ah код функции,тем самім затерев результат-- если можно то конкретно ткните где что не так , не особенно понял.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #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
|
|
« Ответ #14 : 16-01-2009 12:05 » |
|
sersad, 48 добавляем чтобы вывести число на экран поэтому у тебя и выводятся числа от 0 до 9, а реально - тебе доступно для сортировки числа размерностью al (0...255)
зы... я тебя просил оформи свой код тегами [code] [/code]
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
|