Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 18
1

Debug: как записать программу на машинном коде

01.10.2012, 17:52. Показов 6670. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Изучаю ассемблер. Нужно выполнить программу в debug.exe. Не могу понять, как записать программу на машинном коде. Заранее спасибо!

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
MOV     AH,09   { загружаем функцию вывода строки}
MOV     DX,130  { указываем адрес с которого начинается строка}
INT     21      { вывод на экран}
MOV     AX,01A1 { Х1 }
MOV     BX,007D { X2 }
ADD     AX,BX   { сложение Х1, Х2 }
MOV     BX,000E { Х3 }
MUL     BX      { умножаем сумму на Х3 }
MOV     BX,0C6D { Х4 }
SUB     AX,BX   { вычитаем из произведения Х4}
MOV     BX,000B { Х5 }
DIV     BX      { делим на Х5}
INT     20      { завершение программы}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2012, 17:52
Ответы с готовыми решениями:

Как ассемблеровский код представить в машинном коде (единички и нули) ?
В общем дали задание написать программу в маш кодах, поскольку это довольно трудоемко и я не...

Программа ввода-вывода текста в машинном коде
Приветствую. Есть задача: написать программу в машинном коде (без использования Ассемблера в...

Как исправить Debug Assert Failed в коде работы с матрицей?
Здравствуйте, мне нужно сделать такое задание: Написать функцию для произвольного двухмерного...

Вывод символа "?" на машинном коде
Привет. Напишите программу пожалуйста на машинном коде, вывода символа "?" синим цветом!!!

17
539 / 399 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
01.10.2012, 18:58 2
Ввод ассемблерного кода непосредственно в отладчике DEBUG выполняется так.
Запускается DEBUG.EXE. На экране появляется приглашение:
-
На это приглашение нужно ответить так
- а 100
Это означает, что вы просите у дебагера разрешение на ввод мнемонических команд ассемблера и располагаться они должны в сегменте команд, начиная со смещения 100h.
Далее можно вводить сами команды и ввод очередной команды должен завершаться нажатием клавиши Enter:
-a 100
XXXX:XXXX mov ax,100 ввели команду и нажали Enter
XXXX:XXXX mov bx,200 ввели команду и нажали Enter
.........................................
XXXX:XXXX если команду не вводить, а сразу нажать Enter, то опять появится символ приглашения
-
В этом примере символами ХХХХ:ХХХХ обозначены адреса команд, рассчитанные самим дебагером. Все числовые значения нужно вводить в 16-ричном виде. Вместо меток для условных переходов необходимо указывать непосредственно адреса тоже в 16-ричном виде.
1
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 18
02.10.2012, 05:40  [ТС] 3
Цитата Сообщение от Dmitrinik Посмотреть сообщение
Ввод ассемблерного кода непосредственно в отладчике DEBUG выполняется так.
Запускается DEBUG.EXE. На экране появляется приглашение:
-
На это приглашение нужно ответить так
- а 100
Это означает, что вы просите у дебагера разрешение на ввод мнемонических команд ассемблера и располагаться они должны в сегменте команд, начиная со смещения 100h.
Далее можно вводить сами команды и ввод очередной команды должен завершаться нажатием клавиши Enter:
-a 100
XXXX:XXXX mov ax,100 ввели команду и нажали Enter
XXXX:XXXX mov bx,200 ввели команду и нажали Enter
.........................................
XXXX:XXXX если команду не вводить, а сразу нажать Enter, то опять появится символ приглашения
-
В этом примере символами ХХХХ:ХХХХ обозначены адреса команд, рассчитанные самим дебагером. Все числовые значения нужно вводить в 16-ричном виде. Вместо меток для условных переходов необходимо указывать непосредственно адреса тоже в 16-ричном виде.
Спасибо! Это я понял, не подскажите ли Вы мне, как после этого вывести ответ? Что-то же она выполняет) Команда G выводит мне сообщение "Программа выполнена нормально".
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
02.10.2012, 06:01 4
Эмиль, для того, чтобы программа выводила результат на экран нужно результат из числового вида перевести в строку, а затем эту строку вывести на экран функцией 9 прерывания 21h
1
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 18
02.10.2012, 07:57  [ТС] 5
Цитата Сообщение от Mikl___ Посмотреть сообщение
Эмиль, для того, чтобы программа выводила результат на экран нужно результат из числового вида перевести в строку, а затем эту строку вывести на экран функцией 9 прерывания 21h
Спасибо! Что нужно сделать я представляю, но вот как это реализовать?)
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
02.10.2012, 09:26 6
Цитата Сообщение от Эмиль Посмотреть сообщение
но вот как это реализовать?)
Смотри в Ввод и вывод чисел в различных системах счисления
1
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
02.10.2012, 09:32 7
Команда "r" выводит содержимое регистров на экран.
1
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 18
02.10.2012, 10:48  [ТС] 8
Спасибо. Я уже разобрался, все получилось как нужно) Теперь надо додумать, как сохранить в com файл и порядок)

