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