- •24. Ввод символа. Определить его позицию в строке и вывести на экран
- •Int 21h
- •30. Найти сумму элементов четных строк матрицы.
- •37. Перевод числа из одной системы счисления в другую. Данные вводить с клавиатуры.
- •Int 21h
- •42. Работа с окнами в текстовом режиме.
- •Inc si ;перейти к следующему элементу
- •Int 21h
- •59. Арифметические операции со знаковыми и беззнаковыми числами.
- •60. Процедуры в ассемблере, передача параметров, возврат значений.
- •61. Операции с файлами: создание, открытие, закрытие.
- •Int 21h ;открываем файл
- •Int 21h ;закрываем файл
- •62. Операции с файлами: чтение и запись данных.
- •Int 13h ;
- •Int 25h ;функция чтения секторов
Int 13h ;
Прерывания DOS 25H и 26H читают и записывают абсолютные сектора диска, соответственно. Надо поместить логический номер стартового сектора в DX, а DS:BX должны указывать на буфер. CX содержит число секторов для чтения или записи, а AL - номер накопителя, где 0 = A, 1 = B и т.д.
Процедуры портят все регистры, кроме сегментных. При возврате регистр флагов остается на стеке, оставляя стек невыровненным. Не забудьте вытолкнуть это значение со стека сразу после возврата (в примере это значение выталкивается в CX).
;---в сегменте данных
BUFFER DB DUP 5000(?) ;создаем буфер
;---читаем сектора
PUSH DS ;сохраняем регистры
MOV AX,SEG BUFFER S:BX должны указывать на буфер
MOV DS,AX ;
MOV BX,OFFSET BUFFER ;
MOV DX,63 ;логический номер сектора
MOV CX,9 ;читаем всю дорожку
MOV AL,0 ;накопитель A
Int 25h ;функция чтения секторов
POP CX ;выталкиваем со стека флаги
POP DS ;восстанавливаем регистры
JNC NO_ERROR ;если нет ошибки, то на продолжение
CMP AH,3 ;проверка возможных ошибок
.
.
NO_ERROR: ;продолжение программы
Если при возврате флаг переноса равен 1, то произошла ошибка и в этом случае AH и AL содержат два отдельных байта статуса ошибки. Если AH = 4, то указанный сектор не найден, а если AH = 2, то диск неверно отформатирован. Если AH = 3, то была попытка записи на дискету, защищенную от записи. Все остальные значения AH говорят об аппаратной ошибке.