Макрос обнуления одного или нескольких регистров - Assembler
Формулировка задачи:
Поставили задачу на изучение макроопределений.
1)Описать в виде макроса NULL RS (RS — это <R1, R2, ..., Rk>, где Ri — имена ре-
гистров общего назначения, k ≥ 0) обнуление регистров Ri.
2)Выписать макрорасширения для макрокоманд NULL <AL, BX, SI> и NULL <>.
Если я правильно понял то вид макроса -
Листинг программы
- NULL_RS macro RS ; где RS будет принимать только значение одного из регистров
- cmp eax,RS
- je xoreax
- cmp ebx,RS
- je xorebx
- cmp ecx,RS
- je xorecx
- cmp edx,RS
- je xoredx
- xoreax:
- xor eax,eax
- jmp end_
- xorebx:
- xor ebx,ebx
- jmp end_
- xorecx:
- xor ecx,ecx
- jmp end_
- xoredx:
- xor edx,edx
- jmp end_
- end_:
- ENDM
Где при вызове макроса
NULL_RS edx ; или NULL_RS <edx> - это ведь одно и то же? ;очистится на выбор один из регистров общего назначения. [ Y/N ?] Или при вызове NULL_RS я должен просто очистить все регистры?
Среда выполнения Masm32.
И хочу спросить насчёт 2-ого задания ("Макрорасширения") , если я правильно понял - замена телом макроса - называется макрорасширением.
Т.е при ассемблирования команды NULL <AL, BX, SI> - нужно будет очистить только указанные регистры AL,BX и SI - ?
А при вызове NULL <> - очистить все регистры? Решение задачи: «Макрос обнуления одного или нескольких регистров»
textual
Листинг программы
- NULL macro RS
- mov RS, 0
- endm
Объяснение кода листинга программы
- Создается макрос обнуления регистра RS.
- В первой строке кода макроса mov RS, 0; происходит перемещение нуля в регистр RS, что приводит к его обнулению.
- Макрос завершается, и выполнение кода продолжается после строки, в которой был вызван макрос.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д