- •Машинно-зависимые языки программирования указатели на страницы ответов
- •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.
Машинно-зависимые языки программирования указатели на страницы ответов
Источники:
1. Презентация лекций преподавателя.
2. Искусство программирования на ASM — Голубь Н. Г.
Указатели:
1. Определения данных в программах на Ассемблере.
DB, DW, DD, DQ, DT, DUP
[1] слайды 51-54.
[2] стр. 37-38.
2. Целочисленные арифметические операции.
ADD, ADC, INC, SUB, SBB, DEC, MUL, IMUL, DIV, IDIV, CBW, CWD, NEG, NOT, XOR, AND, OR
[1] слайды 55-85.
[2] стр. 81-108.
3. Арифметические операции в форматах bcd и ascii.
[1] слайды 193-210.
ASCII
ADDITION
XOR AX, AX ; очистка AX
MOV AL, '2' ; AX = 0x0032h
ADD AL, '7' ; AX = 0x0032h + 0x0037h = 0x0069h
AAA ; AX = 0x0009h
OR AL, 30H ; AX = 0x0039h = '9'
LEA DI, NUM1 + 4 ; загружаем адрес предпоследнего символа
STOSB ; из AL в NUM1 + 4; DI << 1
SUBTRACTION
Xor ax, ax ; очистка ax
MOV AL, '9' ; AX = 0x0039h
SUB AL, '6' ; AX = 0x0039h - 0x0036h = 0x0003h
AAS ; AX = 0x0003h
OR AL, 30H ; AX = 0x0033h = '3'
MOV AL, '4' ; AX = 0034h
SUB AL, '8' ; AX = 00FCh, AF = 1
AAS ; AX = FF06h, AF = 1
DIVISION
MOV AX, 0801H
MOV CL, 09H
AAD ; AL = 51H
DIV CL ; AL = 09H
OR AL, 30H ; AL = 39H
MULTIPLICATION
MOV AL, 3
MOV CL, 9
MUL CL ; AX = 27
AAM ; AX = 0207H
OR AX, 3030H ; AX = 3237H
STD ; направление: справа налево
LEA DI, NUM1 + 4 ; загружаем адрес предпоследнего символа (последний — $)
STOSB ; из AL в NUM1 + 4; DI << 1
XCHG AH, AL
STOSB ; из AL в NUM1 + 4; DI << 1
BCD
ADDITION
XOR AH, AH
MOV AL, 71H ; AL = 71h
ADD AL, 44H ; AL = B5h
DAA ; AL = 15h, CF = 1
ADC AH, 0 ; AX = 0115H
SUBTRACTION
XOR AH, AH
MOV AL, 71H ; AL = 71h
SUB AL, 44H ; AL = 2Dh
DAS ; AL = 27h
1. При сложении двоично-десятичных чисел каждый раз, когда происходит перенос бита в старший полубайт, необходимо к полубайту, от которого произошёл перенос, добавить корректирующее значение 0110.
2. При сложении двоично-десятичных чисел каждый раз, когда встречается недопустимая для полубайта комбинация (число, большее 9), необходимо к каждой недопустимой комбинации добавить корректирующее значение 0110 с разрешением переноса в старшие полубайты.
3. При вычитании двоично-десятичных чисел, для каждого полубайта, получившего заём из старшего полубайта, необходимо провести коррекцию, отняв значение 0110.
4. Преобразование ASCII <—> двоичный формат.
[1] слайды 159-165.
[2] стр. 319-341.
ASCII TO UNSIGNED WORD
ASCII_TO_BIN PROC NEAR
MOV CX, 10
LEA SI, NUM1 - 1
MOV BX, 5
MOV MULT10, 1
MOV NUM2, 0
LP_ATB:
MOV AL, [SI + BX]
AND AX, 000FH
MUL WORD PTR MULT10
ADD NUM2, AX
MOV AX, MULT10
MUL CX
MOV MULT10, AX
DEC BX
JNZ LP_ATB
RET
ASCII_TO_BIN ENDP
UNSIGNED WORD TO ASCII
BIN_TO_ASCII PROC NEAR
MOV CX, 10
LEA SI, NUM1 + 4
MOV AX, NUM2
LP_BTA:
CMP AX, 10
JB NXT
XOR DX, DX
DIV CX
OR DL, 30H
MOV [SI], DL
DEC SI
JMP LP_BTA
NXT:
OR AL, 30H
MOV [SI], AL
RET
BIN_TO_ASCII ENDP