;Выход:dx:ax = число в bin
;Начало процедуры (директива proc)
ASCII_bin_d proc
;Тело процедуры
xor ax,ax xor bx,bx xor cx,cx xor dx,dx
mov word ptr promd,ax mov word ptr promd[2],ax mov word ptr fml[2],ax mov word ptr fml,1
mov osh_v,al mov al,fact_d mov cl,al dec al
mov si,ax met1_d:
mov bl,field_d[si] cmp bx,30h
jb error_d cmp bx,39h ja error_d and bl,0fh
mov dx,0 mov ax,0 abd1: cmp bl,0
jz abd2
add ax,word ptr fml adc dx,word ptr fml[2] dec bl
jmp abd1
abd2: add word ptr promd,ax adc word ptr promd[2],dx mov bl,9
mov dx,word ptr fml[2] mov ax, word ptr fml
abd3: cmp bl,0 jz abd4
add word ptr fml,ax adc word ptr fml[2],dx dec bl
jmp abd3 abd4:
dec si
loop met1_d
mov dx,word ptr promd[2]
131
mov ax,word ptr promd jmp end_error_d
error_d:
call cursor mov ah,09h
lea dx,oshibka_v int 21h
mov osh_v,1 end_error_d:
ret
ASCII_bin_d endp ; конец процедуры (директива endp) ;===================================================================
;bin_ascii ;процедура перевода из bin в ASCII
;Вход: rezult = двоичное число
;Выход:ascval = число в кодах ascii
;Начало процедуры (директива proc)
bin_ASCII proc; ; Тело процедуры
call clrascval ;вызов процедуры очистки строковой переменной ascval lea si,ascval[19]
m1:
cmp word ptr rezult[6],0 jne m2
cmp word ptr rezult[4],0 jne m2
cmp word ptr rezult[2],0 jne m2
cmp word ptr rezult,10 jnb m2
mov ax,word ptr rezult or al,30h
mov [si],al dec si jmp m3
m2:
sub word ptr rezult,10 sbb word ptr rezult[2],0 sbb word ptr rezult[4],0 sbb word ptr rezult[6],0 add word ptr kol,1 adc word ptr kol[2],0 adc word ptr kol[4],0 adc word ptr kol[6],0 jmp m1
m3:
cmp word ptr kol[6],0 jne m4
cmp word ptr kol[4],0
132
jne m4
cmp word ptr kol[2],0 jne m4
cmp word ptr kol,0 jne m4
ret
m4:
mov ax,word ptr kol mov word ptr rezult,ax mov ax,word ptr kol[2] mov word ptr rezult[2],ax mov ax,word ptr kol[4] mov word ptr rezult[4],ax mov ax,word ptr kol[6] mov word ptr rezult[6],ax mov word ptr kol,0
mov word ptr kol[2],0 mov word ptr kol[4],0 mov word ptr kol[6],0 jmp m1
; Конец процедуры (директива endp) bin_ASCII endp
;=================================================================== clrascval proc
mov cx,20 mov si,19
clr1: and ascval[si],30h dec si
loop clr1 ret
clrascval endp
;=================================================================== cursor proc ;процедура перевода курсора на след. строку
mov ah,09
lea dx,perevod_cursora int 21h
ret cursor endp
;===================================================================
;Конец сегмента кода (директива ends) codesg ends
;Конец программы (директива end) end begin
133
|
|
|
|
|
|
Контрольные вопросы |
|
|
|
|
|||||
1. |
Напишите битовые представления ASCII-кодов для следующих |
||||||||||||||
однобитовых символов: |
а) 13, |
б) 2, |
в) 5. |
|
|
|
|
||||||||
3. Напишите битовые представления для следующих чисел: |
|
||||||||||||||
а) 5, |
б) 13, |
в) 21, г) 27. |
|
|
|
|
|
|
|
|
|||||
3. |
Сложите следующие двоичные числа: |
|
|
|
|
|
|||||||||
а) |
00010101 |
|
б) |
00111110 |
|
|
в) |
00011111 |
|||||||
|
|
00001101 |
|
|
|
00101001 |
|
|
|
00000001 |
|||||
4. |
Определите двоичные дополнения для следующих двоичных чисел: |
||||||||||||||
а) 00010011, |
б) 00111100, в) 00111001 |
|
|
|
|
|
|||||||||
5. |
Определите |
положительные |
значения |
для |
следующих |
||||||||||
отрицательных двоичных цифр: |
|
|
|
|
|
|
|
|
|||||||
а) 11001000, |
б) 10111101, в) 10000000. |
|
|
|
|
|
|||||||||
6. |
Определите |
шестнадцатеричные |
представления для |
следующих |
|||||||||||
значений: |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
а) ASCII-символа 0, |
б) ASCII-символа 7, |
в) |
двоичного |
числа |
|||||||||||
01011101, |
|
г) двоичного числа 01110111. |
|
|
|
|
|
||||||||
|
7. Сложите следующие шестнадцатеричные числа: |
|
|
|
|||||||||||
а) |
23A6 |
б) |
51FD |
|
в) |
7779 |
|
г) |
EABE |
||||||
|
|
0022 |
|
|
3 |
|
|
|
|
887 |
|
|
|
2 6C4 |
|
8.Что представляют собой три типа сегментов, каковы их максимальные размеры и адреса, с которых они начинаются?
9.Сегменты, используемые в EXE-программе.
10.Признаки EXE-программы
11.Назначение директив segment, ends, proc, endp, end, assume, label.
12.Регистры МП Intel 8086.
13.Директивы определения данных db, dw, dd, dq.
14.Какие регистры можно использовать для следующих целей:
а) сложения и вычитания, б) подсчета числа циклов, в) умножения и деления, г) адресации сегментов, д) индикации нулевого результата, е) адресации выполняемой команды?
15.Основные элементы программы на языке ассемблера.
16.Команды микропроцессора Intel 8086.
17.Команды микропроцессора Intel 8086, выполняющие арифметические операции.
18.Напишите машинные команды для:
а) пересылки значения 4629h в регистр ax;
134
б) сложения 036Аh с содержимым регистра ax.
19. Имеется программа, которая выполняет следующее:
-пересылает значения 25h в регистр al;
-сдвигает содержимое регистра al на один бит влево (в результате в al будет 4Ah);
-пересылает значения 15h в регистр bl;
-умножает содержимое регистра al на содержимое регистра bl.
Какое значение будет в регистре ax после выполнения программы?
20.Какие из следующих имен неправильны: а) PC_AT, б) $50, в) @$_Z, г) 3487, д) AX?
21.Каково назначение каждого из трех сегментов: сегмента кода, сегмента данных, сегмента стека?
22.Какая из директив endp, ends, end завершает:
а) программу, б) процедуру, в) сегмент? Что каждая из них подразумевает?
23.Укажите различия между директивой и командой.
24.Укажите различия в назначении ret и end.
25.Для сегментов кода, данных и стека даны имена cdseg, datseg и stkseg, соответственно. Сформируйте директиву assume.
25.Напишите три команды для сохранения в стеке регистра ds и нуля.
27.Какова длина в байтах для элементов данных, определенных директивами : а) dw, б) dd, в) dt, г) db, д) dq?
28.Определите следующие числовые значения в элементах данных с именами FLDA и FLDB:
а) двухбайтового элемента, содержащего неопределенное значение; б) директивы dw, содержащей последовательные значения 16, 19, 20,
27, 30.
29.Покажите сгенерированный шестнадцатеричный объектный код
для:
а) db '26' и б) db 26.
30.Определите ассемблерный шестнадцатеричный объектный код
для:
а) db 26h, б) dw 2645h, |
в) dd 25733Ah, |
г) dq 25733Ah. |
31. Закодируйте следующие |
команды с |
непосредственными |
операндами:
а) загрузить 320 в регистр ax; б) сравнить поле FLDB с нулем;
в) прибавить 40h к содержимому регистра bx; г) вычесть 40h из регистра cx.
31. Напишите команду вызова ассемблера с параметром получения lst- файла (листинга),
135