Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1117

.pdf
Скачиваний:
2
Добавлен:
07.01.2021
Размер:
880.85 Кб
Скачать

;Выход: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

32.Какое максимальное количество байтов могут обойти команды короткий jmp, loop и условный переход?

33.Команда jmp начинается на 0624h. Определите адрес перехода, если шестнадцатеричный объектный код для операнда команды jmp:

а) 27, б) , в) С6.

34.Напишите программу для вычисления 12 чисел Фибоначчи: 1, 1, 2, 3, 5, 8, 13, 21,…(каждое число представляет собой сумму двух предыдущих чисел).

35.Предположим, что регистры ax и bx содержат беззнаковые данные. Определите команды cmp (где необходимо) и команды безусловного перехода для следующих проверок:

а) значение в bx больше, чем в ax? в) ax содержит нуль?

г) было ли переполнение?

д) значение в bx равно или меньше, чем в ax? е) значение в ax равно bx?

36.Какая разница между кодированием в директиве proc операнда с типом far и с типом near?

37.Каким образом может программа начать выполнение процедуры?

38.В EXE-программе процедура A10 вызывает B10, B10 вызывает C10, а C10 вызывает D10. Сколько адресов, кроме начальных адресов возврата в DOS, содержит стек?

39.Укажите вызовы функций:

а) для ввода с клавиатуры, б) вывода на экран.

40.Объясните назначение каждого из следующих файлов: file.asm, file.lst, file.obj, file.exe.

41.Напишите две команды для инициализации регистра ds, полагая, что имя сегмента данных – datseg.

Вопросы с 42 по 45 имеют отношение к следующим данным: DATAXdb 148h

db 2316h DATAYdb 0237h

db 4052h

42. Закодируйте команды для сложения: а) слова DATAX со словом DATAY;

б) двойного слова, начинающегося по адресу DATAX, с двойным словом в DATAY.

43. Закодируйте команды для умножения (mul): а) слова DATAX на слово DATAY;

136

б) двойного слова, начинающегося по адресу DATAX, на слово

DATAY.

44.Какой делитель, кроме 0, вызывает ошибку переполнения?

45.Закодируйте команды для деления (div):

а) слова DATAX на 23;

б) двойного слова, начинающегося по адресу DATAX, на слово

DATAY.

46.Команды вывода на экран (функция DOS).

47.Команды ввода с клавиатуры (функция DOS).

48.Перечень ошибок в написании программ.

137

Учебное издание

ЛЕОНИД ЕФИМОВИЧ ОЛЕЙНИК

ЯЗЫКИ ПРОГРАММИРОВАНИЯ

Учебное пособие

Для специальности 075500

Часть 1

ОПРЕДЕЛЕНИЕ ДАННЫХ. ДВОИЧНАЯ

АРИФМЕТИКА. ЭКРАННЫЕ ОПЕРАЦИИ

Главный редактор М. А. Тихонова

Подписано к печати 22.05.06 Формат 60 x 90 1/16. Бумага писчая Гарнитура Таймс Оперативный способ печати Усл. п. л. 8,5, уч.-изд. л. 8,4

Тираж 145 экз. Заказ Цена договорная

Издательство СибАДИ 644099, Омск, ул. П. Некрасова, 10

Отпечатано в ПЦ издательства СибАДИ 644099, Омск, ул.П. Некрасова, 10

138

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]