Доброго времени суток. Так как я, откровенно, не силен в Эссемблере, прошу проверить, то что я написал и по возможности указать на ошибки. Вот само задание: Вот собственно технические требования, записанные с точностью, с его слов. Текст программы: Написать макрокоманду для выборки из некоторого массива слов со знаком всех элементов больших одного значения, но меньших другого. С помощью этой макрокоманды обработать два массива, выбирая из 1-го элементы большие 1000, но меньшие 2000, а из 2-го - большие (-5000), но меньшие 5000
| Код | Name Program min1 = 1000 ; промежуток от 1000 до 2000 max1 = 2000 min2 = -5000 ; промежуток от -5000 до 5000 max2 = 5000
;Описание переменных Data segment x1 dw 4B0h dw 8520h dw 3EDh dw 7D1h dw 384h dw 601h Y1 dw 6 Dup(?) X1 dw 8300h dw 1F4h dw 0F448h dw 13ECh dw 0EC14h dw 0D05h Y2 dw 6 dup(?) Data ends
Stack SEGMENT DW 16 dup(?) StkTOp LABEL word Stack ends
Code SEGMENT ASSUME CS: Code, DS: Data, ES: Data, SS: Stack abc macro X, Y, N, min, max ; x - входной массив. у - выходной массив. n - кол-во чисел во входном массиве. min, max - промежуток для выборки local M1, M2 mov cx, N ; кол-во чисел lea si, X ; адрес массива чисел lea di, Y ; адрес выходного массива M1: mov ax, [si] ; загружаем первое число cmp ax, min ; сравниваем JL M2 ; если меньше то идем на М2 cmp ax, max ; сравниваем JG M2 ; если больше идем на M2 mov [di], ax ; выборка числа add di, type Y ; переходим на другое число M2: add si, type X ; переходим на следующее число dec cx ; цикл JNZ M1 endm
; Основная программа Start: mov AX, Data mov DS, AX mov ES, AX mov Ax, Stack mov SS, AX mov SP, offset StkTop abc X1, Y1, 6, min1, max1 abc X2, Y2, 6, min2, max2 code ends end start
|
|