» Сложение, вычитание и умножение на Flat Assembler Assembler. . . Блог программистов


Блог программистов






200910 Апр

Сложение, вычитание и умножение на Flat Assembler

Код:

format PE GUI 4.0
entry start ;Точка входа в программу
INCLUDE ‘INCLUDE\win32ax.inc’
INCLUDE ‘INCLUDE\encoding\win1251.inc’
INCLUDE ‘INCLUDE\api\user32.inc’

section ‘.data’ data readable writable

formats db «%d»,0
result db 256 dup(?) ;Когда будем преобразовавать число строку, сюда сохраним результат

section ‘.code’ code readable executable

start:
;Алгоритм сложения чисел 1 и 2
mov eax,1 ;Перемещаем в eax число 1
mov edx,2 ;Перемещаем в edx число 2
add eax,edx ;Складываем содержимое eax и edx (1+2). Выводим результат в eax.
invoke wsprintf,result,formats,eax ;Преобразуем число(результат) в строку для того чтобы можно было вывести его на экран.
invoke MessageBox,0,result,»Plus»,MB_OK ;Выводим результат на экран.

;Алгоритм вычитания 4 из 10
mov eax,10 ;Перемещаем в eax число 10
mov edx,4 ;Перемещаем в edx число 4
sub eax,edx ;Вычитаем из содержимого eax edx (10-4). Выводим результат в eax.
invoke wsprintf,result,formats,eax ;Преобразуем число(результат) в строку для того чтобы можно было вывести его на экран.
invoke MessageBox,0,result,»Minus»,MB_OK ;Выводим результат на экран.

;Алгоритм умножения 2 на 6
mov ax,2 ;Перемещаем в ax число 2
imul ax,6 ;Умножаем содержимое ax на 6 (2*6). Результат будет находиться в eax.
invoke wsprintf,result,formats,eax ;Преобразуем число(результат) в строку для того чтобы можно было вывести его на экран.
invoke MessageBox,0,result,»Umnojenie»,MB_OK ;Выводим результат на экран.

invoke ExitProcess,0 ;Выход из программы

section ‘.idata’ import data readable

library kernel32,’KERNEL32.DLL’,user32,’USER32.DLL’
INCLUDE ‘INCLUDE\api\kernel32.inc’

