начинающий ассемблерист или как там...

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

вот решил посмотреть что такое ассемблер.
Препод говорит, что "Сложно-Сложно" и мне стало любопытно как им работать...

для начала такой вопрос: для ассемлера нужен спецальный компилятор и если да то где его мона найти, скачать?

дальше: дайте мне пожалуйста листинг программы сложения 2 чисел (желательно с комментариями, но я человек не придирчивый, могу и так).
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Ramzey
Сообщения: 52
Зарегистрирован: 12 дек 2006, 12:56

Много интересного, так же компилятор и линковщик найдешь на http://www.wasm.ru.
программа сложения 2 чисел, для TASM:

Код: Выделить всё


                .model  tiny
                .code
                ORG     100h
BEGIN:
;устанавливаем указатель сегмента данных на cs (ds:=cs)
                push    cs
                pop     ds
;сложение чисел a и b
                mov     al, a
                add     al, b
;подготавливаем результат для вывода на экран
                add     al, 30h
;выводим на экран 0Ah функцией биос
                mov     ah, 0Ah
;обнуляем bx - нулевая видеостраница
                xor     bh, bh
;количество повторений 1
                mov     cx, 1
;вызываем обработчик 10h прерывания - функции биос
                int     10h
;функция ДОС 4Ch завершение работы программы с кодом 00
                mov     ax, 4c00h
                int     21h
;переменные
a               db      5
b               db      4
                END     BEGIN
В результате компиляции получается .com-файл.
Это самый простой вариант, когда результат одноразрядный
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

ага... Ramzey, а на той ссылочке, которую ты мне кинул, дофига всяких там компилеров, нон какой больше подойдет для начанающего ассемблериста?

спасибо за приведенный мне пример :) )
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Ramzey
Сообщения: 52
Зарегистрирован: 12 дек 2006, 12:56

Я с TASMа начинал - так в институте было.
Рекомендую использовать DN (или ему подобный файл менеджер) для писания текстов прог и настройть запуск файлов с расширением *.asm.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

В Turbo Pascal 7.0 есть встроенный ассемблер. Чтобы включить в программу код asm нужно

Код: Выделить всё

asm
.....
.....           код Assembler'a
.....
end;
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):и настройть запуск файлов с расширением *.asm.
Oleg_Rus, это поможет тебе быстро компилить asm файлы с помощью bat файла, указав имя проги в параметрах (asm.bat myprog.asm - сокр. вариант: asm myprog):

Код: Выделить всё

@echo off
D:\Langs\asm\tasm %1.asm  /iD:\Langs\asm\Includes /q/m3 /la
D:\Langs\asm\tlink %1.obj /m /e /3 /yx
del *.obj
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

somewhere,
begin
asm
push cs
pop ds

mov a1, a
add a1, b

add a1, 30h

mov a1, 0Ah

xor bh, bh

mov cx, 1

int 10h

mov ax, 4c00h
int 21h

a db 5
b db 4
end

допустим я набил этот самый код в pascal`е, но не компилится и, так как я в ассемблере ламер, то прошу объяснить почему не пашет, почему никак не хочет работать, и как это исправить
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):a db 5
b db 4

Код: Выделить всё

var a,b: byte;
&quot писал(а):mov ax, 4c00h
int 21h
Примерно эти строки генерит сам паскаль после end.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

somewhere, спасибо, доработал, но теперь выдает ошибку

a bd 5;

говорит Syntax error;
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Ramzey
Сообщения: 52
Зарегистрирован: 12 дек 2006, 12:56

Вот как это выглядит на паскале:

Код: Выделить всё

var
  a,b : byte;
begin
  a:=5;
  b:=4;
  asm
{;сложение чисел a и b}
                mov     al, a
                add     al, b
{;подготавливаем результат для вывода на экран}
                add     al, 30h
{;выводим на экран 0Ah функцией биос}
                mov     ah, 0Ah
{;обнуляем bx - нулевая видеостраница}
                xor     bh, bh
{;количество повторений 1}
                mov     cx, 1
{;вызываем обработчик 10h прерывания - функции биос}
                int     10h        
  end;
end.
Ответить