Добавлено через 55 минут
И у меня снова возникла проблема. Не могу сохранить. Через _N задаю имя, через _W пытаюсь сохранить. Ничего не выходит. Файл создается, но места он не занимает, а debug при запросе выдает "Файл не найден"
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
02.10.2012, 10:56 9
Эмиль,
озаглавь файл
n hello.bin
Количество записываемых байтов заносится в регистр СХ, после чего осуществляется собственно запись командой w:
r cx
400
w

Для выхода из отладчика используется команда q
1
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 18
02.10.2012, 12:22  [ТС] 10
Цитата Сообщение от Mikl___ Посмотреть сообщение
Эмиль,
озаглавь файл
n hello.bin
Количество записываемых байтов заносится в регистр СХ, после чего осуществляется собственно запись командой w:
r cx
400
w

Для выхода из отладчика используется команда q
Все сделал. Только, сохранил не BIN, а com. Как открыть его потом? "Файл не найден" выдает debug.
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
02.10.2012, 12:57 11
Эмиль, если есть СОМ-файл -- просто щелкни по нему мышью или Энтером и он должен запуститься или набери cmd имя_твоего_файла.com
1
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 18
02.10.2012, 13:28  [ТС] 12
Mikl___, спасибо! Ты мне очень помог. Мышью или Enter'ом не получилось. Открылся и сразу закрылся, но через cmd выдал мне нужный результат. Я доволен) Еще раз спасибо за все подсказки)
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
02.10.2012, 13:38 13
Эмиль, чтобы сразу не закрывался поставь перед int 20h две строки
Assembler
1
2
mov ah,0
int 16h
для выхода из программы нужно будет нажать любую клавишу на клавиатуре
0
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 18
02.10.2012, 14:05  [ТС] 14
Так?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MOV     AH,09
MOV     DX,200
INT     21
MOV     AX,013D
MOV     BX,0175
ADD     AX,BX
MOV     BX,000D
MUL     BX
MOV     BX,0780
SUB     AX,BX
MOV     BX,000C
DIV     BX
MOV     AH,0
INT     16
INT     20
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
02.10.2012, 14:12 15
Эмиль, да так, только не видно где ты пересчитываешь результат и делаешь его вывод на экран
0
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 18
02.10.2012, 14:15  [ТС] 16
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
MOV     AH,09
MOV     DX,200
INT     21
MOV     AX,013D
MOV     BX,0175
ADD     AX,BX
MOV     BX,000D
MUL     BX
MOV     BX,0780
SUB     AX,BX
MOV     BX,000C
DIV     BX
MOV     AH,0
INT     16
INT     20
8F E0 AE A3 E0 A0 AC AC A0 20 A2 EB E7 A8 E1 AB A5 AD A8 EF 20 A2 EB E0 A0 A6 A5 AD A8 EF 20 59 3D 5B 28 58 31 2B 58 32 29 58 33 2D 58 34 5D 2F 58 35 2C 20 A3 A4 A5 20 58 31 3D 31 33 44 2C 20 58 32 3D 31 37 35 2C 20 58 33 3D 44 2C 20 58 34 3D 37 38 30 2C 20 58 35 3D 43 24
0
0 / 0 / 0
Регистрация: 02.04.2015
Сообщений: 3
01.10.2015, 17:39 17
Вот у меня похожая программа:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MOV     AH,09
MOV     DX,200
INT     21
MOV     AX,01B4
MOV     BX,0147
ADD     AX,BX
MOV     BX,000D
MUL     BX
MOV     BX,0CF3
SUB     AX,BX
MOV     BX,0012
DIV     BX
MOV     AH,0
INT     16
INT     20
Как мне привести к похожему виду выходного сообщения?
Структура выходного сообщения программы:
“Программа вычисления выражения Y=[(Х1+Х2)ХЗ–Х4]/Х5, где
X1=..., X2=..., X3=..., X4=..., X5=...”

Я совсем новичок.
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
02.10.2015, 04:08 18
Цитата Сообщение от NEKA25 Посмотреть сообщение
Я совсем новичок.
Купи учебник или возьми в библиотеке
0
02.10.2015, 04:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2015, 04:08
Помогаю со студенческими работами здесь

Написать программу на машинном языке и степенного ряда, чтобы после решения ответы были равны
Помогите написать программу на машинном языке и степенного ряда, чтобы после решения ответы были...

Debug error в коде
Код объемный, но простой и я основное комментировал. Вылетает после того, как вводишь логин и...

Как программировать на машинном языке?
Используя только нули и единицы?

Debug assertion failed в коде шифра Гамильтона
Microsoft Visual C++ Debug library // Hamilton3.cpp: определяет точку входа для консольного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru