Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler 01.doc
Скачиваний:
19
Добавлен:
09.11.2019
Размер:
727.04 Кб
Скачать

3. Умножение в ascii-формате.

3.1. Составьте программу ascaam.asm в текстовом редакторе NORTON в СОМ-формате:

MAIN PROC NEAR

MOV AL,35H

MOV CL,39H

AND CL,0FH ;Преобраз. CL в 09

AND AL,0FH ;Преобраз. AL в 05

MUL CL ;Умножить AL на CL

AAM ;Преобраз. в распак. дес.

OR AX,3030H ;Преобраз. в ASCII-ф-т

RET

MAIN ENDP

Команда AND очищает шестнадцатиричные цифры в ASCII-формате от троек, что необходимо для получения распакованного десятичного представления чисел. Команда MUL умножает распакованные числа и генерирует 002DH (45) в регистре АХ. Команда ААМ делит содержимое регистра AL на 0АН (10). Частное 04 записывается в регистр АН, а остаток - 05 в регистр AL. Команда OR преобразует затем распакованное десятичное число в ASCII-формат.

3.2. Выполнить ассемблирование и компоновку программы. Записать листинг программы в отчет. Вызвать отладчик DEBUG для выполнения программы.

3.3. Выполнить трассировку программы внимательно определяя изменения содержимого регистров AL и АН. Выводы о работе записать в отчет.

3.4. Запишите в текстовом редакторе NORTON программу ascmul.asm в COM-формате:

.286

TITLE ASCMUL (COM) Умножение ASCII-чисел

CODESG SEGMENT PARA 'Code'

ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG

ORG 100H ;Начало в конце PSP

BEGIN: JMP SHORT MAIN ;Обход через данные

;-------------------------------------------------------

MULTCND DB '3783' ;Элементы данных

MULTPLR DB '5'

PRODUCT DB 5 DUP(0)

;--------------------------------------------------------

MAIN PROC NEAR

MOV CX,04 ;4 цикла

LEA SI,MULTCND+3

LEA DI,PRODUCT+4

AND MULTPLR,0FH ;Удал. ASCII-тройку

A20: MOV AL,[SI] ;Загр. ASCII-символ

AND AL,0FH ;Удал. ASCII-тройку

MUL MULTPLR ;Умножить

AAM ;Корр. для ASCII

ADD AL,[DI] ;Сложить с записанным произведением

AAA

MOV [DI],AL

DEC DI

MOV [DI],AH ;Записать перенос

DEC SI

LOOP A20 ;Циклиться 4 раза

RET

MAIN ENDP

CODESG ENDS

END BEGIN

Программа демонстрирует умножение четырехбайтового множимого на однобайтовый множитель. Так как команда ААМ может иметь дело только с однобайтовыми числами, то в программе организован цикл, который обрабатывает байты справа налево. Окончательный результат умножения в данном примере - 0108090105.

3.5. Выполнить ассемблирование и компоновку программы. Записать листинг программы в отчет. Вызвать отладчик DEBUG для выполнения программы.

3.6. Выполнить трассировку программы, проверяя сегмент кодов после каждого цикла программы (D CS:100). Внимательно отслеживать содержимое регистров SI, DI, AL, AH, CX. Выводы о работе программы записать в отчет.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]