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

» Assembler

Автор: akaGM
Дата сообщения: 07.04.2012 12:24

Цитата:
и у всех немного синтаксиси отличается

сиси да, отличаются у всех...

но прав blaro
Цитата:
Да, нет. Самый обычный. Классический.
Автор: Maksim_Avrorov
Дата сообщения: 07.04.2012 13:50
Может кто-нибудь встречался с данной проблемой:
"INT 16h, AH=010h - is not supported refer to the list of supported interrupts."
В моём понимании, эта проблема возникла из-за того что в компиляторе отсутствует вызов этой функции в 16-ом прерывании.

Автор: bomzzz
Дата сообщения: 07.04.2012 14:22
http://www.codenet.ru/progr/dos/int_0015.php
а вообще есть 10-ая фукция 16-го прерывания?
Автор: akaGM
Дата сообщения: 07.04.2012 14:51
Maksim_Avrorov
это где ты вычитал? 16h/10h -- расширение 16h/0h и ничего особенного из себя не представляет...
применяется, например, для различия двух разных insert'ов
Автор: A1exSun
Дата сообщения: 07.04.2012 14:54
Maksim_Avrorov
emu8086 поддерживает ограниченное количество функций INT 16h, смотри документацию (хелп в программе).
Автор: bomzzz
Дата сообщения: 07.04.2012 14:59
это не он скорее всего ругнулся, он пишет в том духе. что NOT SUPPORTED YET
Автор: Maksim_Avrorov
Дата сообщения: 07.04.2012 16:48
akaGM
Автор описывает эту функцию как "ждущую нажатия любой клавиши".
mov AH, 10h
int 16h
Вот так это в книге выглядит.
Автор: bomzzz
Дата сообщения: 07.04.2012 16:57
; wait for any key press:
mov ah, 0
int 16h
ачепятка наверное
Автор: akaGM
Дата сообщения: 07.04.2012 17:29
Maksim_Avrorov
я тебе говорю:
ah=10 аналог ah=0, для тебе не должно быть разницы...
Автор: A1exSun
Дата сообщения: 07.04.2012 17:42
bomzzz

Цитата:
Функция 10h полностью аналогична функции 00h, но она предназначена для работы с клавиатурой, имеющей 101 клавишу.
Автор: Maksim_Avrorov
Дата сообщения: 07.04.2012 18:14
Попробовал 0h вместо 10h и вправду получилось.Спасибо.
Автор: bomzzz
Дата сообщения: 07.04.2012 18:35
значит не опечятка. в начале книги должно быть пару слов об компиляторе и необходимом оборудовании
Автор: A1exSun
Дата сообщения: 08.04.2012 19:02
Правильно [more=здесь]
Код: .586P

rdtsc MACRO
db 0fh,031h
ENDM

data segment use16
CPUSPEED db 4 dup (0)," MHz",'$'
data ends

stk segment stack use16
db 256 dup (?)
stk ends

code segment use16
assume cs:code,ss:stk,ds:data
ByteToStr PROC
xor ah,ah
WordToStr: xor dx,dx
DWordToStr: push si
push di
mov si,10
xor cx,cx
Next_Digit: push ax
mov ax,dx
xor dx,dx
div si
mov bx,ax
pop ax
div si
push dx
mov dx,bx
inc cx
or bx,ax
jnz Next_Digit
cld
Store_Digit_Loop:
pop ax
add al,'0'
stosb
loop Store_Digit_Loop
pop di
pop si
ret
ByteToStr ENDP

start:
mov ax,data
mov ds,ax
mov es,ax

mov eax,cr4
and al,0FBh
mov cr4,eax

in al,70h
or al,80h
out 70h,al
mov al,0feh
out 21h,al

hlt
rdtsc
mov esi,eax
hlt
rdtsc
sub eax,esi

mov ebx,1190000
mul ebx
mov ebx,1000000
div ebx
mov edx,0
mov ebx,65535
div ebx

rol eax,16
mov dx,ax
shr eax,16

lea di,CPUSPEED
call dwordtostr

mov al,0
out 21h,al
in al,70h
and al,7fh
out 70h,al

mov ah,9
mov dx,offset CPUSPEED
int 21h

exit:
mov ax,4c00h
int 21h
code ends
end start
Автор: akaGM
Дата сообщения: 08.04.2012 19:32
A1exSun
Код: ByteToStr PROC
xor ah,ah
WordToStr: xor dx,dx
DWordToStr: push si
...
ret
ByteToStr ENDP

