Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.06.2013, 15:49
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
Вопрос Delphi и Assembler

Доброго времени) С Делфями работаю уже довольно давно, а в ассемблере нуб полнейший, знаю, что можно включать асм код в делфи с помошью asm..end; но у меня возникли сложности с переводом кода из ассемблера, не могу или не знаю как правильно объяснить делфи такую конструкцию:

Код:
kit_start:
section .restart vstart=0
	cli
    xor bx, bx				
    mov ss, bx
    mov [ss:0x7afe], sp		
    mov sp, 0x7afe             
    push ds
    pushad						
    mov ds,bx					
    mov ax, [0x413]				
    sub ax, 2					
    mov [0x413], ax				
    shl ax, 0x6					
    mov ax, CODEBASEIN1MB		
    mov es, ax					

    mov bx, 0x8000				
    							
    mov [bx + codereloc], ax    
    mov [bx + codeloc2], ax		
    xor bx, bx
    
    cld

    ......

    mov [0x4e], es
    sti					
    push es				 
    push word dertig 
    retf	
    
начало
kit_start:
section .restart vstart=0

как записать?

ив от ещё:

Код:
sleep:.
    mov cx, 0x1ff
l1:								
    push cx
    mov cx,0xffff
l2:								
    loop l2
    pop cx
    loop l1
    ret
        
на l2 ругается если записывать так:
Код:
procedure sleep();
asm
    mov cx, 0x1ff
end;

procedure l1();
asm
    push cx
    mov cx,0xffff
end;

procedure l2();
asm
    loop l2//тут ворчит
    pop cx
    loop l1
    retend;

что делать как быть?
кода там намного больше, если до чего дойду, ещё спрошу, тут помогите)
Ответить с цитированием
  #2  
Старый 30.06.2013, 16:40
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Метки пишутся так:
Код:
@l1: nop
jmp @l1
А код в твоем примере походу только в ring0 будет работать, ибо он для дос.

З.Ы, и смысл в этом коде?
Код:
    mov cx,0xffff
l2:                             
    loop l2
Записываем в счетчик FFFF и лупим его до нуля.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 30.06.2013 в 16:44.
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
reqyz (30.06.2013)
  #3  
Старый 30.06.2013, 16:47
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Не просто для дос - это походу кусок какого-то загрузчика или операционки. Все указывает именно на это:
Цитата:
mov [ss:0x7afe], sp
mov sp, 0x7afe
push ds
pushad
...
CODEBASEIN1MB
...
xor bx, bx
mov ss, bx
...
mov ds,bx
В нулевом кольце тоже работать не будет - последние две команды в любой существующей операционке вызовут краш скорее всего, 0 - не очень хороший селектор.
ТС видимо пытается написать загрузчик на делфях... Некоторые пытались тут, ничего не вышло толком. Делфа для этого не предназначена.
Цитата:
procedure l2();
asm
loop l2//тут ворчит
А чего бы ему не ворчать? Это скомпилится как-нибудь так:
Код:
l2:
  push ebp
  mov ebp, esp
  loop l2
Поэтому переход на внешние по отношению к асм-вставке имена запрещен. Иначе у делфы бы крыша поехала анализировать асм-код и пытаться так работать со стеком, чтобы все эти переходы не сорвали его.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 30.06.2013 в 16:51.
Ответить с цитированием
  #4  
Старый 30.06.2013, 17:29
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
procedure foo; register; assembler;
Так без пролога будет.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 30.06.2013 в 19:05.
Ответить с цитированием
  #5  
Старый 30.06.2013, 19:03
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию

Спасибо, буду разбираться, в случае чего ещё спрошу)
Ответить с цитированием
  #6  
Старый 01.07.2013, 08:48
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию

kit_start:
section .restart vstart=0

а что касаемо этого фрагмента, как это в делфях будет выглядеть?
Ответить с цитированием
  #7  
Старый 01.07.2013, 10:39
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Никак не будет, и уже писали почему.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 01.07.2013, 11:30
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от angvelem
Никак не будет, и уже писали почему.
Не доходит через голову - дойдет через руки.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter