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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
pavel1978

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ДВС!  
    Управление пользовательской памятью осуществляется с использованием спец. структур  1. таблицы таблиц (list of list,  или сокр-но lol) и  
2. управляющих блоков памяти (memory control block, MCB)  
    Внимание, вопрос знатокам. Адрес lol = 00A7h:0026h. Как узнать ее содержимое (сегментный адрес наверное, не?) и проследить цепочку блоков? Каков процесс нахождения их? По  какой формуле вычислять или какой программой это промониторить (хекс-редактором?). В общем, Всеведующие Форумчане, дайте алгоритм поиска решения этой задачи, пожалуйста!
 
Добавлено:
ДВС!  
    Управление пользовательской памятью осуществляется с использованием спец. структур  1. таблицы таблиц (list of list,  или сокр-но lol) и  
2. управляющих блоков памяти (memory control block, MCB)  
    Внимание, вопрос знатокам. Адрес lol = 00A7h:0026h. Как узнать ее содержимое (сегментный адрес наверное, не?) и проследить цепочку блоков? Каков процесс нахождения их? По  какой формуле вычислять или какой программой это промониторить (хекс-редактором?). В общем, Всеведующие Форумчане, дайте алгоритм поиска решения этой задачи, пожалуйста!

Всего записей: 149 | Зарегистр. 13-03-2008 | Отправлено: 18:50 22-08-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pavel1978, в гугле зобанели, да ? как я их понимаю...
https://groups.google.com/forum/?fromgroups=#!topic/alt.msdos.programmer/
не асм, но что есть, то есть...
код

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 20:35 22-08-2012
doktorpilulkin

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
просто у него такой вопрос, что ему только бы в этой теме ответили судя по всему

