Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM_lectures.doc
Скачиваний:
27
Добавлен:
28.04.2019
Размер:
992.77 Кб
Скачать

Вывод на экран

Инструкция INT - interrupt – прерывание.

20H  AX INT 21H – вызов функции DOS

41H  DX  код символа

Значение 02h в регистре AH – номер функции.

INT 20H – выход из программы.

MOV AH, 02H ; загружаем в AH число 02h

MOV AH, 02H

MOV DL, 2AH

INT 21H

INT 20H

Печать * на экране

Вывод строки символов

INT 21H, но с другим номером функции.

Для 02Н – 1 символ

09Н – печатает целую строку, пока не встретит символ ‘$’

MOV AH, 09

MOV DX, 0200H

INT 21H

INT 20H

Вывод на экран шестнадцатеричного числа

Вывод на экран одной шестнадцатиричной цифры:

Сhar

ASCII Code (HEX)

В программе шестнадцатеричное число должно начинаться с 0 (для того, чтобы отличить от меток или от обозначения регистров), если число начинается с буквы.

Например, число А – 0Ah, а не AH – чтобы не путать с регистром AH.

Пусть в регистре BL шестнадцатеричное число 0h0Fh.

Тогда получение ASCII кода числа осуществляется с помощью следующей программы:

BL = BL+ 030h

if BL 03Ah then BL=BL+07h

На ассемблере:

MOV AH, 02H

MOV DL, BL

ADD DL, 030H

CMP DL, 03AH

JL PRINT

/

2F

+030H

0

30

1

31

2

32

3

33

4

34

5

35

6

36

7

37

8

38

9

39

:

3A

;

3B

3C

=

3D

3E

?

3F

@

40

A

41

+037H

ADD DL, 07H

PRINT:

INT 21H

INT 20H

B

42

C

43

D

44

E

45

F

46

G

47

Процедуры

Это список инструкций, который можно вызвать из различных мест программы. Аналог функции в С и подпрограммы.

Процедуру можно вызвать с помощью CALL имя, и выход с помощью REТ. Адрес возврата запоминается в стеке.

САLL имя

…….

и мя: …

процедура

….

….

….

RET

……

Теперь напишем программу распечатки содержимого регистра BL.

MOV DL, BL

RCR DL, 4 ; сдвиг вправо на 4 бита

MOV DL, BL

CALL PRINT_HEX

INT 20H

PRINT_HEX:

AND DL, 0FH

ADD DL, 030H

CMP DL, 03AH

JL PRINT

ADD DL, 07H

PRINT: INT 21H

RET

Ввод символов

Вызов DOS через INT 21H, предварительно загрузив в AH единицу, обеспечив ввод одного символа.

Решим следующую задачу – сформировать байт из шестнадцатеричного числа (из 2-х шестнадцатиричных цифр). Если вводится символ, который нельзя преобразовать в шестнадцатеричную цифру, то – звонок.

CALL INP_HEX

MOV AL, DL

RCL DL, 4

CALL INP_HEX

ADD DL, AL

MOV AH, 02

INT 21H

INT 20H

INP_HEX:

PUSH DX

MOV AH, 08 ; считать символ, но не выводить его на экран

LOOP: INT 21H

CMP AL, 030H

JB BEEP

CMP AL, 046H

JA BEEP

CMP AL, 039H

JA CONT

MOV AH, 02

MOV DL, AL

SUB AL, 030H

POP DX

RET

BEEP: INT 21H

CONT: CMP AL, 041H

JB LOOP

MOV AH, 02

MOV DL, AL

INT 21H

SUB AL,037H

POP DX

RET

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