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

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

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

Цитата:
Цитата:      mov AL, ES:[BX+10]     ;явное указание индексаторов на сегмент ES(т.к. по умолчанию DS:[BX])  

Цитата:
je E

Почему [BX+10]? Откуда +10?

значит например из es:[bx] в es:[bx+100]
это означает что другая область того же сегмента
 

Цитата:
je E

буду знать, исправил пока что.
 

Цитата:
Цитата:   E: mov [DI],AL        ;число из акк. в массив-приемник по адресу из di  
1. Нет явного указания префикса сегмента.  
2. Что в DI, если адрес приёмника был занесён в SI?

Вас не понял, ну извините меня, не очень в ассемблере разбираюсь.
 

Цитата:
Цитата:    mov DI,0008h ;    
Почему число, а не offset?

Должен быть mov DI, offset Dest ? так я понял?
 

Цитата:
Цитата:    mov DL, ES:[DI]  ;Записываем в регистр вывода символ из массива Dest  
    inc SI           ; Увеличение счетчика элементов массива  
Не тот регистр инкрементируется.

Значит

Код:
 
 mov DL, ES:[DI]  ;Записываем в регистр вывода символ из массива Dest  
    inc DI           ; Увеличение счетчика элементов массива  
 

 
Я это все как бы исправил, то есть покажу кусочки кода:

Код:
 
mov DI, offset Dest      ;массив - приемник  
 


Код:
 
 je E         ;если равен 0 ,то переход на метку е
 


Код:
 
mov DI, offset Dest;  
 


Код:
 
 mov DL, ES:[DI]  ;Записываем в регистр вывода символ из массива Dest  
    inc DI           ; Увеличение счетчика элементов массива  
 

 
Результат таков:
Enter Aarray: 1230 Array: 1230 Dest: пусто  
 
Что-то не так...

Всего записей: 212 | Зарегистр. 13-10-2008 | Отправлено: 23:18 30-05-2010
Abs62



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

Цитата:
значит например из es:[bx] в es:[bx+100]  
это означает что другая область того же сегмента

mov AL, ES:[BX+10] - это значит занести в al значение, лежащее по адресу ES:[BX+10]. Что находится там? Asource находится по адресу ES:[BX], оттуда и надо брать.

Цитата:
Вас не понял, ну извините меня, не очень в ассемблере разбираюсь.

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

Цитата:
Должен быть mov DI, offset Dest ? так я понял?

Да.


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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 23:36 30-05-2010
T1000m

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как переключиться в защищённый режим процессора в 16-разрядном ассемблере, если такое возможно?
Спасибо.

Всего записей: 8 | Зарегистр. 15-12-2009 | Отправлено: 03:10 05-06-2010
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
саму программу сделать 'в' просто:
 
.386P
 
а 'из' 'в' скакать...
можно вопрос: а что за задача?

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 11:46 07-06-2010 | Исправлено: akaGM, 17:45 07-06-2010
pitopito

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
здравсвуйте!
; суть куска программы - записать в структуру 9 чисел, использовал макрос irpc, работает он почему то как irp, то есть он берёт и заменяет строку mov matrix1.e&w&, al на mov matrix1.e1, al mov matrix1.e2, al и тд, хотя в юрове чётко написано что на каждой итерации идентификатор должен заменяться на очередной элемент строки, а не разворочиваться в ряд строк из элементов или я что-то неправильно понимаю???
;
           .model small
           .stack 100h
           .data
                matrix struc
                        e1 db 0
                        e2 db 0
                        e3 db 0
                        e4 db 0
                        e5 db 0
                        e6 db 0
                        e7 db 0
                        e8 db 0
                        e9 db 0
                matrix ends
                matrix1 matrix <0,0,0,0,0,0,0,0,0>
                matrix2 matrix <0,0,0,0,0,0,0,0,0>
                msg1 db "‚ўҐ¤ЁвҐ ¬ ваЁжг", 0Dh,0Ah, '$'
           .code
 
begin:
 
 
      mov ax, DGROUP
      mov ds, ax
      mov dx, offset msg1
      mov ah, 9
      int 21h
 
      mov cx, 9
        @INPUT_MATRIX: mov ah, 01h     ; ўў®¤ ¬ ваЁжл [ al = askii ]
        int 21h
        irpc w, 123456789
          mov matrix1.e&w&, al
    endm
      loop @INPUT_MATRIX
 
      mov cx, 9
      @OUTPUT_MATRIX:
      irpc q, 123456789
        mov dl, matrix1.e&q&
      endm
      mov ah, 2
      int 21h
      loop @OUTPUT_MATRIX
 
 
      mov ax, 4C00h           ; ‡ ўҐаиҐ-ЁҐ Їа®Ја ¬¬л
      int 21h
 
