Написание программы преобразования двухбайтового двоичного числа в двоично-десятичное число с учетом знака

Страницы работы

Содержание работы

Цель работы:  Изучение языка программирования ассемблер для процессора Интел 8086.

Задание: Написать программу преобразования двухбайтового двоичного числа в двоично-десятичное число с учетом знака.

Исходный текст программы:

model small                                ;директива модели памяти model с параметром small

.data                                           ;упрощенная директива сегмента данных

chislo dw 10101010101010b       ;инициализация числа 10922

result dw 5 dup(?)                       ;выделение памяти под пятиэлементный массив

znak dw ?                                   ;выделение памяти под вспомогательную переменную znak

.stack 256h                                 ;упрощенная директива для 256-байтного сегмента стека

.code                                          ;упрощенная директива сегмента кода

main proc                                   ;начало процедуры main 

mov ax,@data                             ;инициализация сегментного

mov ds,ax                                   ;регистра ds

Push 1b                                       ;запись в cтек числа 1

Push 1010b                                 ;запись в стек числа 10

Push 1100100b                           ;запись в стек числа 100

Push 1111101000b                      ;запись в стек числа 1000

Push 10011100010000b              ;запись в стек числа 10000

mov bx,0                                    ;инициализация регистра bx

mov si,0                                      ;инициализация регистра si

mov znak,0                                 ;инициализация переменной znak

mov ax,chislo                              ;пересылаем число в регистр ах

rol ax,1                                       ;сдвигаем число на один разряд влево с переносом первого ;разряда в  регистр cf

jnc next                                       ;если cf=0 переходим на метку next

rcr ax,1                                       ;сдвигаем число вправо

neg ax                                                   ;переводим число в дополнительный код

mov znak,1                                 ;пересылаем 1 в переменную znak(1-ччисло отрицательное)

jmp perevod                                ;безусловный переход на метку perevod

next:

rcr ax,1                                       ;сдвигаем число право

perevod:

pop bx                                        ;запись в регистр bx верхнего элемента стека

div bx                                         ;деление вида (ax:dx):=ax/bx, где в ax - частное, в dx - остаток

mov result[si],aх                         ;запись в si-й элемент массива result целой части деления

cmp dx,1010b                             ;если дробная часть меньше или равна 1010, то...

jbe endcicle                                ;...переход к концу программы

mov ax,dx                                   ;запись в ax содержимого dx, т. е. дробной части деления

xor dx,dx                                    ;очистка dx

add si,2                                       ;увеличение si на 2         

jmp perevod                                ;переход к началу цикла

endcicle:

mov ax,4c00h                             ;формирование функции стандартного выхода      

int 21h                                        ;формирование прерывания типа 21h и стандартный выход         

main endp                                   ;конец процедуры main

end main                                     ;конец программы с точкой входа main


Похожие материалы

Информация о работе