русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

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


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

Директиви умовного ассемблірованія. Умова в Асемблері

Приклад: пПроанализировать масив даних з 16 елементів. Підрахувати і вивести на екран кількість елементів, які за значенням знаходяться в середині діапазону від 32 до 128.

Текст програми:

.686 ; директива визначення типу мікропроцесора
.model flat,stdcall ; завдання лінійної моделі пам'яті
option casemap:none ; відміну малих і великих літер
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 ; директива визначення дані
_c dd 40
sum dd 0
op1 dd 32 ; межі
op2 dd 128 ; межі
frmt db "%d",0
buf db 30 dup(?)
stdout DWORD ?
stdin DWORD ?
cRead dd ?
temp dd ?
mas1 dd 41 dup(0)

st1 db "Vvesty masiv: "
st2 db "Висновок кількості елементів у межах (32,128) масиву! З", 0
st3 db 10 dup(0)
ifmt db "кількість = %d",0

.code ; директива початку коду програми
_start:
lea esi, mas1 ; загрузка адреси початку масиву
mov ecx,_c
m1:
mov ebx,ecx
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov stdout,eax
invoke GetStdHandle,STD_INPUT_HANDLE
mov stdin,eax
invoke WriteConsoleA,stdout,ADDR st1,14,NULL,NULL ; VIVOD ST1
invoke ReadConsole,stdin,ADDR buf,20
ADDR cRead,NULL ; читання числа як символ
invoke crt_atoi,ADDR buf ; перетворити символ в число
mov [esi],eax
add esi,4
mov ecx,ebx
loop m1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

mov ecx,_c
lea esi, mas1 ; загрузка адреси початку масиву
mov eax [esi] ; загрузка числа
m3:
.IF(eax>op1)&&(eax<op2) ; складне умова
inc sum
add esi,4 ; розрахунок адреса нового числа
mov eax[esi]
loop m3

.ELSE ; інакше
add esi,4 ; розрахунок адреса нового числа
mov eax[esi]
loop m3 ; перейти, якщо ecx не дорівнює 0

.ENDIF ; закінчення директиви високого рівня

mov ebx,sum

invoke wsprintf \
ADDR st3 \
ADDR ifmt \
ebx
invoke MessageBox \
NULL \
addr st3 \
addr st2 \
MB_OK
invoke ExitProcess,0
ret
end _start ; кінець програми

Результат роботи програми:



Переглядів: 4535

Повернутися взміст


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн