Пересылка данных, размерность операндов - Assembler

Узнай цену своей работы

Формулировка задачи:

Задание такое: Реализовать модуль, подключение которого позволяет производить одной командой следующие пересылки данных: 1) непосредственный операнд в любой регистр (в том числе сегментный) 2) m8 -> m8 3) m16 -> m16 4) r8 -> r8 (r8 - один из байтов любого регистра, а не только общего назначения) и тут возникает такая проблема, например при реализации первого пункта, нам нужно взять любой операнд любой размерности и запихнуть его в регистр, но сделать это можно если операнд будет одной размерности с регистром, а значит нам нужно преобразовать размерность операнда или положить его только в часть регистра а остальную занулить, вопрос в том как проверить размерность операнда чтобы понять нужно ли его преобразовывать во что-то или нет?

Решение задачи: «Пересылка данных, размерность операндов»

textual
Листинг программы
MOVE    MACRO   dst, src
    push    ax
IF  TYPE(src)-1
    mov ax, src
    mov dst, ax
ELSE
    mov al, src
    mov dst, al
ENDIF
    pop ax
ENDM
 
; ...
 
    MOVE    DS,CS
    MOVE    ES,0B800h
    MOVE    OutB,InB
    MOVE    OutW,InW
 
; ...
 
InB db  ?
OutB    db  ?
InW dw  ?
OutW    dw  ?

Объяснение кода листинга программы

Список элементов кода:

  1. Переменные InB и OutB имеют тип данных db (байт).
  2. Переменные InW и OutW имеют тип данных dw (слово).
  3. MOVE — это макрос, который выполняет пересылку данных.
  4. dst и src — это параметры макроса MOVE.
  5. При наличии условия TYPE(src)-1 выполняется пересылка данных из регистра ax в переменную dst.
  6. В противном случае (при отсутствии условия TYPE(src)-1) выполняется пересылка данных из регистра al в переменную dst.
  7. В конце макроса выполняется выход из стека.
  8. В коде присутствуют следующие вызовы макроса MOVE:
    • MOVE DS, CS
    • MOVE ES, 0B800h
    • MOVE OutB, InB
    • MOVE OutW, InW
  9. Тип данных переменной InB — db (байт).
  10. Тип данных переменной OutB — db (байт).
  11. Тип данных переменной InW — dw (слово).
  12. Тип данных переменной OutW — dw (слово).
  13. Значение переменной InB не определено.
  14. Значение переменной OutB не определено.
  15. Значение переменной InW не определено.
  16. Значение переменной OutW не определено.
  17. В коде отсутствуют комментарии, объясняющие назначение и принцип работы макроса MOVE.
  18. В коде отсутствуют строки, определяющие тело программы (код, не являющийся макросами или процедурами).
  19. В коде отсутствуют процедуры.
  20. В коде отсутствуют директивы препроцессора (например, #define или #include).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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