Нужен макрос вывода на экран - 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

Оцени полезность:

11   голосов , оценка 4.455 из 5
Похожие ответы