Нужен макрос вывода на экран - Assembler
Формулировка задачи:
Здравствуйте, помогите пожалуйста написать макрос, для вывода на экран определенных участков сегмента данных.
Программа обрабатывает 2 массива двойных слов и находит элементы с нечетным паритетом, перезаписывает их и фиксирует их логический адрес (смещение) в DS.
Мне нужно вывести только элементы с нечетным паритетом и их адреса, помогите пожалуйста это реализовать?
.286 Name Proga ; описание констант ; описание переменных Data segment x1 dd 87654321h,12345678h,98765432h,87654321h ; входной массив max1 label word len1 = (offset max1 - offset x1)/type x1 Y1 dd len1 dup (0) ; выходной массив F1 dw len1 dup (0) ; переменная для фиксации мес[SPOILER][/SPOILER]тополжения X2 dd 12345678h,23456789h,98765432h,87654321h,22345678h,22456789h,98762432h,85654321h ; входной массив max2 label word len2 = (offset max2 - offset x2)/type x2 Y2 dd len2 dup (0) F2 dw len2 dup (0) Data ends Stack SEGMENT DW 32 dup(?) StkTOp LABEL word Stack ends Code SEGMENT ASSUME CS: Code, DS: Data, ES: Data, SS: Stack ; Здесь описываются подпрограммы Vybor proc push bp mov bp, sp mov cx, [bp + 4] ; счетчик. кол-во чисел во входном массиве. mov bx, [bp + 6] ; адрес фиксации местоположения mov di, [bp + 8] ; адрес выходного массива mov si, [bp + 10] ; адрес входного массива M1: mov ax, [si+2] ; загружаем в регистр АХ старшее слово mov dx, [si] ; загружаем в регистр DX младшее слово XOR ax, dx XOR al,ah JPE M2 ; если четный паритет на М2 mov ax, [si+2] ;перезаписываем старшее слово mov [di+2], ax ; производим выборку старшего слова mov [di], dx ; производим выборку младшего слова mov [bx], si ; фиксируем местоположение add di, 4 ; модифицируем адрес выборки add bx, 2 ; модифицируем адрес местоположения M2: add si, type x1 ; переходим к следующему числу dec cx ; уменьшаем цикл на 1 JNZ M1 ; если СХ не равен нулю тогда повторяем pop bp ret 8 Vybor endp ; Основная программа Start: mov AX, Data mov DS, AX mov ES, AX mov Ax, Stack mov SS, AX mov SP, StkTop lea ax, X1 ; передача параметров через стек push ax lea ax, Y1 push ax lea ax, F1 push ax mov ax, len1 push ax call Vybor ; вызываем процедуру lea ax, X2 push ax lea ax, Y2 push ax lea ax, F2 push ax mov ax, len2 push ax call Vybor code ends end start
Решение задачи: «Нужен макрос вывода на экран»
textual
Листинг программы
and ax, 0f00h