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

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mordovorot123456789
 
Если ты знаешь английски язык то есть видеоуроки по NASM: http://www.vtc.com/products/Assembly-Language-Programming-Tutorials.htm . Скачать например можно от сюда: http://thepiratebay.org/torrent/4921498/VTC.Assembly.Language.Programming-iNKiSO
 
 
Также на английском языке есть очень хорошая книга которая позволяет изучить ассемблер действительно с нуля. "Assembly Language Step-by-step" автор Jeff Duntemann. Есть три издания данной книги. В первои издании используется MASM , а во второй и третьей NASM.  Это единственная книга которая мне попадалась которая учит ассемблер без предварительного знания архитектуры ПК или других языков програмирования и которая позволяет освоить азы языка самостоятельно. Но только в этой книге только азы ассемблера. Можно скачать все три издания с http://gigapedia.com/ .

Всего записей: 620 | Зарегистр. 03-12-2004 | Отправлено: 13:34 30-11-2010
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:52 01-12-2010
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как раз за такими занятиями он и учится легче всего. Сам его "случайно" изучил, читая техническую документацию, хелпы, руководства итп. Правда, разговаривать не научишься, да и специализация техническая получится. Но ведь в IT как раз читать на техническом английском главнее всего.
А разговорный хорошо подтягивается практикой. С другом договариваешься говорить только на английском, и через месяц-другой болтать будете. Если друг - профессионал, то и пары недель хватит, чтобы изъясняться вполне прилично. Словарный запас сам набирается, это дело времени.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 09:08 02-12-2010 | Исправлено: Qraizer, 09:09 02-12-2010
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 09:15 02-12-2010 | Исправлено: bomzzz, 09:16 02-12-2010
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
bomzzz, тебе шашечки или ехать? Учить же всё равно надо.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 08:41 03-12-2010
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 08:57 03-12-2010
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Хозяин - барин. Только ведь под лежачий камень вода-то не течёт. Мне самому было >20, когда занялся английским. Я ж по своему опыту рассказывал.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 07:12 04-12-2010
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 07:15 04-12-2010
Paradoxonix



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
нужна помощь в написании 2 програмок :
Если у суммы двух чисел со знаками количество единичных разрядов четное, результатом должно быть число СС, в противном случае у суммы взвести все четные разряды. При переполнении – результат 00.
 
и Вторая
Просмотреть массив байтов, в ячейках памяти до первого, содержащего «1» в старшем бите с подсчетом количества просмотренных байтов (не включая байт, содержащий «1 » в старшем бите).

Всего записей: 11 | Зарегистр. 22-01-2008 | Отправлено: 23:40 08-12-2010
akaGM

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

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 14:01 09-12-2010
A1exSun



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

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 16:47 11-12-2010 | Исправлено: A1exSun, 16:50 11-12-2010
Van_der_Vlaad



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, уважаемые форумчане
 
Напишите, пожалуйста пример передачи параметров в процедуру через регистры на ассемблере.
Например в процедуру передается два значения, а в процедуре складываются. Но только не одну процедуру, а еще и кусочек программы в которой значения записываются в регистры и затем вызывается процедура.
 
Заранее спасибо.
 
P.s. Пробовал искать в интернете и книгах, в интернете буквально пару слов об этом и нету примеров нормальных, а в книге какой то пример слишком запутанный.
 
P.p.s. Сделайте пожалуйста передачу значений через регистры AH, AL

Всего записей: 24 | Зарегистр. 23-08-2009 | Отправлено: 20:18 15-12-2010
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 20:20 15-12-2010
Krizzly

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток. Прошу помощи программистов. Написал программу озвучивания клавиш клавиатуры:
 
 
masm
.model small
.stack 256
.data
    Msg_about db 'Нажми на кнопку и пикнет', 0Ah, 0Dh, '$'
 
.code
 
start:
    ; Инициализация сегментного регистра ds
    mov ax, @data
    mov ds, ax
     
    ; Видеорежим 3 (очистка экрана и установка курсора в 0, 0)
    mov ax, 0003h
    int 10h
     
    ; Вывод сообщения на экран
    mov ah, 9        
    mov dx, offset Msg_about
    int 21h
 
     
    ; Чтение символа с ожиданием
    mov ah, 0
    int 16h
 
 
 mov ah, 2 ; Вывод символа
    mov dl, 7 ; Сигнал
    int 21h
     
    ; Завершение программы, возврат управления ОС
    exit:
    mov ax, 4c00h
    int 21h
end start
 
 
Но нужно сделать ее резидентной, чтобы не вылетало после одного нажатия. Не получается сделать этого. Помогите пожалуйста

Всего записей: 1 | Зарегистр. 15-12-2010 | Отправлено: 20:28 15-12-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krizzly
http://kalashnikoff.ru/Assembler/
у калашникова прекрасно расписано как делать резидента, с примерами. я прочел и все получилось. ничего сложного
 
Добавлено:
вот пример простейшего резидента. нашел в инете гуглой. но это я уже чета попеределывал.

Цитата:
 
;prog.asm
;делаем COM-файл
;tasm prog.asm
;tlink prog /t
;запускаем в командном интерпретаторе cmd.exe
 
    .model    tiny        ;модель для COM-программы (все в одном сегменте)
    .code            ;сегмент кода
    .startup        ;макро для настройки старта программы
    jmp    init        ;на инициализацию резидента
old_09    dw    0, 0        ;здесь будет старый клавиатурный вектор 9
new_09:                ;новая отработка вектора 9
    push    ax        ;надо сохранять все используемые регистры (для начала только ax)
    in    al, 60h        ;прочитаем код из клавиатуры
    cmp    al, 3bh        ;F1 ?
    jne    to_old_09    ;если не F1, то на старый вектор
 
 
    push    bx
    push    cx        ;сохраним еще cx
    push    dx
    push    ds
    push    es
    push    ss
    push    sp
    push    bp
    push    si
    push    di
 
 
    mov    ah, 5        ;функция записи в буфер клавиатуры
    mov    cx, 'F'        ;ch=0 - скан-код нам не нужен, cl=ASCII-код
    int    16h
    cmp    al, 0        ;проверим на ошибку
    jne    to_iret        ;если ошибка, то больше в буфер не писать
    mov    ah, 5
    mov    cx, '1'
    int    16h
    cmp    al, 0
    jne    to_iret
    mov    ah, 5
    mov    cx, '.'
    int    16h
    cmp    al, 0
    jne    to_iret
    mov    ah, 5
    mov    cx, 'B'
    int    16h
    mov    ah, 5        ;функция записи в буфер клавиатуры
    mov    cx, 'A'        ;ch=0 - скан-код нам не нужен, cl=ASCII-код
    int    16h
    cmp    al, 0        ;проверим на ошибку
    jne    to_iret        ;если ошибка, то больше в буфер не писать
    mov    ah, 5
    mov    cx, 'T'
    int    16h
    cmp    al, 0
    jne    to_iret
 
    mov    ah, 5        ; ENTER
    mov    cx, 0Dh
    int    16h
to_iret:
 
    pop    di
    pop    si
    pop    bp
    pop    sp
    pop    ss
    pop    es
    pop    ds
    pop    dx
    pop    cx        ;восстановим cx
    pop    bx
 
to_old_09:
    pop    ax        ;восстановим ax
    jmp    dword ptr cs:old_09 ;на старый вектор
init:                ;инициализация программы
    mov    ax, 3509h    ;прочитаем старый вектор
    int    21h
    mov    old_09, bx    ;сохраним в переменной смещение
    mov    old_09+2, es    ; и сегмент
    mov    ax, 2509h    ;установим новый вектор отработки прерывания 9
    lea    dx, new_09    ; адрес нового обработчика
    int    21h
    lea    dx, init    ;последний адрес программы, который оставляем в памяти
    int    27h        ;оставляем резидент в памяти и завершаемся
 
    end
 
 

 
Добавлено:
лучше оригинал погуглить. тут какой то промежуточный вариант. явно проверял какие регистры разрушаются. конечно надо popa pusha использовать

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 20:36 15-12-2010
Abs62



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

Цитата:
Напишите, пожалуйста пример передачи параметров в процедуру через регистры на ассемблере.

А что, собственно, непонятно? Как значения в регистр записать? Или как процедуру вызвать?

Цитата:
Пробовал искать в интернете и книгах, в интернете буквально пару слов об этом и нету примеров нормальных, а в книге какой то пример слишком запутанный.

А какие там особые примеры нужны? Практически любая программа - это готовый пример. Вот только что bomzzz код кинул - там видно, как заносятся значения в регистры и вызывается прерывание. Мысленно подставь call вместо int - вот и искомый пример.


----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 21:46 15-12-2010
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 21:57 15-12-2010
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые, помогите с BCD системой счисления.
 
A = 66D = 0110 0110 BCD
ПК 0101 1000
ОК 1010 0111
ДК 1010 1000
 
B = 58D = 0101 1000 BCD
ПК 0110 0110
ОК 1001 1001
ДК 1001 1010
 
Нужно посчитать:
A-B = ?
B-A = ?
 
Пробую - ну никак не выходит 8 и -8. A+B получилось, сошлось.

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 22:17 15-12-2010
Abs62



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

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 23:04 15-12-2010
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
у меня ассемблер МП Intel 8080, в нем нету такой команды.
А это вначале нужно написать в столбик ручками, а уже потом писать программу, которая будет делать эти действия
Но с ней у меня проблем не будет, если ручками разберусь.
 
Добавлено:
Пример нашел только сложение в википедии.
Вычитание обычной двоичной системы плохо уже помню, вроде делал все правильно (одно из чисел переводил в ОК, потом в ДК, вычитание заменял сложением), а ответ не сходится.
Кому не сложно, распишите пожалуйста те 2 примера.

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 23:11 15-12-2010 | Исправлено: A1exSun, 23:35 15-12-2010
Открыть новую тему     Написать ответ в эту тему

Страницы: 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