Помощь - Поиск - Пользователи - Календарь
Полная версия: Массив целых цисел
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Assembler
John
Привет всем!! Вот в четверг начали изучать в инсте ассемблер и сразу вот такое задание:

Из массива целых чисел, определенных в области данных программы в формате слова, найти минимальное и максимальное значение. Сохранить их разность как результат в области данных программы. Пояснить особенности выполнения машинных команд в отладчике.

Помогите пожалуйста я ничего не понимаю в этом ассемблере,, и еще можете подсказать книгу с доступным методом изложения материала!!
мисс_граффити
Я бы посоветовала учебник для вузов...
Юров В.И. Assembler
Изд-во Питер
у меня 2006 года, может, уже и 2007 есть.
xds
;самая простая модель памяти - один сегмент кода и один сегмент данных
.model small

;устанавливаем размер стека
.stack 2048

;----- сегмент данных -----
.data
;массив
a dw 4, 4, 2, -5, 6, -23, 45, 35, 5, -11, 17
;константа N = количество элементов в массиве
N equ ($ - a) / 2

;сюда сохраним разность максимума и минимума
result dw ?

;----- сегмент кода -----
.code
;метка entry - точка входа в программу, с нее начинается выполнение
;какую метку считать точкой входа указывается в директиве end в конце модуля
entry:
;инициализация сегмента данных
mov ax,@data
mov ds,ax

;поиск минимума и максимума
lea si,a ;si = адрес (смещение) массива
cld

lodsw ;ax = первый элемент массива
mov bx,ax ;в bx будет минимум, для начала - первый
mov dx,ax ;в dx будет максимум, для начала - первый

mov cx,N ;цикл на N интераций
minmax:
lodsw ;ax = очередной элемент массива
cmp ax,bx ;поиск минимума: если ax < bx, то bx = ax
jge minmax1
mov bx,ax
minmax1:
cmp ax,dx ;поиск максимума: если ax > dx, то dx = ax
jle minmax2
mov dx,ax
minmax2:
loop minmax ;повторять с метки minmax N раз

sub dx,bx ;dx = dx - bx = максимум - минимум
mov result,dx ;result = dx

mov ax,4C00h ;выход из программы - вызов функции DOS API
int 21h

;директива end указывает конец модуля и точку входа,
;если это основной (или единственный в программе) модуль
end entry
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.