- •Машинно-зависимые языки программирования указатели на страницы ответов
- •1. Определения данных в программах на Ассемблере.
- •2. Целочисленные арифметические операции.
- •3. Арифметические операции в форматах bcd и ascii.
- •Xor ax, ax ; очистка ax
- •5. Сравнить программы exe и com.
- •6. Загрузка exe и com программ.
- •7. Формат exe-программы.
- •8. Использование сопроцессора (fpu).
- •9. Обработка массивов.
- •10. Обработка строк.
- •11. Машинное представление команд.
- •12. Структура процессора x86.
- •13. Формирование адреса, сегменты.
- •14. Формат программ на языке Ассемблера.
- •15. Команды условных и безусловных переходов.
- •16. Связь asm с Си и Pascal.
14. Формат программ на языке Ассемблера.
[1] слайды 240-259.
[2] стр. 313-316.
1. Инструкция процессора.
[метка:] мнемоника [операнды] [; комментарий]
LBL: MOV AX, 3 ; AX = 3
2. Директивы ассемблера (для компилятора).
.MODEL, .DATA, .CODE, .STACK
ASSUME CS: CODESG, DS: DATASG, SS: STACKSG
EQU
Компиляция — трансляция программы, составленной на исходном языке. На этапе трансляции решается несколько задач:
— перевод команд ассемблера в соответствующие машинные команды;
— построение таблицы символов;
— расширение макросов;
— формирование файла листинга и объектного модуля.
Компоновка — преобразование кода и данных объектных файлов в их перемещаемое выполняемое отображение. После этого операционная система может загрузить такой файл в память и выполнить его.
15. Команды условных и безусловных переходов.
[1] слайды 86-99.
[2] стр. 183-199.
Команды безусловной передачи управления:
JMP — Безусловная передача управления;
CALL — Вызов процедуры;
RET — Возврат из процедуры.
Команды условной передачи управления:
cmp X1, X2
Беззнаковые данные (ZF, CF, AF):
JE/JZ — равно.
JNE/JNZ — не равно.
JA/JNBE — больше.
JAE/JNB — больше или равно.
JB/JNAE — меньше.
JBE/JNA — меньше или равно.
Знаковые данные (ZF, SF, OF):
JE/JZ — равно.
JNE/JNZ — не равно.
JG/JNLE — больше.
JGE/JNL — больше или равно.
JL/JNGE — меньше.
JLE/JNG — меньше или равно.
Специальные проверки:
JS — если есть знак.
JC — если есть перенос.
JO — если есть переполнение.
JP — если есть четное число.
JCXZ — если CX равен нулю.
16. Связь asm с Си и Pascal.
[1] слайды 114-129.
PASCAL
Параметры в стек передаются слева направо. Первым в стек помещается ПЕРВЫЙ параметр, последним — ПОСЛЕДНИЙ.
По окончании работы ВЫЗЫВАЕМАЯ процедура должна очистить стек.
Процедура ASM.
PUSH BP
MOV BP, SP
MOV AX, [BP + 8]
ADD AX, [BP + 6]
ADD AX, [BP + 4]
POP BP
RET 6 ; отбрасывание 6-ти байтов параметра
Аналогичный вариант.
ARG i:WORD, j:WORD, k:WORD=argLen RETURNS x: WORD
MOV AX, i
ADD AX, j
ADD AX, k
MOV X, AX
POP BP
RET argLen
Стек:
0 – BP
2 – IP
4 – K
6 – J
8 – I
C/C++
Параметры в стек передаются справа налево. Первым в стек помещается ПОСЛЕДНИЙ параметр, последним — ПЕРВЫЙ.
По окончании работы очистить стек должна ВЫЗЫВАЮЩАЯ процедура.
Процедура ASM.
PUSH BP
MOV BP, SP
I EQU [BP + 6]
J EQU [BP + 8]
K EQU [BP + 10]
; DOING SMTH
POP BP
RET
Стек (FAR-вызов):
0 – BP
2 – CS
4 – IP
6 – I
8 – J
10 – K