русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Программа: Сложение дробных чисел в Ассембере. Вывод на консоль Assembler и в MessageBox

Задание:

ввести 2 дробных числа и сложить их и вывести на консоль и в MessageBox.

 

.686; Директива определения типа микропроцессора
. Model flat, stdcall; задачи линейной модели памяти
; И соглашения ОС Windows
option casemap: none; отличие малых и больших букв

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\fpu.inc
include \masm32\include\msvcrt.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\fpu.lib


include \ masm32 \ include \ windows.inc
include \ masm32 \ include \ kernel32.inc
include \ masm32 \ include \ fpu.inc
include \ masm32 \ include \ user32.inc
include \ masm32 \ include \ msvcrt.inc

includelib \ masm32 \ lib \ user32.lib
includelib \ masm32 \ lib \ kernel32.lib
includelib \ masm32 \ lib \ msvcrt.lib
includelib \ masm32 \ lib \ fpu.lib

. Data ;директива определения данных
frmt db "% d",0
buf db 30 dup (0)
buf2 db 20 dup (0)
stdout DWORD?
stdin DWORD?
const dd 10
temp1 dd 0.0
temp2 dd 0.5
temp3 dd 0.5
temp4 dd 0.5
identif1 dd 1
identif2 dd 1

st1 db "Vvedyte a",0
st2 db "Vvedyte b",0
st3 db "Результат вычисления a + b",
st4 db "a + b ="

. Code; директива начала кода
_start:

invoke GetStdHandle,STD_OUTPUT_HANDLE
mov stdout,eax
invoke GetStdHandle,STD_INPUT_HANDLE
mov stdin,eax
invoke WriteConsoleA, stdout, ADDR st1, 11, NULL,NULL; VIVOD ST1
invoke ReadConsole, stdin, ADDR buf, 20, ADDR cRead,ULL ; чтения числа как символ
invoke crt_atoi, ADDR buf ; преобразовать символ в число
mov temp1, eax

lea edi, buf
mov ecx, 30
m1:
mov al, '.'
mov bl, [edi]
xor al, bl
jz m2
inc edi
loop m1
m2:
lea esi, buf2
mov ecx, 20
m3:
inc edi
mov ebx, [edi]
mov [esi], ebx
inc esi
loop m3

invoke crt_atoi, ADDR buf2 ;преобразовать символ в число
mov temp2, eax

id1:
mov eax, identif1
mov ebx, const
mul ebx
SHL edx, 16; делаем сдвиг на 16
mov dx, ax
mov identif1, edx
mov ecx, temp2
sub ecx, edx
jc id_end1
jmp id1
id_end1:

 

invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov stdin, eax
invoke WriteConsoleA, stdout, ADDR st2, 11, NULL, NULL; VIVOD ST1
invoke ReadConsole, stdin, ADDR buf, 20, ADDR cRead, NULL; чтения числа как символ
invoke crt_atoi, ADDR buf; преобразовать символ в число
mov temp3, eax

lea edi, buf
mov ecx, 30
m4:
mov al, '.'
mov bl, [edi]
xor al, bl
jz m5
inc edi
loop m4
m5:
lea esi, buf2
mov ecx, 20
m6:
inc edi
mov ebx, [edi]
mov [esi], ebx
inc esi
loop m6

invoke crt_atoi, ADDR buf2; преобразовать символ в число
mov temp4, eax

id2:
mov eax, identif2
mov ebx, const
mul ebx
SHL edx, 16;делаем сдвиг на 16
mov dx, ax
mov identif2, edx
mov ecx, temp4
sub ecx, edx
jc id_end2
jmp id2

id_end2:

finit
fild temp1
fiadd temp3

fild temp2
fidiv identif1
fadd st (0), st (1)
fild temp4
fidiv identif2
fadd st (0), st (1)

invoke FpuFLtoA, 0, 10, ADDR st4, SRC1_FPU or SRC2_DIMM
invoke MessageBox, NULL, addr st4, addr st3, MB_OK
invoke ExitProcess, NULL ;возврат управления Windows
; И освобождения ресурсов
end _start; директива окончания программы с именем start

 

Результат работы:

Просмотров: 12373

Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.