Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть программа на ассемблере, выводит много информации на экран и соответственно вся она не помещается, нужно строк 100.
Хочу сделать скроллинг - нажимаешь стрелку вниз, текущая инфа уходит вверх, внизу появляется новая, и наоборот.
Как такое реализовать, если сейчас все выводится с помощью 2 и 9 функции INT 21h?
 
Пока есть два варианта:
1. Выводить всю инфу в файл, потом уже читать из него - короче дописать просмотрщик текстовых файлов со скроллингом. Мешает файл.
2. Разбить всю инфу на страницы и сделать по ним навигацию - предыдущая, следующая. Не так красиво, как просто скроллинг.
 
Добавлено:
В чем разница между "mov ax, @data" и "mov ax, data"?

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 19:35 01-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun
ты ж что-то подобное делал на паскале...
 
1) если это для того чтобы "сдать", то причём тут красота?
2) если "не п.1)", тогда, конечно, надо делать страничную организацию, может только не по дата-буферу, а по видео-странице (помнишь параметр видео "адрес _начала_ видеобуфера?)
 
Добавлено:

Цитата:
В чем разница между "mov ax, @data" и "mov ax, data"?
в конечном результате ничем...
@data - макро-символ, кот поддерживают не все компиляторы, а "data" -- это ты так сам обзываешь сегмент, можно было хоть dseg, _data, главное описать и assume'ать

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 19:49 01-04-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
ты ж что-то подобное делал на паскале...

На Си читал из файла все в буфер и потом выводил
 

Цитата:
1) если это для того чтобы "сдать", то причём тут красота?

Раз делать, то круто

Цитата:
надо делать страничную организацию, может только не по дата-буферу, а по видео-странице (помнишь параметр видео "адрес _начала_ видеобуфера?)

Не совсем понял что ты имеешь ввиду. 0B800h начало видеобуфера.
Для 2 и 9 функций не указывается номер страницы куда выводить.
Но так тоже можно, вывести все на отдельные страницы, при этом они не будут полностью заполнены, так как я не знаю точно сколько будет информации, потом сделать их переключение клавишами.
Но это не так здорово, как полноценный скроллинг по одной строке.

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 20:02 01-04-2012 | Исправлено: A1exSun, 20:03 01-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Но это не так здорово, как полноценный скроллинг по одной строке.

по одной строке -- это изменение начала вывода видео-буфера на 160 байт (при 80х25)

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 20:07 01-04-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
а "data" -- это ты так сам обзываешь сегмент, можно было хоть dseg, _data, главное описать и assume'ать

А если у меня сегменты .STACK, .DATA, .CODE - их assume'ть не требуется же?
 

Цитата:
по одной строке -- это изменение начала вывода видео-буфера на 160 байт (при 80х25)

Не пойму как так можно. Допустим у меня выводится 50 строк текста на экран, первые 25 пропадают же? Откуда я их потом выведу.
Я ищу простейшее решение, чтоб не переписывать весь вывод инфы, которая динамическая.
 
Кстати, если тебя не затруднит, объясни мне в двух словах этот код:

Код:
entry    struc
    mask    dd ?
    msg     db 16 dup(?)            ; 16 characters max including $ terminator
entry    ends
 
table LABEL BYTE
    entry       <00000001h, "111$"> ; [0]
    entry       <00000002h, "222$">           ; [1]
    entry       <00000008h, "333">      ; [3]
table_count = ($ - offset table) / (size entry)

С первым блоком понятно - структура, 2 переменных 4 и 16 байт. А второй, он как массив? Последняя строка так понял в table_count количество элементов в нем, где "$" значит адрес конца этого массива.

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 20:08 01-04-2012 | Исправлено: A1exSun, 20:15 01-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну пиши по 4кб байт 8 раз direct memory-способом, а потом переключайся...
 

Цитата:
А если у меня сегменты .STACK, .DATA, .CODE - их assume'ть не требуется же?

да мало ли ассемблеры наупрощали, использовал бы классическую схему -- проблем не было бы...
кстати, а в чём проблема-то?
 

Цитата:
А второй, он как массив
ну да, типа массив 20-байтовых структур, которые инициализированы 1 2 8 и 111 222...
всё ты правильно понимаешь...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 20:23 01-04-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
ну пиши по 4кб байт 8 раз direct memory-способом, а потом переключайся...

Не понял Я не хочу переписывать вывод, там в 100 местах придется менять ah 2h и 9h int 21h на другое.

Цитата:
да мало ли ассемблеры наупрощали, использовал бы классическую схему -- проблем не было бы...  
 кстати, а в чём проблема-то?

Проблемы нет, только интерес.

Цитата:
типа массив 20-байтовых структур

LABEL - это же метка?

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 20:38 01-04-2012 | Исправлено: A1exSun, 20:42 01-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun

Цитата:
Проблемы нет, только интерес

изначально на ассемблере х86 принято писать так:
Код:
DATA SEGMENT BYTE PUBLIC ; тут ещё можно имя, например 'DATA'
...
DATA ENDS
 
STACK SEGMENT BYTE PUBLIC
...
STACK ENDS
 
 
CODE SEGMENT BYTE PUBLIC
          ASSUME  CS:CODE, DS:DATA, SS:STACK
...
CODE ENDS
всё остальное -- так или иначе одно и тоже и нацелено на то, чтобы тебе было проще писать асм-код...

Цитата:
LABEL - это же метка?
да... и что тебя смущает?
во _всех_ языках программирования метки и любые другие идентификаторы означают одно и тоже -- именование адреса памяти...
а в данном случае это имя адреса памяти начала расположения этих структур

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 20:58 01-04-2012 | Исправлено: akaGM, 21:02 01-04-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
DATA SEGMENT BYTE PUBLIC

Что здесь значит BYTE?

Цитата:
да... и что тебя смущает?

Да хочу в подробностях понимать как оно работает.
 
Так что насчет скроллинга? Как сделать, чтоб не пришлось переписывать весь вывод?

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 21:20 01-04-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BYTE это выравнивание сегмента - бывает по byte, word, dword, qword, para, page

Всего записей: 11554 | Зарегистр. 03-08-2008 | Отправлено: 21:33 01-04-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MERCURY127
Ок, а чего здесь тогда выравнивание?

Цитата:
table LABEL BYTE

Метки?

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 21:49 01-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun

Цитата:
Так что насчет скроллинга? Как сделать, чтоб не пришлось переписывать весь вывод
на ассемблере я пас...
 
 

Цитата:
Ок, а чего здесь тогда выравнивание?

блин...
а выравнивание по "наименьшему адресуемому размеру" на х86 -- байт
 
table LABEL BYTE
    entry       <00000001h, "111$"> ; [0]
...
 
lea si, table -- получение стартового адреса таблицы
 
 
вот тебе задание
 
table LABEL BYTE
    entry       <00000001h, "111$"> ; [0]
    entry       <00000002h, "222$">           ; [1]
    entry       <00000008h, "333">      ; [3]
table_count = ($ - offset table) / (size entry)  
 
перепиши это без
table LABEL BYTE
и исполни аналог
lea si, table

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 21:49 01-04-2012 | Исправлено: akaGM, 22:06 01-04-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
del

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 21:54 01-04-2012 | Исправлено: A1exSun, 21:56 01-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
table   db 1, db 3 dup(0), db "111$" ; [0]
    entry       <00000002h, "222$">           ; [1]
    entry       <00000008h, "333">      ; [3]
table_count = ($ - offset table) / (size entry)  
 
так намного удобнее, правда?
 
ты бы книжечку по основам асм зачёл какую-нибудь...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 22:01 01-04-2012 | Исправлено: akaGM, 22:04 01-04-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
блин...  
 да ни-че-го

Понял, убрал - ничего не сломалось.
 

Цитата:
table   db 3 dup(0), 1, db "111$"> ; [0]

Что-то здесь явно не то.
 

Цитата:
ты бы книжечку по основам асм зачёл какую-нибудь...

Да ладно, мне осталось 2 лабы и курсак

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 22:06 01-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
table   db 1,0,0,0, "111$"
 

Цитата:
Да ладно, мне осталось 2 лабы и курсак

а хрен ли тогда интересно?
 
на самом деле я не совсем прав...
 
выравнивание там в смысле "наименьшего адресуемого куска"
адрес таблицы = адрес её самого _первого_ байта, а не ворда или дворда...
 
при table label dword может что-то и сломаться если непосредственно писать по конкретным адресам...
 
тогда всегда надо будет писать
byte ptr table
например
 
просто у тебя умолчальное выравнивание в сегменте стоит byte
 
table label == table label byte

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 22:08 01-04-2012 | Исправлено: akaGM, 23:18 01-04-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
просто у тебя умолчальное выравнивание в сегменте стоит byte  
   
 table label == table label byte

Этому я уже тоже догадался. Это если:

Код:
DATA SEGMENT BYTE PUBLIC

А если .DATA? (как у меня)

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 22:41 01-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А если .DATA? (как у меня)

а если DATA_хрен_знает_что_хрен_знает_на_каком_компиляторе
как у меня?
 
не знаю, я так не пишу...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 22:46 01-04-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как установить цвет текста в графическом режиме? Что-то не найду такой функции...

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 17:25 03-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а ты при помощи каких функций хочешь текст выводить?
и что за графический режим, vga/svga?

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 18:26 03-04-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru