Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

RE: Помогите с изучением asemblera

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> RE: Помогите с изучением asemblera
Имя
Сообщение << Старые топики   Новые топики >>
RE: Помогите с изучением asemblera - 2007-08-11 02:36:27.403333   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
я на асме не часто кожу, а когда доводится то на фасме в основном. там есть такая полезная для лентяев штука как invoke )))
а если еще качнуть одну макрос смены синтаксиса (который кстати написал мой друг dead_body), то API функции вообще можно вызывать так:
MessageBox(0,"hi","test",0) Прям как в сях:D
Post #: 81
RE: Помогите с изучением asemblera - 2007-08-12 18:03:52.813333   
dfkthf

Сообщений: 13
Оценки: 0
Присоединился: 2007-08-10 19:44:26.693333
А кто посдкажет про русский мануал для MASM. И есть ли он вообще?
Post #: 82
RE: Помогите с изучением asemblera - 2007-08-12 22:56:53.443333   
Mahoraz

Сообщений: 2908
Оценки: 30
Присоединился: 2007-03-15 20:51:18.450000
Видел как-то в нете, но на древнюю версию к тому же, не полный перевод, а выборочный… Проще выделить время и самому заняться переводом хелпа.

quote:

ORIGINAL: furiousangel

я на асме не часто кожу, а когда доводится то на фасме в основном. там есть такая полезная для лентяев штука как invoke )))


В масме тоже используется директива invoke…
Post #: 83
RE: Помогите с изучением asemblera - 2007-08-13 12:05:13.530000   
dfkthf

Сообщений: 13
Оценки: 0
Присоединился: 2007-08-10 19:44:26.693333
Mahoraz
Спасибо, успокоил, я так и думал. Пробовал сам переводить, много времени надо, но где его взять.
Post #: 84
RE: ошибка при копиляции - 2009-03-15 19:47:06.060000   
bobik23

Сообщений: 129
Оценки: 0
Присоединился: 2008-09-20 00:35:23.616666
masm32 исодник криптора.
плз Помогите с ошибками ,при компиляции выдает следушию ошибку
смотреть тут.


http://img.pixs.ru/images/screen2009_9045110_178376.jpg
Post #: 85
RE: Помогите с изучением asemblera - 2009-03-18 17:30:04.096666   
Wlada

Сообщений: 1233
Оценки: 0
Присоединился: 2007-09-24 12:01:26.970000

quote:

ORIGINAL: dfkthf

А кто посдкажет про русский мануал для MASM. И есть ли он вообще?


У меня есть несколько книг по Ассм там 5 мб, учебники некоторые исходники программ под дос, масм есть, тасм, тлинк.
Пиши в ЛС если надо закину куда-нибудь
Post #: 86
RE: Помогите с изучением asemblera - 2009-03-20 04:28:04.750000   
bobik23

Сообщений: 129
Оценки: 0
Присоединился: 2008-09-20 00:35:23.616666
отписался в личке .
Post #: 87
RE: Помогите с изучением asemblera - 2009-04-07 19:57:39.760000   
Tigrra

Сообщений: 16
Оценки: 0
Присоединился: 2008-11-08 18:21:12.200000
.MODEL TINY
CODE SEGMENT
ASSUME CS:CODE, DS:CODE, ES:CODE, SS:CODE
ORG 100h
START:
mov ah,9
mov dx,offset message
int 21h
mov ah,10h
int 16h
int 20h

message db 'Hello world!$'
CODE ENDS
END START
===========================

Компиль в ТАСМЕ ,100% должно работать.Если нет пиши 6553261
Post #: 88
RE: Помогите с изучением asemblera - 2009-05-05 18:41:12.640000   
Coolzoom

Сообщений: 40
Оценки: 0
Присоединился: 2008-11-05 02:32:34.956666
Щас учу асм по Калашникову. Кто нить знает для тасма (только не для того что под win а под дос) есть нормальная IDE? что нить типо аля турбо паскаль а то командная строка уже в кошмарных снах скоро будет являться
Post #: 89
RE: Помогите с изучением asemblera - 2009-07-01 01:20:26.620000   
Toph

Сообщений: 74
Оценки: 0
Присоединился: 2009-03-18 10:38:30.786666

Классный сайт с книжками

