2. Разработка текстапрограмм.
3. Ввод текста вкомпьютер. Текст программы в мнемокодах вводится в ЭВМ при помощи любоготекстового редактора. Так же при этом создает ся текстовый Файл с расширением*.ASM .
4. Компиляция илиассемблирование. Осуществляется преобразование текстового Файла с расширением*.ASM в объектный Файл, содержащийпрограмму в машинном коде с расширением *.OBJ . Так же на этом этапе может быть создан листингпрограммы. Файл с расширением *.LST,в котором содержится основная информация о программе, а так же Файлперекрёстных ссылок с расширением *.CRF.На этом этапе происходит проварка текста программ на наличие ошибок.Ассемблирование осуществляется при помощи программы транслятора TASM.EXE (ASM.EXE – в ассемблере, MASM.EXE - в макроассемблере). TASM [опции] *.ASM [,,] - команда для выполнения трансляции. Если в командеуказана одна запятая, то Файл листинга Формируется. В TASM имеются две опции: /ZI и /N.Они вызываются: ТАSМ.
5. Компоновка. На этом этапе создается перемещаемая программа способная загружатьсяа любую область памяти. Сохраняется в Файле с расширением *.ЕХЕ или *.СОМ. Дляэтого используется TLINK.exe (для макроассемблера LINK.EXE). Имеются опции:/Т и /X.
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 20hdup(?)
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, "$"
bufdb 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 – загрузить ЕА
Мнемоника: leareg,<операнд>
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