Обьясните пожалуйста что делает метка I1 ...
Код:
OutStr macro str ;макрос вывода строки
mov ah,09h
lea dx,str
int 21h
endm
OutChar macro char ;макрос вывода символа
mov ah,06h
mov dl,char
add dl,30h
int 21h
endm
.model small
.stack 100h
.data
M1 DB 'Memory size.... $'
M2 DB ' KB',10,13,'$'
M3 DB 'Floppy drive.... detected',10,13,'$'
M4 DB 'Floppy drive.... not detected',10,13,'$'
M5 DB 'Floppy drive count.... $'
M6 DB 'Arithmetical coprocessor.... detected',10,13,'$'
M7 DB 'Arithmetical coprocessor.... not detected',10,13,'$'
M8 DB 'Start video mode.... not used',10,13,'$'
M9 DB 'Start video mode.... 40x25 color',10,13,'$'
M10 DB 'Start video mode.... 80x25 color',10,13,'$'
M11 DB 'Start video mode.... 80x25 mono',10,13,'$'
M12 DB 'Playing adapter.... detected',10,13,'$'
M13 DB 'Playing adapter.... not detected',10,13,'$'
M14 DB 'Serial printer.... detected',10,13,'$'
M15 DB 'Serial printer.... not detected',10,13,'$'
M16 DB 'Serial printer count.... $'
M1013 DB '',10,13,'$'
.code
start:
mov ax,@DATA
mov ds,ax
;-----------------------------------------------------
;получение размера доступной памяти
int 12h
mov bl, 0Ah
xor si, si
l1:
div bl ;делим ax на 0Ah
cmp al,bl
mov cx,si ;для последующего извлечения из стека заносим в cx si
jbe l2 ;частное <= 0Ah - выход из цикла деления
inc si ;кол-во цифр в стеке
xor dx,dx
mov dl,al
mov al,ah
cbw ;расширение al до ax и забивание в стек
push ax
xor ax,ax
mov al,dl
cbw
mov cx,2
loop l1
l2:
mov bx,ax ;после деления выводим al - частное и ah - остаток
OutStr M1
OutChar bl
OutChar bh
l3:
pop ax
OutChar al ;вывод цифр из стека
loop l3
OutStr M2
;-------------------------------------------------------------
;-------------------------------------------------------------
;получение списка устройств
;формат меток: bx - если бит = 1, nbx - если бит = 0, bnx - там проверяется следующий бит
;где x - номер бита (0-15)
.486
int 11h
mov bx,ax
; наличие флопа -------------------------------------
bt bx,0 ;сканирование 0го бита, результат в флаге сх
jc b0 ;условный переход при установленном сх
jmp nb0
b0:
OutStr M3
jmp bn67 ;проверка на кол-во флопов
nb0:
OutStr M4
jmp bn1 ;пропуск проверки количества флопиков
; количество флопов --------------------------------
bn67:
OutStr M5
bt bx,7
jc tmpLabel1 ;бит 7 = 1
bt bx,6
jc tmpLabel2 ;бит 6 = 1
OutChar 1
OutStr M1013
jmp bn1 ;биты 76 = 00 проверка закончена
tmpLabel2:
OutChar 2
OutStr M1013
jmp bn1 ;биты 76 = 01 проверка закончена
tmpLabel1:
bt bx,6
jc tmpLabel3 ;бит 7 = 1
OutChar 3
OutStr M1013
jmp bn1 ;биты 76 = 10 проверка закончена
tmpLabel3:
OutChar 4
OutStr M1013
jmp bn1 ;биты 76 = 11 проверка закончена
; сопроцессор---------------------------------------
bn1:
bt bx,1
jc b1
jmp nb1
b1:
OutStr M6
jmp bn45
nb1:
OutStr M7
jmp bn45
; начальный видео режим-----------------------------
bn45:
bt bx,5
jc tmpLabel4 ;бит 5 = 1
bt bx,4
jc tmpLabel5 ;бит 4 = 1
OutStr M8
jmp bn12 ;биты 54 = 00 проверка закончена
tmpLabel5:
OutStr M9
jmp bn12 ;биты 54 = 01 проверка закончена
tmpLabel4:
bt bx,4
jc tmpLabel6 ;бит 4 = 1
OutStr M10
jmp bn12 ;биты 54 = 10 проверка закончена
tmpLabel6:
OutStr M11
jmp bn12 ;биты 54 = 11 проверка закончена
; playing adapter------------------------------------
bn12:
bt bx,12
jc b12
jmp nb12
b12:
OutStr M12
jmp bn13
nb12:
OutStr M13
jmp bn13
; наличие принтера-----------------------------------
bn13:
bt bx,13
jc b13
jmp nb13
b13:
OutStr M14
jmp bn1415
nb13:
OutStr M15
jmp exit
; количество принтеров (если есть)-------------------
bn1415:
OutStr M16
bt bx,15
jc tmpLabel7 ;бит 15 = 1
bt bx,14
jc tmpLabel8 ;бит 14 = 1
OutChar 1
OutStr M1013
jmp exit ;биты 15-14 = 00 проверка закончена
tmpLabel8:
OutChar 2
OutStr M1013
jmp exit ;биты 15-14 = 01 проверка закончена
tmpLabel7:
bt bx,14
jc tmpLabel9 ;бит 15 = 1
OutChar 3
OutStr M1013
jmp exit ;биты 15-14 = 10 проверка закончена
tmpLabel9:
OutChar 4
OutStr M1013
jmp exit ;биты 15-14 = 11 проверка закончена
; стандартный выход
exit:
mov ax,4C00h
int 21h
END start