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

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


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





Возьмем массив из 7 целых чисел и напишем программный код, в качестве каркаса используя пример суммирования двух целых чисел. Фрагмент программного кода приведен в листинге 2.15.
Листинг 2.15. Фрагмент программного кода, выполняющего суммирование элементов целочисленного массива
,386
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",
mes DB "The result of summation of
len mes EQU $-mes
charBuf DB ", 0
len charBuf DD $-charBuf
iarray DD --90, 34, -67, 32, 11, -5, 41
len iArray 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 OUTP HNDL DD -11
. code
start:
call AiiocConsoie
test EAX, EAX
jz ex
push offset conTitle
call SetConsoleTitleA
test EAX, EAX
jz ex
call getout hndl
call getinp_hndl
; вычисление суммы чисел, входящих в массив
lea ESI, iarray ; помещаем адрес первого элемента массива в ESI
mov ЕСХ, len_iArray помещает размер массива в ЕСХ
next:
mov АХ, WORD PTR [ESI]
add WORD PTR ISUM, AX сумма младших 16-ти разрядов
mov AX, WORD PTR [ESI+2]
adc WORD PTR ISUM+2, AX сумма старших 16-ти разрядов
add ESI, 4 адрес следующего элемент массива
loop next
; преобразование результата в строку
push DWORD PTR ISUM
push offset lpFmt
push offset charBuf
call wsprintf
add ESP, 12
push EBX
mov ЕВХ, offset mes
mov ЕСХ, len_mes
call write_con
pop EBX
; вывод результата в окно приложения
push - ЕВХ
mov ЕВХ, offset charBuf
mov ЕСХ, len_charBuf
call write_con
pop EBX
; ожидание нажатия клавиши и выход
call read_con
ex:
push 0
call ExitProcess


 
 
 

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