...
lea di,CPUSPEED
call dwordtostr
Автор: A1exSun
Дата сообщения: 08.04.2012 21:17
akaGM

Цитата:
признайся, сам писал?

http://www.wasm.ru/article.php?article=hardzen отсюда исходник.

Собственно вопрос, а где результат там оказывается? В EAX бинарное число, да?


Код: mov eax,cr4
and al,0FBh
mov cr4,eax
Автор: perdun
Дата сообщения: 09.04.2012 05:53

Цитата:
Еще я не понял, что это?

разрешает юзать rdtsc из 3-го кольца
Автор: A1exSun
Дата сообщения: 09.04.2012 21:40
perdun
Мне оно не нужно, т.к. пишу под MS-DOS 16 bit?
Автор: bomzzz
Дата сообщения: 10.04.2012 00:03
мало ли что ты там пишешь. может в защищенный режим процессор переводишь. сверяйся с кодом с котрого передираешь.
это дополнительный регистр cr4, че он делает с ходу не скажу, ну вот как бы пишут тебе, меняется некий байт который за что то в работе процессора отвечает видимо

Добавлено:
http://ru.osdev.wikia.com/wiki/CR4
Управляющий регистр CR4 впервые появился в микропроцессорах Pentium (?). Он содержит флаги, управляющие различными расширениями базовых возможностей процессора и имеет следующий формат:

и далее по тексту

Добавлено:
TSD
Запрет отметки времени (бит 2). Когда установлен, позволяет использовать инструкцию RDTSC только программам, выполняющимся на нулевом текущем уровне привилегий. Когда сброшен, эту инструкцию может использовать любая программа.

Добавлено:
perdun прав оказался, чууть чуть ошибся
Автор: cp58
Дата сообщения: 10.04.2012 10:39
A1exSun
Смотря где запуск происходит.
Автор: bomzzz
Дата сообщения: 10.04.2012 10:43
если он запустит свою программу под виндой изменить регистр cr4 он не сможет
Автор: cp58
Дата сообщения: 10.04.2012 10:58
bomzzz
Драйвер для windows порядка 7-8 строчек, учитывая DriverEntry.
Автор: bomzzz
Дата сообщения: 10.04.2012 11:04
меняющий регистр или позволяющий в виртуальном реальном режиме менять 16 битным приложениям
Автор: A1exSun
Дата сообщения: 11.04.2012 19:42

Код: mov ah, 5Bh
xor cx, cx ; обычный файл
lea dx, filename+2
int 21h
Автор: bomzzz
Дата сообщения: 11.04.2012 19:46

Цитата:
    mov     ah, 3ch
    mov     cx, 0    
    lea     dx, filename
    int     21h
    jc     error

    mov    ah, 3eh
    mov    bx, ax
    int    21h


возможно DS не указывает на сегмент данных, или нет завершающего нуля в имени
Автор: akaGM
Дата сообщения: 11.04.2012 19:47
A1exSun
а подробнее можно посмотреть?


Цитата:
filename+2 - введенное с клавы имя файла
тогда в конце 0 надо дописывать...
Автор: A1exSun
Дата сообщения: 11.04.2012 19:47
bomzzz

Цитата:
нет завершающего нуля в имени

Точно.
akaGM
Нельзя
Автор: bomzzz
Дата сообщения: 11.04.2012 19:51

Цитата:
name NONAME

CSEG segment
assume cs:cseg, ds:cseg, ss:cseg, es:cseg
org 100h

Start:
    mov     ah, 5bh
    mov     cx, 0
    lea     dx, filename
    int     21h
    jc     error

    mov    ah, 3eh
    mov    bx, ax
    int    21h
error:
    int    20h

filename    db    "file.txt", 0

CSEG ends
end Start

у меня работает
Автор: A1exSun
Дата сообщения: 11.04.2012 19:51
Не помогло.
У меня и так 0 на том месте, т.к.:

Код: filename db 244, 0, 244 dup(0)
Автор: akaGM
Дата сообщения: 11.04.2012 19:54
не хочешь не показывай...

вообще можешь писать

mov ah, 5bh
int 21h

что не так? не работает!
Автор: bomzzz
Дата сообщения: 11.04.2012 19:58
http://rghost.ru/37531661

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

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


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