Сложение, вычитание и умножение на 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’
Спасибо.Полезная инфа!
💡 молодец
Теперь можно без всяких проблем делать простейшие арифметические действия с помощью ассемблера
На ассемблере можно вообще чудеса творить
Спасибо за пост, инфа как всегда очень нужная.
а хде кстати div или idiv
думаю надо будет потестить на выходных
шикарный блог. постоянно нужна и полезная инфа. спасибо
давно слежу за блогом — много интересующих вопросов разбирают
Да, ассемблер штука не легкая. Но изучив его можно творить чудеса.
Я пытался изучить, блин не как не поддался. 🙁
По-моему так будет лучше
Код:
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 ).
да инфа точно полезное мне. очень спасибо
Спасибо автору за инфу, люблю когда все доходчиво объясняют
Сколько не пытался разобраться с этим Эссемблером нифига не выходит, наверное стоит попробовать еще разок
Однозначно Assembler лидирует среди подобног софта
Хотелось бы узнать на что еще способна данная программа, судя по отзываем она умеет многое
давно слежу за блогом — много интересующих вопросов разбирают
Хотелось бы узнать на что еще способна данная программа, судя по отзываем она умеет многое 😕
Ассемблер — Первый язык программирования после Машинных команд . Программировать на ассемблере не легко , так как даже простейшвя программа — это длинная последовательных команд , по структуре совпадаюших с машинным , к тому же надо знать множество подробностей устройсв компьютера (допустимые адреса памяти , регистры и так далее) .
Согласен со всеми , ассемблер штука не легкая. Но изучив его можно творить чудеса .
Кстати , может быть не в тему но у меня есть кое-что для те кто программируют на паскале :
Процедуры на паскале с использованием компоненты языка ассемблера для работы с мышью в графическом режиме в паскале :
{ есть мышка или нет ? (такое бывает , на нашем старом компе в кабинете информатики =))) ) }
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;
>> с этими процедурами и функциями можно написать целый модуль для мыши в паскале !
Спасибо за информативный пост. Возьму как пример для своей работы.
Но работать с объектно-ориентируемыми языками приятнее в разы.
Даешь деление!
mov eax,-100
cdq
mov ecx,-7
idiv eax, ecx
Спасибо, очень оригинально.
Спасибо, начал изучать ассемблер, очень помогают ваши статьи.
Ой как тяжко то было раньше! Как то хорошо, что сейчас легче языки стали более удобоваримые.