|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.02.2012, 21:58 | #1 |
Пользователь
Регистрация: 22.11.2011
Сообщений: 18
|
Описание команд в ассемблере
Здравствуйте. Начал изучение ассемблера.
Появились некоторые вопросы по описанию команд: №1. xchg ax,di Мнемоника: XCHG ax,r16 КОП: 90+rw RW= 111b = 7h Код операции: 97h Составил вроде правильно, но в симуляторе dosbox пишет команду наоброт. Скриншот внизу. Так должно быть или не правильно я сделал описание? №2. not byte ptr [bx+800h] Мнемоника: NOT r/m8 КОП: F6 /2 modR/M: mod = 10b REG/КОП=010b R/M=111b ModR/M=10010111b=97h Код операции: F6h97h0008h Почему здесь надо писать 0008, а не 800? №3. jnz $+5 КОП: 75 Код операции: 75h5h Пытаюсь так же в симуляторе написать 75 5, но там либо 75 50, либо 75 05 . Как правильно написать? Думаю все-таки к 75 05. Все скриншоты внизу! И еще интересует такой нюанс, есть сложности с определением режимом адрессации. Например, команда xor cx,[si+63h] и какую выбрать из этих списков подходящую команду: XOR ac,im XOR r/m8,im8 XOR r/m8 ,r8 XOR r8,r/m8 УЛ читал, но что-то не совсем разобрался. Заранее благодарю! Ps. сорри за дублирование темы. |
29.02.2012, 17:36 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
ну, почти всё правильно у вас:
я написал так: Код:
Код:
hint. если не ошибаюсь, xchg обменивает местами два регистра, поэтому, по большому счёту, не важно ax, di или di, ax .... |
29.02.2012, 18:39 | #3 |
Пользователь
Регистрация: 22.11.2011
Сообщений: 18
|
Спасибо. Но не совсем понял "нужно отнять длину байта". Т.е. длина байта = 2 и мы из 5 вычитаем 2 и прибавляем к адресу команды, т.е. 75 + 03? И почему длина байта равняется 2?
И последний непонятный момент: почему в адрес команды not byte ptr [bx+800h] мы пишим F6970008 а не 800? И как собственно, мы получили 0008 из 800? Заранее спасибо. |
29.02.2012, 20:52 | #4 | ||
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Цитата:
Цитата:
Код:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
||
29.02.2012, 21:58 | #5 |
Пользователь
Регистрация: 22.11.2011
Сообщений: 18
|
Спасибо. Если, например, было бы 65, то написали бы
Код:
Код:
А1А2 - это ячейки адреса команды? Со 2-ой командой получается: jnz $+5 КОП: 75 Длина команды jne (rel8)= 2 байтам, следовательно 5-2=3h Общий код операции: 75h03h. Получается так? Если было бы, например, jnz $+48, то получилось бы: 75h46h? И откуда мы узнаем длину команды? Где можно в виде таблице посмотреть эти данные как для этой команды, так и для других, например jnb и тд? Последний раз редактировалось mosxe; 29.02.2012 в 22:07. |
29.02.2012, 22:45 | #6 | ||
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Цитата:
Цитата:
А насчёт таблицы, даже и не знаю. А вообще, зачем вам это? Собственный компилятор пишите что-ли?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
||
29.02.2012, 22:57 | #7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Хорошо, что благодаря помощи Ulex разобрались с этим вопросом! |
|
29.02.2012, 23:48 | #8 |
Пользователь
Регистрация: 22.11.2011
Сообщений: 18
|
Нееет Мне еще очень далеко до компилятора. Стараюсь познать для начала базу.
Вроде все понял, но щас не могу получить что-то код 75h2Eh, если не сложно, можете его расписать как получили? |
29.02.2012, 23:54 | #9 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
48 десятичное - это 30h шестнадцатеричное.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
01.03.2012, 08:31 | #10 | |
Старожил
Регистрация: 08.02.2012
Сообщений: 2,173
|
вот эта запись
Цитата:
jnz $+48h а при той записи, которая была у вас, 48-2 = 46 = 2Eh и вообще, существуют два варианта хранения данных, можете об этом здесь почитать более подробно: ссылка
Правильно поставленная задача - три четверти решения.
Последний раз редактировалось DiemonStar; 01.03.2012 в 08:42. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Описание команд в ассемблере | mosxe | Помощь студентам | 0 | 27.02.2012 21:59 |
реализация команд с помощью набора других команд | zhenyaa | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 5 | 08.11.2009 21:37 |
Задача на ассемблере. Использование команд сдвига. | SoundMan | Помощь студентам | 2 | 25.09.2008 21:17 |