Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЗЯП. Указатели на страницы ответов.rtf
Скачиваний:
24
Добавлен:
30.11.2021
Размер:
7.65 Mб
Скачать

Машинно-зависимые языки программирования указатели на страницы ответов

Источники:

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