http://4italka.okis.ru

книги по программированию на языках Assembler,Delphi,Pascal.DirectX 9.OpenGL,C++,C#,Cи,Java2,Visual Basic,Visual Studio.NET,Perl, Хакинг
Post #: 90
RE: Помогите с изучением asemblera - 2009-07-14 13:28:50.656666   
BatonXAK

Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
Кто нибудь подскажет почему при подсчете 1 формулы происходит переполнение деления?
Формула 1. m=(25/c-d+2)/(b+a*a-1)       Формула 2. n=(2*b-a+b*c)/(c/4-1)
d_seg segment 'data' A dw 2d B dw 3d D dw 2d C dw 5d M dw ? N dw ? str0 db ' ',10,13,'$' str1 db 'START',10,13,'$' str2 db 'STOP',10,13,'$' strm db 'm=','$' strn db 'n=','$' d_seg ends c_seg segment 'code' assume ds:d_seg, cs:c_seg START: mov ax,d_seg mov ds,ax mov ah,9h ; вызов 9 функции lea dx,str1 ; вычисляем адрес str1 и сохраняем его в dx int 21h ; вызов 21 прерывания для вывода на экран ; ФОРМУЛА №1 ; 25/c- первый результат mov al,25 mov bl,C CWD ; преобразуем 16-разрядное число со знаком в 32-разрядное div bl ; делим 25/С mov bx,D sub ax,bx ; вычитаем add ax,2; прибавляем push ax ; кладем в стек ; b+a*a-1 mov ax,A mul ax ; умножаем A*A dec ax mov dx,D add ax,dx mov bx,ax pop ax CWD div bx mov M,ax ; конечный результат ; ФОРМУЛА №2 mov C,8 ;2*b-a xor ax,ax ; очистка регистров mov ax,D mov bx,A shl ax,1 ;D умножаем на 2 sub ax,bx push ax ; b*c+ стек mov ax,B mov bx,C sub ax,bx pop dx add ax,dx push ax ; c\4-1 и делим на 1 скобку mov ax,C shr ax,1 shr ax,1 ; делим на 4 dec ax ; уменьшаем на 1 pop bx CWD div bx mov N,ax ;ВЫВОД РЕЗУЛЬТАТА M mov ah,9h ; вызов 9 функции lea dx,strm ; вычисляем адрес строки и кладем его в dx int 21h ; вызываем 21 прерывание mov dx,M ; заносим значение S в регистр dx mov ax,dx ; заносим значение регистра dx в ax mov bx,10d ; значение 10 в dx xor cx,cx ; очистка регистров non_zero_1: ; метка xor dx,dx ; очистка регистров div bx ; преврашение в строку push dx ; заносим полученое значение в стек inc cx ; инкреминируем cmp ax, 0 ; сравниваем ax c 0 jne non_zero_2 ; если ноль то переходим к метке mov ah, 2h ; функция установки курсора write_digit_loop1: pop dx ;вынимаем значение из стека add dl, 30h ; переходим к значению по таблице ASSCII int 21h ; вывод полученого значения loop write_digit_loop1 ; уменьшаем итерации mov ah, 9h lea dx, str0 int 21h ;ВЫВОД РЕЗУЛЬТАТА N mov ah,9h ; вызов 9 функции lea dx,strn ; вычисляем адрес строки и кладем его в dx int 21h ; вызываем 21 прерывание mov dx,N ; заносим значение S в регистр dx mov ax,dx ; заносим значение регистра dx в ax mov bx,10d ; значение 10 в dx xor cx,cx ; очистка регистров non_zero_2: ; метка xor dx,dx ; очистка регистров div bx ; преврашение в строку push dx ; заносим полученое значение в стек inc cx ; инкреминируем cmp ax, 0 ; сравниваем ax c 0 jne non_zero_2 ; если ноль то переходим к метке mov ah, 2h ; функция установки курсора write_digit_loop2: pop dx ;вынимаем значение из стека add dl, 30h ; переходим к значению по таблице ASSCII int 21h ; вывод полученого значения loop write_digit_loop2 ; уменьшаем итерации mov ah, 9h lea dx, str0 int 21h ;КОНЕЦ mov ah, 9h lea dx, str2 int 21h mov ah, 1h int 21h int 20h c_seg ends end START
Post #: 91
RE: Помогите с изучением asemblera - 2009-09-12 16:32:38.463333   
SEKTOR3

