Главная страница
Навигация по странице:

  • «Приложение №1»

  • Цель работы изучить шаблон comпрограммы преобразования суммы десятичных чисел, введенных с клавиатуры, в шестнадцатеричную систему исчисления преобразования суммы десятичных чисел, введенных с клавиатуры, в десятичную систему исчисления Ход работы


    Скачать 458.13 Kb.
    НазваниеЦель работы изучить шаблон comпрограммы преобразования суммы десятичных чисел, введенных с клавиатуры, в шестнадцатеричную систему исчисления преобразования суммы десятичных чисел, введенных с клавиатуры, в десятичную систему исчисления Ход работы
    Дата17.02.2022
    Размер458.13 Kb.
    Формат файлаdocx
    Имя файлаlr.docx
    ТипДокументы
    #365748

    Цель работы: изучить шаблон COM-программы преобразования суммы десятичных чисел, введенных с клавиатуры, в шестнадцатеричную систему исчисления; преобразования суммы десятичных чисел, введенных с клавиатуры, в десятичную систему исчисления;

    Ход работы

    Составим программу для преобразования суммы чисел и переведения результата в шестнадцатеричную систему исчисления (код программы представлен в «Приложении 1»).



    Рис. 1 – Результат работы программы

    Составим программу для преобразования суммы чисел и переведения результата в десятичную систему исчисления (код программы представлен в «Приложении 2»).



    Рис. 2 – Результат выполнения программы



    Рис. 3 – Проверка правильности работы программы

    Вывод: провели сборку COM-программ, воспользовавшись командой «tlink /t». Протестировали работу программы, выполняя ввод различных чисел с клавиатуры. Была выполнена проверка правильного преобразования десятичного числа в шестнадцатеричное.


    «Приложение №1»

    .model tiny

    .code

    .286

    org 100h

    start:

    mov dx,offset message1

    mov ah,9

    int 21h

    mov dx,offset buffer

    mov ah,0Ah

    int 21h

    mov dx,offset crlf

    mov ah,9

    int 21h

    ;Перевод числа в ASCII формате из буфера в бинарное число АХ

    xor di,di

    xor ax,ax

    mov cl,blength

    xor ch,ch

    xor bx,bx

    mov si,cx

    mov cl,10

    asc2hex:

    mov bl,byte ptr bcontents[di]

    sub bl,'0'

    jb asc_error

    cmp bl,9

    ja asc_error

    mul cx

    add ax,bx

    inc di

    cmp di,si

    jb asc2hex

    mov per_a,ax

    mov ax,0

    start1:

    mov dx,offset message2

    mov ah,9

    int 21h

    mov dx,offset buffer

    mov ah,0Ah

    int 21h

    mov dx,offset crlf

    mov ah,9

    int 21h

    ;Перевод числа в ASCII формате из буфера в бинарное число АХ

    xor di,di

    xor ax,ax

    mov cl,blength

    xor ch,ch

    xor bx,bx

    mov si,cx

    mov cl,10

    asc2hex1:

    mov bl,byte ptr bcontents[di]

    sub bl,'0'

    jb asc_error

    cmp bl,9

    ja asc_error

    mul cx

    add ax,bx

    inc di

    cmp di,si

    jb asc2hex1

    add ax,per_a

    ;Вывод на экран строки message2

    push ax

    mov ah,9

    mov dx,offset message3

    int 21h

    pop ax

    ;Вывод на экран числа из регистра АХ

    vyvod:

    push ax

    xchg ah,al

    call print_al

    pop ax

    call print_al

    ret

    asc_error:

    mov dx,offset err_msg

    mov ah,9

    int 21h

    ret

    ;Процедура print_al. Выводит на экран число в регистре AL в шестнадцатеричном формате, модифицирует значение регистров AX и DX

    print_al:

    mov dh,al

    and dh,0Fh

    shr al,4

    call print_nibble

    mov al,dh

    print_nibble:

    cmp al,10

    sbb al,69h

    das

    mov dl,al

    mov ah,2

    int 21h

    ret

    message1 db "A= $"

    message2 db "B= $"

    message3 db "A+B= $"

    err_msg db "Error Input"

    crlf db 0Dh,0Ah,'$'

    per_a dw 0

    buffer db 6


    blength db ?

    bcontents:

    end start

    «Приложение №2»

    .model tiny

    .code

    .286

    org 100h

    start:

    mov dx,offset message1

    mov ah,9

    int 21h

    mov dx,offset buffer

    mov ah,0Ah

    int 21h

    mov dx,offset crlf

    mov ah,9

    int 21h

    ;Перевод числа в ASCII формате из буфера в бинарное число АХ

    xor di,di

    xor ax,ax

    mov cl,blength

    xor ch,ch

    xor bx,bx

    mov si,cx

    mov cl,10

    asc2hex:

    mov bl,byte ptr bcontents[di]

    sub bl,'0'

    jb asc_error

    cmp bl,9

    ja asc_error

    mul cx

    add ax,bx

    inc di

    cmp di,si

    jb asc2hex

    mov per_a,ax

    mov ax,0

    start1:

    mov dx,offset message2

    mov ah,9

    int 21h

    mov dx,offset buffer

    mov ah,0Ah

    int 21h

    mov dx,offset crlf

    mov ah,9

    int 21h

    ;Перевод числа в ASCII формате из буфера в бинарное число АХ

    xor di,di

    xor ax,ax

    mov cl,blength

    xor ch,ch

    xor bx,bx

    mov si,cx

    mov cl,10

    asc2hex1:

    mov bl,byte ptr bcontents[di]

    sub bl,'0'

    jb asc_error

    cmp bl,9

    ja asc_error

    mul cx

    add ax,bx

    inc di

    cmp di,si

    jb asc2hex1

    mov per_b,ax

    add ax,per_a

    mov per_x,ax

    ;Вывод на экран строки message2

    push ax

    mov ah,9

    mov dx,offset message3

    int 21h

    pop ax

    ;Вывод на экран числа из регистра АХ

    call print_al

    ret

    asc_error:

    mov dx,offset err_msg

    mov ah,9

    int 21h

    ret

    print_al:; Процедура вывода на экран

    mov cx,10 ; система счисления

    lea si, ascval+4 ; Установка указателя на конец массива ascval

    mov ax, per_x ; Результат х занести в ax

    c20: cmp ax,10 ; Сравнить результат с числом 10

    jb c30 ; Если меньше то преобразовывать не надо

    xor dx,dx ; Очистка регистра dx для команды деления

    div cx ; Делим на 10

    or dl, 30h ; Преобразование остатка к ASCII коду

    mov [si], dl ; Занесение остатка от деления в массив ascval

    dec si ; Перемещение указателя массива на 1 байт влево

    jmp c20 ; Переход на начало для преобразования след. цифры

    c30: or al, 30h ; Если остаток меньше 10, то вывод результата на экран

    mov [si], al ; дисплея командами (см. ниже)

    lea dx, ascval ; Загрузка адреса массива

    mov ah, 9 ; Вызов 9-ой функции MS-DOS

    int 21h

    ret ; Возврат в головную программу из п/программы

    ascval db 5 dup(30h),'$' ;Зарезервировать 5 байт и поместить туда 30h

    message1 db "A= $"

    message2 db "B= $"

    message3 db "A+B= $"

    err_msg db "Error Input"

    crlf db 0Dh,0Ah,'$'

    per_a dw 0

    per_b dw 0


    per_x dw ?

    buffer db 6


    blength db ?

    bcontents:

    end start


    написать администратору сайта