6. Выполнение и отладка (DEBUG).
7. Занесение машинного кода программы в ПЗУ (может отсутствовать) Теперь мы посмотрим блок-схему нашей программы, то есть упорядоченные действия.
;ПРОГРАММА ПЕРЕВОДА ДЕСЯТИЧНОГО ЧИСЛА В ;ДВОИЧНУЮ И ШЕСТНАДЦАТЕРИЧНУЮ СИСТЕМЫ ;СЧИСЛЕНИЯ
.MODEL small
.STACK 64
.DATA
;Сегмент данных
;____________________________________________________________________
;Таблица преобразования “цифра – ASCII-код”
org 100h
tabl_ascii db '0123456789abcdef'
;____________________________________________________________________
;Таблица преобразования “ASCII-код - цифра”
org 130h
db 0,1,2,3,4,5,6,7,8,9
org 41h
db 0ah,0bh, 0ch, 0dh, 0eh, 0fh
;____________________________________________________________________
;Резервация и инициализация переменных в памяти
org 150h
x_ascii db 20h dup(?)
t1 db 0dh,0ah,"Введите число и нажмите Enter"
db 0dh, 0ah, "$"
t2 db 0dh,0ah,"Вы ввели число”,0dh,0ah "$"
t3 db 0dh, 0ah, "В двоичной системе оно выглядет так"
db 0dh,0ah,"$"
t4 db 0dh, 0ah, "В шестнадцатеричной так"
db 0dh, 0ah, "$"
buf db 16 dup(?),"$"
t5 db 0dh,0ah, "Будем продолжать процесс? (Y/N)?"
db 0dh,0ah,"$"
;____________________________________________________________________
;Сегмент кодов
.CODE
;Главная процедура
g_k proc
mov ax,@data
mov ds, ax
mov es, ax
d: lea dx, t1
mov ah,09h
int 21h
lea di, x_ascii
call ink
call des_2
push ax
lea dx,t3
mov ah,9h
int 21h
pop ax
call bin_dis
push ax
lea dx,t4
mov ah,9h
int 21h
pop ax
call outhex
lea dx,t5
mov ah,9h
int 21h
mov ah,1h
int 21h
cmp al,"Y"
loope d
cmp al,"y"
loop d
mov ah,4ch
int 21h
g_k endp
ink proc
;Процедура ввода десятичного числа
xor cx,cx
l1:
mov ah,1
int 21h
stosb
inc cx
cmp al,0dh
jnz l1
dec cx
ret
ink endp
dis proc
;Процедура вывода на экран десятичного числа
r1: mov dl,[di]
mov ah,2
int 21h
inc di
loop r1
ret
dis endp
des_2 proc
;Перевод числа(десятичного) в двоичную систему
mov si,10
lea di,x_ascii
sub ax,ax
v1: mul si
mov bp,ax
mov al,[di]
sub al,48
inc di
mov ah,ch
add ax,bp
loop v1
ret
des_2 endp
bin_dis proc
;Процедура вывода на экран двоичного числа
lea di,buf
mov cx,16
mov bx,ax
mov dx,ax
conv:
mov al,ch
shl dx,1
adc al,'0'
stosb
loop conv
mov ah,9h
lea dx,buf
int 21h
mov ax,bx
ret
bin_dis endp
;Процедура перевода числа(двоичного)в шестнадцатеричную
;и вывод его на экран
outhex:
mov ch,al
mov al,ah
mov ah,2
call prnbh
mov al,ch
prnbh:
mov dh,al
shr al,1
shr al,1
shr al,1
shr al,1
call prnd
mov al,dh
and al,15
prnd:
or al,48
cmp al,58
jc prnc
add al,7
prnc:
mov dl,al
int 33
ret
end g_k
Примечания:
Ниже приведины команды использовались в программе:
sub – двоичное вычитание. Вычитается из первого операнда содержимое второго операнда
Мнемоника: sub <операнд 1>,<операнд 2>
call – вызов процедуры. Передает управление процедуре адрес которой задан операндом, после завершения процедуры, выполнение продолжается командой следующей за командой call
Мнемоника: call <имя процедуры>
ret – возврат к процедуре
shr – сдвинуть логически вправо
xor – исключающее ИЛИ
Мнемоника: xor <операнд 1>,<операнд 2>
lea – загрузить ЕА
Мнемоника: lea reg,<операнд>
push – включить в stack
Мнемоника: push <операнд>
pop – извлечь из stack
Мнемоника: pop <операнд>
mov – переслать
Мнемоника: mov <приемник>,<источник>
inc – увеличение на 1
Мнемоника: inc <операнд>
dec – уменьшение на 1
Мнемоника: dec <операнд>
stosb – пересылает соединения регистра al или ax на который указывает регистр di
loop – команда организации цикла со счетчиком, также короткие переходы (127б) команда уменьшает значение счетчика cx, без изменения каких-либо флагов, если соединение cx >0, то осуществляется переход на заданную метку, в противном случае цикл завершается.
Мнемоника: loop <метка>
.CODE – открывает сегмент кода
.DATA -- открывает сегмент данных
.STACK N – определяет сегмент stack(а); дерективы закрытия сегментов в этом случае не используются; N – показывает размер stack(a) в байтах
Примечание: при использовании таких деректив регистр ds инициализируется следующим образом: mov ax,@data
mov ds,ax
assume в этом случае не используется
Список литературы1. "Я зык ассемблера для IBM PC и программирования" Высшая школа 1992.
2. "Персональный компьютер Фирмы IBM и операционная система MS-DOS" Радио и связь 1991.
3. Илюшечкин В.Н., Костин А.Е, Хохлов М.М. “Системное программное обеспечение“, М ., “Высшая школа”, 1987 г.
4. Нортон П., Соухэ Д. “Язык ассемблера для IBM PC”, М., Издательство “Компьютер”,1993
... 100 10 1001=(9)10 100 11,1=(3,5)10 00 110 00 100 001 100 000 100 10 0 10 00 Таким образом, выполнение арифметических операций в двоичной системе счисления достаточно просто. Особенно просто выполнять операции сложения, вычитания и умножения. Благодоря этому, применение двоичной системы в вычислительных ...
... полезно учителю при подготовке рассказа на уроке. В данной публикации сделана попытка выделить тот самый минимум, который ученику необходимо включить в свой ответ на экзамене. Примечания для учеников При ответе надо быть готовым к дополнительным вопросам об обосновании тех или иных утверждений. Например, каковы максимальное и минимальное значения 8-битного целого числа со знаком и почему их ...
... раза. В силу специфичности информации схемы определения количества информации, связанные с ее содержательной стороной, оказываются не универсальными. Универсальным оказывается алфавитный подход к измерению количества информации. В этом подходе сообщение, представленное в какой-либо знаковой системе, рассматривается как совокупность сообщений о том, что заданная позиция в последовательности ...
... и дробных разрядов. Так, например, сокращенной записи числа 737.25 соответствует его значение, вычисленное согласно равенству (1. 1): 737.25 =7 · 102 + 3 · 101 + 7 · 100 + 2 · 10-1 + 5 · 10-1. В двоичной системе счисления для представления чисел используются две цифры: 0 и 1. Действуя согласно с (1.1), значение двоичного числа, например, 11110010. 0110 можно представить в следующем виде: ...
0 комментариев