Сообщений: 60
Оценки: 0
Присоединился: 2009-05-01 20:05:07.270000
плз подскажите можно эти строки invoke RtLZeroMemory,fTwoBf,128h заменить на что нить другое


сам код :
file_two_open:
      invoke RtLZeroMemory,fTwoBf,128h
      invoke GetOpenFileName,file_two_opn
      cmp eax,0
Post #: 92
RE: Помогите с изучением asemblera - 2010-02-16 19:09:17.230000   
zverozavr

Сообщений: 35
Оценки: 0
Присоединился: 2009-12-14 00:43:48.116666
всем доброго времени суток
вопрос: посоветуйте компилятор под Windows 7 (попробывл и тасм и масм, чтото или я не понял как они работают толи я совсем на половону деревянный :( накачал кучу исходников заниматься по ним, а они не запускаются :( )
или лучше всёже виртуальную машину ставить?
Post #: 93
RE: Помогите с изучением asemblera - 2010-02-16 20:25:28.150000   
Specialist

Сообщений: 142
Оценки: 0
Присоединился: 2010-01-29 22:37:36.383333
quote:

ORIGINAL: zverozavr

всем доброго времени суток
вопрос: посоветуйте компилятор под Windows 7 (попробывл и тасм и масм, чтото или я не понял как они работают толи я совсем на половону деревянный :( накачал кучу исходников заниматься по ним, а они не запускаются :( )
или лучше всёже виртуальную машину ставить?

Вот из-за этого я не тороплюсь на семерку переходить. Там эмулятор XP уже есть какой-то, посмотри в мануалах.
Post #: 94
RE: Помогите с изучением asemblera - 2010-02-18 13:43:09.816666   
gsh23

Сообщений: 1
Оценки: 0
Присоединился: 2010-02-18 13:14:19.243333
Не туда ляпнул…
Post #: 95
RE: Помогите с изучением asemblera - 2010-03-05 01:33:15.910000   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
ребят, в чем отличие

quote:


&nbsp;mov bx, offset Image

от

&nbsp;lea&nbsp;&nbsp; bx, Image


в отладчики все равно все сводится к mov bx, 0000h
Post #: 96
RE: Помогите с изучением asemblera - 2010-03-10 02:59:36.133333   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
мб кто подскажет мануал по тому, за сколько тактов выполняются те или иные команды asma
Post #: 97
RE: Помогите с изучением asemblera - 2010-03-10 03:24:51.476666   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
сам нашел http://helper10.narod.ru/v0.htm
Post #: 98
RE: Помогите с изучением asemblera - 2010-03-11 03:37:19.030000   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
cмотрел кто данное видео по асм?

http://rutracker.org/forum/viewtopic.php?t=2537757

что скажете…?
Post #: 99
RE: Помогите с изучением asemblera - 2010-03-16 00:37:26.406666   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
отличие lea от offset:

quote:

LEA регистр16, память


lea загружает в указанный 16-битный регистр адрес (смещение offset) указанной ячейки памяти, адресуемой любым способом.
Во многих случаях команда LEA идентична команде MOV с директивой OFFSET. Однако, следует помнить, что при использовании директивы OFFSET адрес вычисляется и должен быть известен на этапе трансляции программы, а при использовании команды LEA при ее выполнении. Следовательно, при обращении к индексированной переменной с регистровым индексом (например, Tabl[SI]), неизвестным при трансляции, команда LEA правильно сформирует адрес элемента данных, а команда MOV OFFSET  неправильно. Директива OFFSET в подобных условиях возвращает адрес переменной без учета индекса, что приводит к возникновению ошибки, необнаруживаемой в процессе трансляции программы.


Пример:


Пусть имеется сегмент данных:
Data SEGMENT
DB 10 DUP(?)
Tabl DB 20h, 21h, 22h, 23h, 24h, 25h
Data ENDS
Тогда при обращениях к таблице Tabl, получим:
LEA BX, Tabl ;Идентично MOV BX, OFFSET Tabl
MOV AL, [BX] ;(AL)=20h
LEA BX, Tabl[4] ;Идентично MOV BX, OFFSET Tabl[4]
MOV AL, [BX] ;(AL)=24h
MOV SI, 3
LEA BX, Tabl[SI] ;Корректно
MOV AL, [BX] ;(AL)=23h
MOV BX, OFFSET Tabl[SI];Необнаруживаемая ошибка

MOV AL, [BX] ;Ошибка – (AL)=20h

Post #: 100
RE: Помогите с изучением asemblera - 2010-03-17 22:41:09.820000   
zverozavr

Сообщений: 35
Оценки: 0
Присоединился: 2009-12-14 00:43:48.116666
Всем доброго времени суток.
Подскажите на половину деревянному в программировании …. как вообще запускается и работается с ассемблером ? :(
скачал кучу сред программирования (ТАСМ, МАСМ и тд) но вот чтото не пойму как начать :( и реально запустить их под виндой? желательно под 7кой :)
Post #: 101
RE: Помогите с изучением asemblera - 2010-03-18 07:18:35.876666   
Parano1d

Сообщений: 423
Оценки: 0
Присоединился: 2008-05-21 13:40:17.093333
1. пишешь код, сохраняешь в .asm
2. tasm.exe <имя файла>
3. tlink.exe <имя файла>
Post #: 102
RE: Помогите с изучением asemblera - 2010-03-18 20:02:01.870000   
zverozavr

Сообщений: 35
Оценки: 0
Присоединился: 2009-12-14 00:43:48.116666
установил 10 МАСМ32 … пишу код, но при попытке компиляции (compile resource file ) выдаёт "could not open rsrc.rc" … чтобы это могло значить? я как понял он должен сам создавать этот файл и с ним работать, но этого он делать не хочет :( пробывал скачивал этот файл с других готовых скриптов, впринципе работает - так и надо делать или я както по другому делается всё это?
P.S. где в 10м Масме дебагер?
Post #: 103
RE: Помогите с изучением asemblera - 2010-04-19 11:25:46.823333   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
rgo, в качестве примера нашел такой кусок, собственно по назначению аналогичный

but_st&nbsp;&nbsp;&nbsp;&nbsp; proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; чтение порта ввода&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in&nbsp;&nbsp;&nbsp; al, 0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test al,al - не понимаю, зачем эта проверка, что бы можно было в следующей строке использовать условные переходы? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp; but_ret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; but_ret:&nbsp;&nbsp; mov&nbsp;&nbsp; byf_in, al - вот как раз переменная о которой я говорил(делаем пересохранения, что бы потом можно было сделать lodsb). &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret but_st&nbsp; endp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; вот подпрограмма проверки на то, какая кнопка была нажата... и вызов дальше нужного обработчика but_01, but_02... sost_but&nbsp;&nbsp; proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;обработка кнопок &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test&nbsp; byf_in, 00000001b ;(0я кнопка) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp; sost_m1&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp; but_01 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp; sost_ret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sost_m1:&nbsp;&nbsp; test&nbsp; byf_in,00000010b ;(1я кнопка) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp; sost_m2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp; but_02 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp; sost_ret sost_m2:&nbsp;&nbsp; test&nbsp; byf_in,00000100b ;... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp; sost_m3&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp; but_03 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp; sost_ret sost_m3:&nbsp;&nbsp; test&nbsp; byf_in,00001000b &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp; sost_m4 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp; but_04 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp; sost_ret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sost_m4:&nbsp;&nbsp; test&nbsp; byf_in,00010000b &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp; sost_m5 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp; but_05 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp; sost_ret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sost_m5:&nbsp;&nbsp; test&nbsp; byf_in,00100000b &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp; sost_m6 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp; but_06 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp; sost_ret sost_m6:&nbsp;&nbsp; test&nbsp; byf_in,01000000b &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp; sost_ret &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp; but_07&nbsp;&nbsp;&nbsp;&nbsp; sost_ret:&nbsp; ret sost_but&nbsp;&nbsp; endp&nbsp;&nbsp;
такой еще вопрос, нужно ли весь код пытаться распределить по подпрограммам, а после метки Satrat: писать только call… просто, я смотрю тут у себя разные примеры, дак там только подпрограммы!
Post #: 104
RE: Помогите с изучением asemblera - 2010-04-19 11:35:41.516666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
да, но я ж говорю, по хакерской привычки вылизывать до байта, я бы сделал так:sost_but proc ;обработка кнопок test byf_in, 00000001b ;(0я кнопка) jz sost_m1 jmp but_01 sost_m1: test byf_in,00000010b ;(1я кнопка) jz sost_m2 jmp but_02 sost_m2: test byf_in,00000100b ;... jz sost_m3 jmp but_03 sost_m3: test byf_in,00001000b jz sost_m4 jmp but_04 sost_m4: test byf_in,00010000b jz sost_m5 jmp but_05 sost_m5: test byf_in,00100000b jz sost_m6 jmp but_06 sost_m6: test byf_in,01000000b jz sost_ret jmp but_07 sost_ret: ret sost_but endp Но это минимум, что я бы сделал. То что код повторяется, состоит из множества однотипных кусков – это намёк на то, что этот код можно свернуть в цикл.
Post #: 105
RE: Помогите с изучением asemblera - 2010-04-19 19:05:29.946666   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
может вот такой цикл сделать

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov al, 0h povtor: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out&nbsp;&nbsp; 0h, al &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in&nbsp;&nbsp;&nbsp;&nbsp; ax, 0h &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp; ax, 0h &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp;&nbsp; povtor ; если клавиша нажата, то идем на ее определение &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp; cl,0ffh index: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inc&nbsp;&nbsp; cl &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shr&nbsp;&nbsp; ax, 1 ;&nbsp;&nbsp; пусть мы нажли клавишу, унитарный код которой 100b (это третья клавиша). &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; &nbsp; сдвигаем 100b до тех пор, пока не взведем флаг CF, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; &nbsp; накапливая количество сдвигов в cl, тем самым определим порядковый &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; номер&nbsp; клавиши (в данном случае 2, начиная с 0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnc&nbsp;&nbsp; index &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shl&nbsp;&nbsp; cl, 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; сдвигаем на нужное нам количество разрядов, которое нужно для перехода &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; по jmp к соответствующему вызову подпрограммы &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp; bx, vizov &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp; cx, bx &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp; cx vizov: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call shift_mode &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp; povtor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call dialing_mode &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp; povtor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...
rgo, я так и не решил для себя, нужно ли весь код пытаться распределить по подпрограммам, а после метки Satrat: писать только call…?
блин, ни фига так не получится, jmp   cx - прыгает совсем не на те адреса… (
мб можно вместо
call shift_mode писать
jmp shift_mode, если можно, то где у нас должны лежать вызовы подпрограмм, в массиве? т.е. вот эта запись jmp shift_mode куда нас должна перекинуть?
Post #: 106
RE: Помогите с изучением asemblera - 2010-04-20 13:59:00.503333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Команда call func кладёт в стек адрес команды следующей за call, и выполняет переход на адрес func. Команда ret извлекает из стека адрес возврата и переходит на него. Никто не мешает нам положить адрес возврата в стек ручками, командой push. ret (последняя команда в функции) от этого не перестанет работать. И ручной способ складывания адреса возврата позволяет нам управлять тем, куда вернётся управление из функции. То есть команды:call func jmp some_whereэквивалентны коду:push some_where jmp func
shl cl, 2 ; сдвигаем на нужное нам количество разрядов, которое нужно для перехода ; по jmp к соответствующему вызову подпрограммы Ты уверен, что это нужное количество разрядов?
Как сосчитать адрес для jmp? По формуле: vizov + cx * k, где k – это суммарный размер команд: call shift_mode jmp povtor Так ведь? Мне кажется, что эти команды займут минимум шесть байт, то есть k >= 6, так? Ты же считаешь по формуле: vizov+cx*4, ведь сдвиг на два бита влево – это умножение на четыре. То есть у тебя k < 6. Запусти программу в отладчике, и посмотри сколько байт занимают эти команды. Или загляни в листинг компиляции.
Post #: 107
RE: Помогите с изучением asemblera - 2010-04-20 15:21:53.346666   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
quote:

И ручной способ складывания адреса возврата позволяет нам управлять тем, куда вернётся управление из функции.

это понял.

ни фига не получается подобрать универсально адрес для jmp (vizov + cx * k)
Post #: 108
RE: Помогите с изучением asemblera - 2010-04-20 15:52:03.560000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Что значит подобрать? Подбирать ничего не надо.:
[rgo ~]$ cat &gt;tmp.s &lt;&lt;EOF .code16 call $0x1234 jmp $0x5678 EOF [rgo ~]$ as -al tmp.s GAS LISTING tmp.s page 1 1 .code16 2 0000 E80000 call 0x1234 3 0003 E90000 jmp 0x5678 Мы видим, что в 16-битном режиме команда call <addr> – это 3 байта, jmp <addr> – тоже. Хотя, кстати не факт. В случае если переход недалеко, ассемблер по-моему может закодировать jmp в два байта (код операции и однобайтовое смещение перехода, относительно текущего адреса). Посмотри на своей системе, сколько там ассемблер тратит байт на кодирование этих двух команд. Ассемблер x86 – это тебе не два пальца обоссать, ему годов больше чем мне, и дерьмовость его системы команд сегодня понятна даже тем, кто никогда с x86 никуда не вылезал, и других ассемблеров не видел.

Кроме того, у меня вызывает сомнения команда: lea bx, vizovВ intel'овском синтаксисе иногда надо писать всякие там offset, dword ptr, и прочую лабуду. Я не помню когда и что надо писать. Если ты не уверен точно, что в этой команде ничего подобного не надо, проконсультируйся со справочником.

И запусти ты, наконец, программу под отладчиком. Она с клавиатурой работает и отлаживать её сложно? Линь есть под рукой? Собери dosbox с поддержкой отладки (у него где-то промеж опций configure надо заказывать возможность отладки доса), и запускай под досбоксом – сможешь без проблем отлаживать программы которые как угодно извращаются с железом. Или возьми какой-нибудь bosch, поставь в него дос и отлаживай в нём.

ps. Только сейчас обратил внимание на слово "универсально" – что ты подразумевал под этим? Может дело как раз в том, что разные jmp'ы кодируются разным количеством байт? Хотя не должно бы. Расстояние от этих джампов до метки povtor вроде гораздо меньше 128 байт. Значит надо думать, что все эти джампы будут занимать по два байта.
Post #: 109
RE: Помогите с изучением asemblera - 2010-04-20 17:28:46.326666   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666

вот
          lea si, proverka_nagatia
vizov:
          push si          
          jmp  shift_mode
         
          push si           
          jmp  dialing_mode
         
          push si     
          jmp  key_mode
         
          push si           
          jmp  error_mode

quote:

Кроме того, у меня вызывает сомнения команда: lea bx, vizov


это загрузка эффективного адреса
Post #: 110
RE: Помогите с изучением asemblera - 2010-04-20 20:24:17.740000   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
selection_keys&nbsp;&nbsp; proc &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in al, 0h &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test&nbsp; al, 00000001b ;(0я кнопка) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp; key_1&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp; shift_mode &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; key_1:&nbsp;&nbsp;&nbsp; test&nbsp; al, 00000010b ;(1я кнопка) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp; key_2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp; dialing_mode &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; key_2:&nbsp;&nbsp;&nbsp; test&nbsp; al,00000100b&nbsp; ;(2я кнопка) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp; key_3&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp; key_mode &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; key_3:&nbsp;&nbsp;&nbsp; test&nbsp; al, 00001000b&nbsp; ;(3я кнопка) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz m1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp; error_mode &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; selection_keys&nbsp;&nbsp; endp сделаю так и вротмненоги, не знаю я, как в цикле все это сделать (как упростить до аля тутписалхакер)
Post #: 111
RE: Помогите с изучением asemblera - 2010-04-27 00:21:44.030000   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
банальная проблема - ни как не получается записать в переменную значение. вот пример
.386 RomSize&nbsp;&nbsp;&nbsp; EQU&nbsp;&nbsp; 4096 Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SEGMENT AT 40h use16 atomicity_of_number&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dw&nbsp;&nbsp;&nbsp; ? Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDS Stk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SEGMENT AT 100h use16 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dw&nbsp;&nbsp;&nbsp; 64 dup (?) StkTop&nbsp;&nbsp;&nbsp;&nbsp; Label Word Stk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDS Code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SEGMENT use16 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASSUME cs:Code,ds:Data,es:Data &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp; ax,Code &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp; ds,ax &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp; es,ax &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp; ax,Stk &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp; ss,ax &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp; sp,StkTop m11:&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov ax, 0FFFFh &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov atomicity_of_number, ax&nbsp; ; это уже не работает, как было то, что было во время создания переменной, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; так и осталось&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov dx, atomicity_of_number &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call selection_keys &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp m11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org&nbsp;&nbsp; RomSize-16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; это внутренние заморочки эмулятора &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASSUME cs:NOTHING ; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp; Far Ptr Start&nbsp;&nbsp;&nbsp;&nbsp; ; Code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDS End
Post #: 112
RE: Помогите с изучением asemblera - 2010-04-27 00:42:19.473333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
А что у тебя лежит в ds? Если префикс сегмента не указан, то `mov var, ax' запишет в ds:var.
Post #: 113
RE: Помогите с изучением asemblera - 2010-04-27 01:11:10.966666   
iidsp

Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
quote:

mov ax,Code mov ds,ax
quote:

ORIGINAL: rgo

А что у тебя лежит в ds? Если префикс сегмента не указан, то `mov var, ax' запишет в ds:var.

ds cs - совмещены

вот:

так-то я могу не заморачиваться с этим, а передавать аргументы не через общие ячейки памяти(переменные), а через стек! но мне интересно, почему не получается работать с переменными .
Post #: 114
RE: Помогите с изучением asemblera - 2010-04-28 03:17:46.576666   
serqei35

Сообщений: 4
Оценки: 0
Присоединился: 2010-04-27 21:02:39.030000
quote:

ORIGINAL: zverozavr

Всем доброго времени суток.
Подскажите на половину деревянному в программировании …. как вообще запускается и работается с ассемблером ? :(
скачал кучу сред программирования (ТАСМ, МАСМ и тд) но вот чтото не пойму как начать :( и реально запустить их под виндой? желательно под 7кой :)

Не знаю как насчет Windows 7, а вот как установить и настроить масм под Windows XP можешь почитать здеся:
http://asm-nix.narod.ru/uchebka/masm/page1.html

Помоему, там всё разжевано до мелочей.
Успехов!
Post #: 115
RE: Помогите с изучением asemblera - 2010-05-31 21:46:39.180000   
zverozavr

Сообщений: 35
Оценки: 0
Присоединился: 2009-12-14 00:43:48.116666
Всем доброго времени суток.
Продолжаю потихоньку полегоньку изучать асм …
Нам задали лабораторную по компьютерной графике:
Надо в окне нарисовать 5ти угольник и кнопками с клавиатуры управлять им (перемещение по осям и масштабирование) …
Может кто сможет с кодом помочь или хотя бы подсказать что да как примерно делать (какие библиотеки и приёмы использовать) ???
Есть ещё вариант сделать на С++ со вкладками ассемблера … но этот вариант меня ещё более в стопор вводит … какие именно вкладки на асме делать - я хз :(
Post #: 116
RE: Помогите с изучением asemblera - 2010-07-05 21:27:51.780000   
поPROшайка

Сообщений: 12
Оценки: 0
Присоединился: 2010-07-05 17:19:30.026666
Вот отлично может тут помогут. Значит скачал я FASM 1.67 в инструкции написано: открыть FASM.EXE и ничего не изменя закрыть> создается файл FASMW.INI открываем его и в самом конце пишем
[Environment]
Path=D:\FASM167\INCLUDE\
сохраняем, но при компиляции самой простой проги типа "Я твоя первая прога на FASM" появляется ошибка: Error: file not found
Post #: 117
RE: Помогите с изучением asemblera - 2011-07-12 15:58:11.590000   
Nurpard

Сообщений: 2
Оценки: 0
Присоединился: 2011-07-12 15:55:04.560000
Жесть О_о"
Post #: 118
RE: Помогите с изучением asemblera - 2012-04-13 21:18:51.496666   
biTix

Сообщений: 64
Оценки: 0
Присоединился: 2011-08-09 00:59:14.560000
интересно, а есть ли здесь те сис программисты, кот умеют в уме составлять свой алгоритм на чистом языке асма. Если да, то поделитесь плз опытом :) кодеров прошу мимо..
Post #: 119
Страниц:  1 2 [3]
Все форумы >> [Прочее] >> RE: Помогите с изучением asemblera







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.