Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Первая команда fid загружает вещественное число xi из памяти в вершину стека сопроцессора. Команда fadd вычисляет сумму значений вершины стека ST(0) и ячейки памяти, содержащей значение Х2. Результат операции сохраняется в вершине стека сопроцессора. Наконец, команда fstp сохраняет значение суммы в переменной FSUM. Вершина стека ST(0) очищается. В следующем примере мы рассмотрим применение команд загрузки, сложения и сохранения для нахождения суммы элементов целочисленного массива из семи элементов. Подобные задачи очень часто приходится решать на практике. Исходный текст программы приведен в листинге 2.20.
Листинг 2.20. Программа нахождения суммы элементов целочисленного массива
;38б
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
data
conTitle DB "Sum of integers in array", 0
mesl DB "Array: ", 0
len_mesl EQU $-mesl
mes2 DB Odh, Oah, "Sum of elements = ", 0
len mes2 EQU $-mes2
charBuf DB " ", 0
len_charBuf DD $-charBuf
iarray DD -9, 3, -6, 2, 11, -5
larray EQU ($-iarray)/4
ISUM DD 0
lpFmt DB "%d", 0
readBuf DB ?
lenReadBuf DD 1
hStdln DD 0
hStdOut DD 0
chrsRead DD 0
chrsWritten DD 0
STD_INP_HNDL DD -10
STD_OUT P_HNDL DD -11
.code
start:
call AllocConsole
test EAX, EAX
jz ex
push offset conTitle
call SetConsoieTitieA
test EAX, EAX
jz ex
call getout_hndl
call getinp_hndl
push EBX
mov EBX, offset mesl
mov ECX, len_mesl
call write_con
pop EBX
mov ESI, offset iarray
mov ECX, larray
show_next:
push ESI
push ECX
push DWORD PTR [ESI]
push offset lpFmt
push offset charBuf
call wsprintf
add ESP, 12
push EBX
mov EBX, offset charBuf
mov ECX, len_charBuf
call write_con
pop EBX
call clear_buf
pop ECX
pop • ESI
add ESI, 4
loop show_next

; нахождение суммы элементов массива
mov
mov ECX, larray
ESI, offset iarray
f init
fild DWORD PTR [ESI]
next:
fiadd DWORD PTR [ESI+4]
add ESI, 4
loop next
fistp DWORD PTR ISUM
fwait
; преобразование суммы в строку символов
push DWORD PTR ISUM
push offset lpFmt
push offset charBuf
call wsprintf
add ESP, 12
; вывод заголовка
push EBX
mov EBX, offset mes2
mov ECX, len_mes2
call write_con
pop EBX
; вывод значения суммы на экран
push ЕВХ
mov . ЕВХ, offset charBuf
mov ECX, len_charBuf
call write_con
pop EBX
call clear_buf
; ожидание ввода с консоли и выход из программы
call read con
ex:
push О
call ExitProcess


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru