Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как формировать opcode 
:(
    Опции темы
scuter
Дата 24.11.2011, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



к сожалению я могу писать ASM коды только на flat assembler
компилятор этот неплохой, только вот не хочет он компилить некоторые команды

в связи с такими обстоятельствами приходится вводи команды opcode-ми
если команда цельная, такая как XLAT MOVSB
токоманду просто ввести, но если в команде используются указатели на регистры или стек
возникает затруднения


к примеру комманда LDS в opcode пишут C5 r
Код


MOV r/m32,segreg              ; o32 8C /r            [386]
MOV memoffs32,EAX             ; o32 A3 ow/od         [386]
MOV r/m32,imm32               ; o32 C7 /0 id         [386]
MOV EAX,memoffs32             ; o32 A1 ow/od         [386]
MOV reg32,imm32               ; o32 B8+r id          [386]
MOV reg32,r/m32               ; o32 8B /r            [386]
MOV r/m32,reg32               ; o32 89 /r            [386]
MOVSD                         ; o32 A5               [386]
MOVSX reg16,r/m8              ; o16 0F BE /r         [386]
MOVSX reg32,r/m8              ; o32 0F BE /r         [386]
MOVSX reg32,r/m16             ; o32 0F BF /r         [386]
MOVZX reg16,r/m8              ; o16 0F B6 /r         [386]
MOVZX reg32,r/m8              ; o32 0F B6 /r         [386]
MOVZX reg32,r/m16             ; o32 0F B7 /r         [386]
CMP AL,imm8                   ; 3C ib                [8086]
CMP AX,imm16                  ; o16 3D iw            [8086]
DAA                           ; 27                   [8086]
DAS                           ; 2F                   [8086]
DEC reg16                     ; o16 48+r             [8086]
DEC r/m8                      ; FE /1                [8086]
DEC r/m16                     ; o16 FF /1            [8086]
DIV r/m8                      ; F6 /6                [8086]
DIV r/m16                     ; o16 F7 /6            [8086] 

скажите как мне переводить это всё безобразие
и как формировать нормальный код
PM MAIL   Вверх
arcsupport
Дата 24.11.2011, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



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

PM MAIL   Вверх
500mhz
Дата 24.11.2011, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



что то вы не так делаете, FASM компилит все, и вдоль и поперек.
на мой взгляд на данный момент это самый продвинутый и поддерживаемый компилятор


--------------------

PM MAIL ICQ   Вверх
scuter
Дата 24.11.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



Цитата(500mhz @  24.11.2011,  10:12 Найти цитируемый пост)

что то вы не так делаете, FASM компилит все, и вдоль и поперек.
на мой взгляд на данный момент это самый продвинутый и поддерживаемый компилятор

да трудно не согласится 
на FASM сделали KolibriOS и MenuetOS

только разработчеки FASM решили сделать язык ассемблер по проще
и теперь не разберёшь каким боком писать под это дело


arcsupport, тут не шабка программы
а error: illegal instruction.
на каждой строчке.
PM MAIL   Вверх
500mhz
Дата 24.11.2011, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



scuter 
выложи код где у тебя не работает xlat


--------------------

PM MAIL ICQ   Вверх
scuter
Дата 24.11.2011, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



Код

use16
    ORG    100H

MAIN:   ; PROC    NEAR
    CLI
    MOV    AX, 2501H
    MOV    DX, INT01
    INT    21H
    MOV    AX, 2503H
    MOV    DX, INT03
    INT    21H
    STI

    PUSHF
    POP    AX
    OR    AX,0000000100000000B
    PUSH    AX
    POPF
egens:
    MOV    AH,09H
    MOV    DX, MSG
    DB    0CCH
    INT    21H

    MOV    AX,1234H
    MOV    BX,5678H
    ADD    AX,BX
    MOV    DX,AX
    NOT    AX
    ADD    DX,AX
    xor     ah,ah                   ;wait key function number
    int     16h                     ;BIOS keyboard interrupt
    jmp egens
    RET    6

MSG    DB    'Debugger is running.', 0DH, 0AH, '$'
;MAIN    ENDP

INT01:    ;PROC    NEAR
    PUSH    AX DX DS

    PUSH    CS
    POP    DS

    PUSH    DX
    PUSH    AX
    MOV    AH,09H
    MOV    DX,SAX
    INT    21H
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SBX
    INT    21H
    PUSH    BX
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SCX
    INT    21H
    PUSH    CX
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SDX
    INT    21H
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SSI
    INT    21H
    PUSH    SI
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SDI
    INT    21H
    PUSH    DI
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H
    INT    21H

    MOV    AH,10H
    INT    16H
    POP    DS DX AX
    IRET
SAX    DB    'AX=$'
SBX    DB    'BX=$'
SCX    DB    'CX=$'
SDX    DB    'DX=$'
SSI    DB    'SI=$'
SDI    DB    'DI=$'
SEND    DB    0DH,0AH,'$'
;INT01    ENDP

INT03:  ;  PROC    NEAR
    PUSH    AX
    MOV    AX,0E07H
    INT    10H
    POP    AX
    IRET
;INT03    ENDP


HEXOUTW:  ;  PROC    NEAR
    PUSH    BP
    MOV    BP,SP
    PUSH    AX BX CX DX DS
    PUSH    CS
    POP    DS
    MOV    BX,HEXTBL
    MOV    CL,4
    MOV    AX,[BP+4]
    MOV    AL,AH
    CALL    HEXOB
    MOV    AX,[BP+4]
    CALL    HEXOB
    POP    DS DX CX BX AX BP
    RET    2
HEXOB:    PUSH    AX
    SHR    AL,CL
    CALL    HEXO4
    POP    AX
    AND    AL,00001111B
    CALL    HEXO4
    RET
HEXO4:    
    DB     0D7H ;XLAT
    MOV    AH,02H
    MOV    DL,AL
    INT    21H
    RET
HEXTBL    DB    '0123456789ABCDEF'
  RET
;HEXOUTW    ENDP
    ;END    MAIN

проблема та не только в этом, нужны команды
Код

LGDT ;Загрузка регистра таблицы глобальных дескрипторов 
LIDT ;Загрузка регистра таблицы дескрипторов прерываний
LLDT ;Загрузка регистра таблицы локальных дескрипторов
LMSW ;Загрузка слова состояния машины
VERR ;Проверка сегмента на чтение
VERW ;Проверка сегмента на запись
LDS ;Загрузка указателя с использованием регистра DS
LES ;Загрузка указателя с использованием регистра ES
LFS ;Загрузка указателя с использованием регистра FS
LGS ;Загрузка указателя с использованием регистра GS
LSS ;Загрузка указателя с использованием регистра SS

и ещё множество других комманд

Это сообщение отредактировал(а) scuter - 24.11.2011, 11:06
PM MAIL   Вверх
500mhz
Дата 24.11.2011, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



xlatb
xlat[bx]


--------------------

PM MAIL ICQ   Вверх
scuter
Дата 24.11.2011, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



500mhz, по пробуй запустить такую инструкцию

Код

  addr db 'som text'
  les SI,addr

или такую
Код

  addr db 'som text'
  lds SI,addr

PM MAIL   Вверх
500mhz
Дата 24.11.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



и что?
lds ax,[si]

Добавлено через 1 минуту
не понятно что вы хотите делать с lds к примеру?


--------------------

PM MAIL ICQ   Вверх
iff
Дата 24.11.2011, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



scuter, зачем в 34-ой строке ret 6. Во первых откуда 6? Команда ret позволяет завершить com-программу. но так как у вас бесконечный цикл, то её вообще можно убрать (она никогда не выполнится).


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
scuter
Дата 24.11.2011, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



Цитата(500mhz @  24.11.2011,  13:05 Найти цитируемый пост)

и что?
lds ax,[si]

самое главное не пробует, а пишет
Код

  addr db 'som text'
  les SI,addr

FASM пишет
Цитата

les SI,addr
error: invalid operand.

если заглянуть в описание команды
Цитата

LES Загрузка указателя с использованием регистра ES
    les reg,mem

эквивалентна следующей группе команд:

    mov reg,word ptr mem

     mov ES,word ptr mem+2

Пример 1


    ;В полях данных:
    addr dd myproc ;Двухсловный адрес процедуры
    ;myproc
    ;В программном сегменте:
    les SI,addr ;ES:SI ® myproc

Пример 2


    ;В полях данных:
    mem dw 25 ;Ячейка памяти с
    ;произвольным содержимым
    addr dd myproc ;Двухсловный адрес этой ячейки
    ;В программном сегменте:
    mov BX,offset addr ;ВХ=адрес ячейки addr
    …
    les DX, [BX] ; DХ=смещение ячейки mem,
    ;ЕS=сегментный адрес ячейки mem



это означает что в FASM далеко не все команды поддерживаются
PM MAIL   Вверх
iff
Дата 24.11.2011, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



scuter, на счёт lds и др. - в качестве параметра нужно передовать не текст а адрес.
напрмер в tasm это выгядит так:
Код

addr dd 12345678h
;...
les si, addr

тогда es=1234h, а si=5678h.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
scuter
Дата 24.11.2011, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



Цитата(iff @  24.11.2011,  13:15 Найти цитируемый пост)

scuter, на счёт lds и др. - в качестве параметра нужно передовать не текст а адрес.
напрмер в tasm это выгядит так:
Код

addr dd 12345678h
;...
les si, addr

тогда es=1234h, а si=5678h.

именно это и требуется от команды
можед быть TASM это дело поддерживает но FASM поддерживает эту комманду в другом формате
Код

  addr dd 12345678h
  mov BX,offset addr
  les DX, [BX]

а как сделать этот offset в FASM непонятно
ничего не помогает.
PM MAIL   Вверх
500mhz
Дата 24.11.2011, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



не нада в фасме offset


--------------------

PM MAIL ICQ   Вверх
scuter
Дата 24.11.2011, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



Цитата(500mhz @  24.11.2011,  13:54 Найти цитируемый пост)
не нада в фасме offset

а что писать.

так как здесь написано уже перепробовано.
PM MAIL   Вверх
500mhz
Дата 24.11.2011, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



просто

mov BX,addr


--------------------

PM MAIL ICQ   Вверх
scuter
Дата 24.11.2011, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



Цитата(500mhz @  24.11.2011,  15:02 Найти цитируемый пост)

просто
mov BX,addr


спосибо, пояснение

но всё таки мне нужно узнать как формировать команды

Цитата

FADD    D8 /0  ST  m32real 


вот идёт команда с описанием

с начала название команды
FADD

потом цифра 0-7 или r  ничего не указывается
/0

потом названия регистров которые используются
прямо называется регистр AL, BX,DX ......
либо указывается общий формат регистра или указателя    m16/32 ,  r/m16/32, m16/32&16/32, imm16/32, m32real 

так вот как перевести это дело в нормальнай вид

как правильно сформировать вторую часть команды

т.е. как записываются регистры
m8/16/32

как такие 
r/m8/16/32

r8/16/32

imm8/16/32

xmm/m128

mm/m64 

m64

rel8/16/32

m32real, m64real

m32int


и что всё таки означает эта цифорка 0-7 или r после Opcode

X86 Opcode and Instruction Reference Home


Это сообщение отредактировал(а) scuter - 24.11.2011, 16:19
PM MAIL   Вверх
iff
Дата 24.11.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата

Формат записи инструкцийИспользуется Intel-синтаксис записи инструкций.

Единственное существенное отличие от формата, принятого в других ассемблерах (MASM, TASM в режиме совместимости с MASM) — значение ячейки памяти всегда записывается как [label_name], а просто label_name означает адрес (то есть порядковый номер) ячейки. Это позволяет обходиться без ключевого слова offset. Также в fasm при переопределении размера операнда вместо byte ptr пишется просто byte, вместо word ptr — word и т. д. Не позволяется использовать несколько квадратных скобок в одном операнде, таким образом вместо [bx][si] необходимо писать [bx+si]. Эти изменения синтаксиса привели к более унифицированному и лёгкому для чтения коду.

http://ru.wikipedia.org/wiki/FASM


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0747 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.