Привет всем!! Вот в четверг начали изучать в инсте ассемблер и сразу вот такое задание:
Из массива целых чисел, определенных в области данных программы в формате слова, найти минимальное и максимальное значение. Сохранить их разность как результат в области данных программы. Пояснить особенности выполнения машинных команд в отладчике.
Помогите пожалуйста я ничего не понимаю в этом ассемблере,, и еще можете подсказать книгу с доступным методом изложения материала!!
мисс_граффити
3.11.2007 5:00
Я бы посоветовала учебник для вузов... Юров В.И. Assembler Изд-во Питер у меня 2006 года, может, уже и 2007 есть.
xds
3.11.2007 21:57
;самая простая модель памяти - один сегмент кода и один сегмент данных .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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.