end begin
 
 
Добавлено:
извините, я уже сам допёр что irpc сам посути является циклом, однако получается что как то криво у юрова написано, ввёл меня в заблуждение(
 
 
но так я и не допёр до различия irpc и irp

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Необходимо при нажатии клавосочетания заблокировать определённую кнопку на клавиатуре. При повторном нажатии того же клавосочетания - разблокировать. Для линукса. Помогите, пожалуйста, советом, ссылкой, сниппетом или чем-нибудь ещё. Спасибо!
P.S. Можно на си

Всего записей: 8 | Зарегистр. 15-12-2009 | Отправлено: 21:28 12-06-2010 | Исправлено: T1000m, 21:29 12-06-2010
bomzzz



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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz, спасибо.
Это только через драйвер реализуется? Всё, что нагуглил - все примеры через драйвер.

Всего записей: 8 | Зарегистр. 15-12-2009 | Отправлено: 21:36 12-06-2010
bomzzz



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

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

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

Цитата:
тама ниче сложного нет для такого простого действия

даже не смотря на то, что под линукс это всё?
Для доса да, всё несложно получается.

Всего записей: 8 | Зарегистр. 15-12-2009 | Отправлено: 21:44 12-06-2010
bomzzz



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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужен пример реализации "падающих" букв (типа заставок Матрица) на ассемблере (либо на си со вставками ассемблерными), может кто встречал подобное в сети либо в книжках. Спасибо!

Всего записей: 8 | Зарегистр. 15-12-2009 | Отправлено: 00:04 14-06-2010
perdun



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
фсем здрасти
плз,поправьте,где не так
рисую на фасме такую конструкцию
хочу перенаправить ввод данных со стд.ввода на вывод другого консольного процесса (cmd.exe)
чота неврублюсь где криво, толи в структурах чота недоделал, толи с наследованием создаваемого процесса.. но вывод на новый смд не идет

Код:
format PE console
include 'win32ax.inc'
.data
 
struct STARTUPINFO
       hin  dd ?
       hout dd ?
ends
 
fname db 'cmd.exe',0
string db 100 dup ?
 
sinfo        STARTUPINFO
pinfo        PROCESS_INFORMATION
ns dd ?
 
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov [sinfo.hout],eax
 
invoke GetStdHandle,STD_INPUT_HANDLE
mov [sinfo.hin],eax
 
invoke  CreateProcess, NULL, fname, NULL, NULL, TRUE,\
        CREATE_NEW_CONSOLE,NULL,NULL,sinfo,pinfo
 
invoke ReadFile,[sinfo.hin],string,100,ns,NULL
 
invoke WriteFile,[sinfo.hout],string,100,ns,NULL
 
invoke ExitProcess,0
 
.end start
 

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 19:52 14-06-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а как написать 32 битное приложение не под виндовс? ну то есть какой компилятор надо??? а как тогда к прерываниям биос обращаться???
 
Добавлено:
сори нашел - не сообразил как в гугле набирать
 
http://www.wasm.ru/series.php?sid=20
Цикл статей «Процессор INTEL в защищенном режиме»
 
http://wasm.ru/article.php?article=ia32int
СТАТЬИ &#8658; Защищенный режим

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 20:47 24-06-2010
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем привет! Осваиваю ФАСМ. Написал маленькую прогу которая печатает строку на экране.

Код:
 
format PE GUI
entry main
section '.data' data readable writeable
msg db "Hello world 12345678"
msglen db $-msg
 
section '.code' code readable executable
main:
        mov ax,0b800h
        mov es,ax
        xor si,si
        lea si,msg
        xor di,di
        mov ah,9fh
        mov cx,word ptr msglen
lp1:
        mov al,[si]
        mov es:[di],ax
        inc si
        add di,2
        loop lp1
        mov ah,4Ch
        int 21h
        int 20h
 

В строке "lea si,msg" выдает ошибку "Error: Invalid Openrand". Что то ничего понять не могу. Кажись все правильно. Скажите где, что не так.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 23:20 25-06-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://www.emu8086.com/
ключик нетрудно найти
Добавлено:
        lea si, [msg]
у тебя еще одна ошибка
        mov es:[di],ax

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 23:28 25-06-2010 | Исправлено: bomzzz, 23:44 25-06-2010
blaro



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

Цитата:
у тебя еще одна ошибка
        mov es:[di],ax  

Я знаю. И как это исправить? Я до сего дня писал под ДОС на 8086.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 23:53 25-06-2010
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 23:56 25-06-2010
blaro



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

Цитата:
зависит от того что ты хотел этим сделать

Вообще то я хотел вывести строку на экран в консоли.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 00:08 26-06-2010
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну так и обошелся бы одной строкой тогда. этой строкой ты видмо хотел получить элемент массива  
; get current character:
        mov     al, msg[si]  
 
Добавлено:

Цитата:
 
name "hello"
org     100h
jmp     start
msg db 'Hello, world!', 0
start:
        mov     si, 0
next_char:
        mov     al, msg[si]
        cmp     al, 0            
        je      stop
        mov     ah, 0eh
        int     10h
        inc     si
        jmp     next_char
 stop:
       mov ah, 0
       int 16h
        ret      
 
end
 

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 00:13 26-06-2010 | Исправлено: bomzzz, 00:34 26-06-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