Комментарии

  1. 7 мая, 2009 | 14:52

    Спасибо.Полезная инфа!

  2. Dimf
    15 мая, 2009 | 12:04

    💡 молодец

  3. 23 июня, 2009 | 19:03

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

  4. 4 июля, 2009 | 13:12

    На ассемблере можно вообще чудеса творить

  5. 7 июля, 2009 | 10:11

    Спасибо за пост, инфа как всегда очень нужная.

  6. tester3000
    14 июля, 2009 | 20:12

    а хде кстати div или idiv

  7. 27 августа, 2009 | 14:05

    думаю надо будет потестить на выходных

  8. 11 сентября, 2009 | 12:55

    шикарный блог. постоянно нужна и полезная инфа. спасибо

  9. 13 сентября, 2009 | 17:56

    давно слежу за блогом — много интересующих вопросов разбирают

  10. 15 сентября, 2009 | 16:26

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

  11. 21 сентября, 2009 | 17:20

    Я пытался изучить, блин не как не поддался. 🙁

  12. Asper
    15 октября, 2009 | 00:59

    По-моему так будет лучше

    Код:

    format PE GUI 4.0
    entry start ;Точка входа в программу
    INCLUDE ‘INCLUDE\win32ax.inc’
    INCLUDE ‘INCLUDE\encoding\win1251.inc’
    INCLUDE ‘INCLUDE\api\user32.inc’

    section ‘.data’ data readable writable

    formats db “%d”,0
    result db 256 dup(?) ;Когда будем преобразовавать число строку, сюда сохраним результат

    section ‘.code’ code readable executable

    start:
    ;Алгоритм сложения чисел 1 и 2
    mov eax,1 ;Перемещаем в eax число 1
    add eax,2 ;Складываем содержимое eax и 2. Сохраняем результат в eax.
    invoke wsprintf,result,formats,eax ;Преобразуем число(результат) в строку для того чтобы можно было вывести его на экран.
    invoke MessageBox,0,result,”Plus”,MB_OK ;Выводим результат на экран.

    ;Алгоритм вычитания 4 из 10
    mov eax,10 ;Перемещаем в eax число 10
    sub eax, 4 ;Вычитаем из содержимого eax 4 (10-4). Сохраняем результат в eax.
    invoke wsprintf,result,formats,eax ;Преобразуем число(результат) в строку для того чтобы можно было вывести его на экран.
    invoke MessageBox,0,result,”Minus”,MB_OK ;Выводим результат на экран.

    ;Алгоритм умножения 2 на 6
    mov ax,6 ;Помещаем в ax число 6
    shl ax,1 ;Умножаем содержимое ax на 2 (2*6). Результат будет находиться в eax.
    invoke wsprintf,result,formats,eax ;Преобразуем число(результат) в строку для того чтобы можно было вывести его на экран.
    invoke MessageBox,0,result,”Umnojenie”,MB_OK ;Выводим результат на экран.

    invoke ExitProcess,0 ;Выход из программы

    section ‘.idata’ import data readable

    library kernel32,’KERNEL32.DLL’,user32,’USER32.DLL’
    INCLUDE ‘INCLUDE\api\kernel32.inc’

    А вообще ассемблер только поначалу кажется сложным. Попробуйте написать на нем хоть одну программу и он сразу покажется легче. 🙂 Только первую прогу лучше писать не под Win или Lin, а под Колибри ( board.kolibrios.org ).

  13. 17 октября, 2009 | 14:54

    да инфа точно полезное мне. очень спасибо

  14. 5 ноября, 2009 | 14:56

    Спасибо автору за инфу, люблю когда все доходчиво объясняют

  15. 8 ноября, 2009 | 22:33

    Сколько не пытался разобраться с этим Эссемблером нифига не выходит, наверное стоит попробовать еще разок

  16. 16 ноября, 2009 | 20:40

    Однозначно Assembler лидирует среди подобног софта

  17. 20 ноября, 2009 | 02:14

    Хотелось бы узнать на что еще способна данная программа, судя по отзываем она умеет многое

  18. 14 декабря, 2009 | 14:06

    давно слежу за блогом — много интересующих вопросов разбирают

  19. 14 декабря, 2009 | 14:06

    Хотелось бы узнать на что еще способна данная программа, судя по отзываем она умеет многое 😕

  20. Hav4ik
    6 сентября, 2010 | 18:19

    Ассемблер — Первый язык программирования после Машинных команд . Программировать на ассемблере не легко , так как даже простейшвя программа — это длинная последовательных команд , по структуре совпадаюших с машинным , к тому же надо знать множество подробностей устройсв компьютера (допустимые адреса памяти , регистры и так далее) .

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

    Кстати , может быть не в тему но у меня есть кое-что для те кто программируют на паскале :

    Процедуры на паскале с использованием компоненты языка ассемблера для работы с мышью в графическом режиме в паскале :

    { есть мышка или нет ? (такое бывает , на нашем старом компе в кабинете информатики =))) ) }
    function mauseinstaller:boolean; assembler; asm
    xor ax,ax; int 33h; cmp ax,-1; je @skip; xor al,al; @skip: end;
    { абцисс мышки }
    function getmousex:word; assembler; asm
    mov ax,3; int 33h; mov ax,cx end;
    { ординат мыши }
    function getmousey:word; assembler; asm
    mov ax,3; int 33h; mov ax,dx end;
    { нажата ли левая кнопка мышки ? }
    function leftpressed:boolean; assembler; asm
    mov ax,3; int 33h; and bx,1; mov ax,bx end;
    { нажата ли правая кнопка мышки ? }
    function rightpressed:boolean; assembler; asm
    mov ax,3; int 33h; and bx,2; mov ax,bx end;
    { чувствительность мышки }
    procedure mousesentivity(x,y:word); assembler; asm
    mov ax,1ah; mov bx,x; mov cx,y; xor dx,dx; int 33h end;

    >> с этими процедурами и функциями можно написать целый модуль для мыши в паскале !

  21. 19 ноября, 2010 | 10:15

    Спасибо за информативный пост. Возьму как пример для своей работы.

  22. 25 августа, 2011 | 03:03

    Но работать с объектно-ориентируемыми языками приятнее в разы.

  23. Insolor
    28 декабря, 2011 | 04:05

    Даешь деление!
    mov eax,-100
    cdq
    mov ecx,-7
    idiv eax, ecx

  24. 10 июня, 2012 | 00:04

    Спасибо, очень оригинально.

  25. 6 декабря, 2012 | 12:10

    Спасибо, начал изучать ассемблер, очень помогают ваши статьи.

  26. 27 февраля, 2014 | 23:17

    Ой как тяжко то было раньше! Как то хорошо, что сейчас легче языки стали более удобоваримые.