Всего записей: 2341 | Зарегистр. 30-08-2010 | Отправлено: 20:42 22-08-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну и разумеется, священный RBIL (Ralf Brown's Interrupt List) курим до просветления....
 
Добавлено:
On-line version of RBIL http://www.delorie.com/djgpp/doc/rbinter/id/95/29.html
 
Добавлено:
pavel1978, Надеюсь, с английским у вас проблем нет? Иначе будете очень грустным программистом...

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 20:44 22-08-2012
pavel1978

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

Цитата:
 в гугле зобанели, да  

А меня сюда, по Вашему, бабушка за ручку привела?! И в другой теме я задавал сей вопрос, отфутболили именно сюда. Если не знаешь ответа, нефиг ссылки "на весь интернет" постить. Ёхарный бабай, скажите хоть, как из М-блока 00A7h:0026h получить сегментный адрес, его длину? Мне блоки в задании надо просчитать "на бумажке чернилами". Не программно. Заканчивается это всё на Z-блоке 5Ah. По какой сраной формуле это считается?!
 
 
Добавлено:
где у этого адреса 00А7:0026h сегмент, где оффсет?

Всего записей: 149 | Зарегистр. 13-03-2008 | Отправлено: 21:17 22-08-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pavel1978, вообще то я полный рабочий код дал. Посмотри его и разберись. А уж потом на бумаге рисуй.

Цитата:
где у этого адреса 00А7:0026h сегмент, где оффсет?

00А7 - сегмент, 0026 - смещение.

Цитата:
скажите хоть, как из М-блока 00A7h:0026h получить сегментный адрес, его длину?

http://www.delorie.com/djgpp/doc/rbinter/it/28/16.html

Код:
 
 00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
 01h    WORD    PSP segment of owner or special flag value (see #01629)
 03h    WORD    size of memory block in paragraphs
 


Цитата:
Если не знаешь ответа, нефиг ссылки "на весь интернет" постить.

я то знаю и даже нарисую как. Но не сходу, и не в таком тоне... Не делаются такие вещи сходу на бумажке. Нужно хотя бы структуры данных изучить.

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 21:50 22-08-2012
pavel1978

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
   Простите за тон. Каюсь.

Цитата:
где у этого адреса 00А7:0026h сегмент, где оффсет?
 
00А7 - сегмент, 0026 - смещение.  

 
Т.е. согласно формуле
Физ Адрес = 10h*seg + offset = 10h*A7h + 26h = A96h , так?

Всего записей: 149 | Зарегистр. 13-03-2008 | Отправлено: 22:50 22-08-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у тебя запутано пояснено. возможно так, а возможно это элемент таблицы A7 - селектор или дескриптор не помню точно как там
 
Добавлено:

Цитата:
При адресации памяти в защищённом режиме команды ссылаются на сегменты, указывая не их адреса (как в режиме реальных адресов), а описания сегментов (их дескрипторы). Указатель на описание сегмента называется селектор. Другими словами, селектор - это номер дескриптора из таблицы дескрипторов.
        Адресация производится через пару регистров сегмент:смещение, причём, в качестве сегментного регистра используются обычные CS, SS, DS, ES, FS и GS (последние два появились в 386-м процессоре), но в них указывается не адрес сегмента, а селектор дескриптора.  

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 22:57 22-08-2012 | Исправлено: bomzzz, 22:58 22-08-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pavel1978, правильно
bomzzz, это же чистый ДОС, МКБ, защищенный режим управляется другими епархиями и тут совершенно ни к чему

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 23:11 22-08-2012 | Исправлено: MERCURY127, 23:11 22-08-2012
bomzzz



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

Цитата:
1. таблицы таблиц (list of list,  или сокр-но lol) и  

а о каких таблицах речь идет? прерываний что ли?

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 23:18 22-08-2012
MERCURY127



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

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 23:42 22-08-2012
pavel1978

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

Цитата:
pavel1978, правильно  

 
Это радует. Согласно приведенной Вами ссылке, "следующий Блок Управления Памятью (МСВ) = текущий + размер +1" Текущий = А96h, а как вычислить размер его (длину), этого А96? Есть формула? Ведь любая программа, которая нам бы размер сей показала, тоже основывается на математической логике, так?
 
Добавлено:
Уточню - размер чего прибавлять?

Всего записей: 149 | Зарегистр. 13-03-2008 | Отправлено: 00:25 23-08-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Во 1х, все блоки выравнены на границу 16 байт (=параграф), потому тебе достаточно оперировать сегментами.
Во 2х, сам МКБ занимает 1 параграф. Плюс расположенный за ним собственно блок памяти, размер которого, в параграфах, и задан в МКБ.
Отсюда следует: берем в ЛоЛ сегмент 1ого (корневого) МКБ (0х1234), и далее в цикле 1) проверяем 1й байт МКБ (0х1234:0),  если =0х5А, то конец, иначе если =0х4Д, то шаг 2, иначе глюк. 2) считываем длину блока памяти (0х2345). 3) вычисляем новый адрес (сегмент следующего МКБ) =0х1234  0х2345  1 (текущий МКБ - 1 параграф) = 0х357А. Далее обратно к шагу 1) с новым адресом. Это называется связный список, когда каждый элемент указывает на следующий. Понятно?
Мне пора, до завтра.

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 00:44 23-08-2012
MihaNix

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это если com файл полученный под DOS запускать.
Ну а под виндами современными - ничего не произойдет страшного.
Ну а по заданию - программу вообще в debuger в режиме трассировке показать надо было, чтобы препод заценила...
 
А в hiew как такую конструкцию записать?
 
в debuger - поддерживает такой синтаксис: mov byte ptr [0], al
а вот так кушать не хочет: mov byte ptr x[0], al

Всего записей: 124 | Зарегистр. 18-06-2010 | Отправлено: 00:45 23-08-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MihaNix, мой вариант был для нормального, культурного ассемблера, типа МАСМ/ТАСМ. А в Хиев конечно можно много чего из дикорастущей живности сочинить. Можно завтра, а?

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 00:51 23-08-2012
akaGM

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

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 01:30 23-08-2012 | Исправлено: akaGM, 01:31 23-08-2012
pavel1978

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

Цитата:
Во 2х, сам МКБ занимает 1 параграф. Плюс расположенный за ним собственно блок памяти, размер которого, в параграфах, и задан в МКБ.  
Отсюда следует: берем в ЛоЛ сегмент 1ого (корневого) МКБ (0х1234), и далее в цикле 1) проверяем 1й байт МКБ (0х1234:0),  если =0х5А, то конец, иначе если =0х4Д, то шаг 2, иначе глюк. 2) считываем длину блока памяти (0х2345). 3) вычисляем новый адрес (сегмент следующего МКБ) =0х1234  0х2345  1 (текущий МКБ - 1 параграф) = 0х357А. Далее обратно к шагу 1) с новым адресом.  

 
Сколько "весит" параграф? Мне какой размер добавлять-то?! (А96+16+1)h что ли? Мне не надо прогу писать, мне просчитать блоки памяти надо в контрольной...

Всего записей: 149 | Зарегистр. 13-03-2008 | Отправлено: 09:33 23-08-2012
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 13:36 23-08-2012
Maria93

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Написать программу, которая скопирует 32-битную переменную А в переменную В, поменяв байты местами. Например для A=1A2B3C4D программа возвращает В=4D3C2B1A.
 
DS1 SEGMENT  
 
A: D 1A1B3C4D
B  DD DUP(?)
DS1 Ends
SS1 SEGMENT
DW 100h DUP(?)
SS1 Ends
CS1 Segment
Assume: DS:DS1, SS:SS1, CS:CS1
START: MOV Ax, DS1
           MOV DS, Ax
 
        ;следующие 6 строк меняют последовательность байтов в А
        MOV Bx, A[SI]
        MOV A[SI], A[SI+3]
        MOV A[SI+3], Bx
        MOV Bx, A[SI+1]
        MOV A[SI+1], A[SI+2]
        MOV A[SI+2], A[SI+1]
 
        ;следующие 7 строк копируют А в В        
        MOV Cx, Na
        MOV SI, O
L1:   MOV Dx, A[SI]
        MOV B[SI], DX
        INC SI INC SI
        DEC CX
        JNZ L1
     
        MOV AH, 4Ch
        INT 21h
        CS1 Ends
        End start

Всего записей: 8 | Зарегистр. 18-08-2012 | Отправлено: 12:49 25-08-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а специальные команды переставляющие байты нельзя использовать?
правда я их с ходу не вспомню. не доводилось использовать
ну или хотя бы ROL уже будет проще, но эти команды по такту на смещение используют - неэкономно получится
 
BSWAP
   

Цитата:
 
mov eax, dword ptr [value]
bswap eax
mov dword ptr [value], eax
 

 

Цитата:
.686
 
.model flat, stdcall  
option casemap :none  
 
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
 
.data
mestitle    db "Bomz",0
form        db "EAX: %x", 0
value        dd 1A2B3C4Dh
 
.data?
buffer        db 512 dup(?)
 
.code
start:
    mov    eax, dword ptr [value]
    bswap    eax
    mov    dword ptr [value], eax
    invoke    wsprintf,ADDR buffer,ADDR form,eax
    invoke    MessageBox,0,ADDR buffer,ADDR mestitle,MB_ICONASTERISK
    invoke    ExitProcess,0
end start

 
   
 
работкаит
 
Добавлено:

Цитата:
.486
 
.model flat, stdcall  
option casemap :none  
 
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
 
.data
mestitle    db "BSWAP",0
form        db "EAX: %x",13,10,"EBX: %x", 0
value        dd 1A2B3C4Dh
 
.data?
buffer        db 64 dup(?)
 
.code
start:
    mov    ebx, dword ptr [value]
    mov    eax, ebx
    bswap    ebx
    mov    dword ptr [value], ebx
    invoke    wsprintf,addr buffer,addr form,eax,ebx
    invoke    MessageBox,0,addr buffer,addr mestitle,MB_ICONASTERISK
    invoke    ExitProcess,0
end start

 
   
 
http://rghost.ru/39992136
 
486 процессор уже BSWAP поддерживал
 
Добавлено:
и еще - не особо понял твой алгоритм, у тебя переставляются байт в памяти, а это гораздо медленне чем переставлять их в регистрах. дажене смотря на то что все это будет делать в кеше
 
Добавлено:
вот с rol

Цитата:
.386
 
.model flat, stdcall  
option casemap :none  
 
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
 
.data
mestitle    db "ROL",0
form        db "EAX: %x",13,10,"EBX: %x", 0
value        dd 1A2B3C4Dh
 
.data?
buffer        db 64 dup(?)
 
.code
start:
    mov    ebx, dword ptr [value]
    mov    eax, ebx
 
    rol bx, 8
    rol ebx, 16
    rol bx, 8
 
    mov    dword ptr [value], ebx
    invoke    wsprintf,addr buffer,addr form,eax,ebx
    invoke    MessageBox,0,addr buffer,addr mestitle,MB_ICONASTERISK
    invoke    ExitProcess,0
end start

 
Добавлено:
а если препод будет возбухать скажи, что на это надо давать задачу на сортировку массива или быструю сортировку строк, а в этой задачи учащиеся ознакомились с командами ROL и SWAP в чем гораздо больше пользы, чем учиться неоптимально тупорыло задачи поставленные решать

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:51 25-08-2012 | Исправлено: bomzzz, 14:29 25-08-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