summaryrefslogtreecommitdiff
path: root/asvt/labs/lab2/files/task2/TASK2.LST
blob: a0271f070b42c3c8e58b41673ead7ad414323348 (plain)
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