1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
Turbo Assembler Version 3.1 04/05/20 23:25:42 Page 1
TASK2.ASM
1 .286 ; Директива, позволяющая использовать +
2 непривилегированные инструкции процессора 80286 и +
3 инструкции арифметического сопроцессора 80287
4 0000 .model small ; Определение памяти ближнего типа
5 0000 .code ; Начало сегмента с кодом
6 org 100h ; Смещение адресации на 100h байт
7 0100 begin:
8 0100 EB 1D 90 JMP start ; Безусловный переход к метке start
9 0103 trans:
10 0103 60 PUSHA ; Сохранение содержимого регистров в стек
11 0104 33 C9 XOR cx,cx ; Обнуление регистра cx
12 0106 isDiv:
13 0106 33 D2 XOR dx,dx ; Обнуление регистра dx
14 0108 F7 F3 DIV bx ; Деление значений регистров ax на bx
15 010A 52 PUSH dx ; Помещение значение регистра dx в стек
16 010B 41 INC cx ; Увеличение значения регистра cx на +
17 единицу
18 010C 0B C0 OR ax,ax ; Попарное сложение всех битов операндов
19 010E 75 F6 JNZ isDiv ; Осуществление перехода, если значение +
20 регистра ax не равно 0
21 0110 isOut:
22 0110 58 POP ax ; Помещение значения вершины стека в +
23 регистр ax (при этом указатель стека уменьшается на +
24 единицу)
25 0111 3C 09 CMP al,9 ; Сравнение значения регистра al с числом 9
26 0113 7E 02 JLE noHex ; Переход к метке noHex, если al <= 9
27 0115 04 07 ADD al,7 ; Прибавление числа 7 к регистру al
28 0117 noHex:
29 0117 04 30 ADD al,30h ; Прибавление числа 30h к регистру al
30 0119 CD 29 INT 29h ; Прерывание для вывода символа (Обычно, +
31 вызов функции 0Eh прерывания 10h)
32 011B E2 F3 LOOP isOut ; Вычитание из регистра cx единицы. Если +
33 значение регистра cx не равно 0, то выполнить переход +
34 на метку isOut
35 011D 61 POPA ; Загрузка из стека значение всех +
36 регистров
37 011E C3 ret ; Возврат к точке вызова
38 011F start:
39 011F CD 11 INT 11h ; Запрос списка подключенного +
40 оборудования. Результат помещается в регистр ax
41 0121 BB 0002 MOV bx,2 ; Помещение в регистр bx числа 2
42 0124 E8 FFDC CALL trans ; Вызов метки trans
43 0127 B8 000A MOV ax,10 ; Помещение в регистр ax числа 10
44 012A 8B D0 MOV dx,ax ; Помещение в регистр dx значение числа ax
45 012C B8 0200 MOV ax,200h ; Помещение в регистр ax значения 200h
46 012F CD 21 INT 21h ; Вызов функции DOS
47 0131 CD 12 INT 12h ; Запрос размера физической памяти. +
48 Результат помещается в регистр ax
49 0133 E8 FFCD CALL trans ; Вызов метки trans
50 0136 B8 4C00 MOV ax,4C00h; Помещение в регистр ax значения 4C00h +
51 (функция DOS для завершения программы)
52 0139 CD 21 INT 21h ; Вызов функции DOS
53 END begin ; Окончание программы
Turbo Assembler Version 3.1 04/05/20 23:25:42 Page 2
Symbol Table
Symbol Name Type Value
??DATE Text "04/05/20"
??FILENAME Text "TASK2 "
??TIME Text "23:25:42"
??VERSION Number 030A
@32BIT Text 0
@CODE Text _TEXT
@CODESIZE Text 0
@CPU Text 0707H
@CURSEG Text _TEXT
@DATA Text DGROUP
@DATASIZE Text 0
@FILENAME Text TASK2
@INTERFACE Text 00H
@MODEL Text 2
@STACK Text DGROUP
@WORDSIZE Text 2
BEGIN Near _TEXT:0100
ISDIV Near _TEXT:0106
ISOUT Near _TEXT:0110
NOHEX Near _TEXT:0117
START Near _TEXT:011F
TRANS Near _TEXT:0103
Groups & Segments Bit Size Align Combine Class
DGROUP Group
_DATA 16 0000 Word Public DATA
_TEXT 16 013B Word Public CODE
|