Пересылка данных, размерность операндов - 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 ?
Объяснение кода листинга программы
Список элементов кода:
- Переменные InB и OutB имеют тип данных db (байт).
- Переменные InW и OutW имеют тип данных dw (слово).
- MOVE — это макрос, который выполняет пересылку данных.
- dst и src — это параметры макроса MOVE.
- При наличии условия TYPE(src)-1 выполняется пересылка данных из регистра ax в переменную dst.
- В противном случае (при отсутствии условия TYPE(src)-1) выполняется пересылка данных из регистра al в переменную dst.
- В конце макроса выполняется выход из стека.
- В коде присутствуют следующие вызовы макроса MOVE:
- MOVE DS, CS
- MOVE ES, 0B800h
- MOVE OutB, InB
- MOVE OutW, InW
- Тип данных переменной InB — db (байт).
- Тип данных переменной OutB — db (байт).
- Тип данных переменной InW — dw (слово).
- Тип данных переменной OutW — dw (слово).
- Значение переменной InB не определено.
- Значение переменной OutB не определено.
- Значение переменной InW не определено.
- Значение переменной OutW не определено.
- В коде отсутствуют комментарии, объясняющие назначение и принцип работы макроса MOVE.
- В коде отсутствуют строки, определяющие тело программы (код, не являющийся макросами или процедурами).
- В коде отсутствуют процедуры.
- В коде отсутствуют директивы препроцессора (например, #define или #include).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д