Первая и последняя строки билистинга окаймляют подпрограмму. В них содержится название подпрограммы (intoos) и указание о том, что она может находиться в памяти достаточно далеко от точки обращения (far -признак дальнего вызова).
В каждой строке может находиться комментарий, размещаемый справа после точки с запятой. В нашем примере прокомментированы все строки для тех, кто впервые сталкивается с текстом программы на языке ассемблера.
0000 |
IntDos PROC far |
/начало подпрограммы |
||
0000 60 |
pusha |
; сохранение всех регистров |
||
0001 1E |
push ds |
; сохранение ds |
||
0002 ОЕ |
push cs |
; сохранение cs |
||
0003 1F |
pop ds |
; пересылка cs n ds |
||
0004 А1 0018 |
mov ax, RegAX |
; пересылка поля RegAX в ах |
||
0007 |
CD 33 |
|
int |
33h |
; прерывание с номером 33h |
||
0009 |
89 IE |
001A |
mov |
RcgBX,bx |
; запоминание регистра bк |
||
000D |
89 0E |
001C |
mov |
RegCX, cx |
; запоминание регистра сх |
||
00Н |
89 16 |
001E |
mov |
RegDX, dx |
;запоминание регистра dx |
||
0015 |
IF |
|
pop |
ds |
;восстановление ds |
||
0016 |
61 |
|
popa |
; восстановление регистров |
|||
0017 |
CB |
|
ret |
; возврат из подпрограммы |
|||
0018 |
0000 |
RegAX |
DW |
0 |
;поле для содержимого ах |
||
001A |
0000 |
RegBX |
DW |
0 |
;поле для содержимого Ьх |
||
001C |
0000 |
RegCX |
DW |
0 |
;поле для содержимого сх |
||
001E |
0000 |
RegDX |
DW |
0 |
;поле для содержимого dx |
||
|
|
IntDos |
ENDP |
|
конец подпрограммы |
||
Текст приведенной выше подпрограммы в шестнадцатеричном формате запоминается в блоке данных:
DATA &Н60,&Н1Е,&НОЕ,&H1F,&НА1,&Н18,SH00,&HCD,&НЗЗ,&Н89
DATA &Н1Е,&Н1А,&Н00,&Н89,&Н0Е,&Н1С,SH00,&H89,&H16,&H1E
DATA &H00,&H1F,&H61,&HCB
Для размещения этой подпрограммы и расположенных в ее хвосте четырех двухбайтовых полей в памяти резервируется массив длиной в 32 байта -intProgd то 16) AS" INTEGER. Переписи в этот массив подлежат только первые 24 байта блока данных — собственно текст программы без полей