Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 18:35   #1
DrHome
 
Регистрация: 17.04.2010
Сообщений: 4
По умолчанию Объяснение проги на ассемблере

Обьясните пожалуйста что делает метка 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
Обьясните пожалуйста что делает метка I1 ...
DrHome вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Turbo Pascal Объяснение кода hills Паскаль, Turbo Pascal, PascalABC.NET 0 14.04.2009 16:18
Нужно объяснение задачки((( Настенька..Блонди Помощь студентам 3 26.02.2009 23:13
Объяснение к задаче коммивояжер. enik pi Помощь студентам 2 14.06.2007 00:54