Документ 50 (2). К разработка программы на Ассемблере
Скачать 6.51 Kb.
|
Контрольная работа КР2. Разработка программы на Ассемблере. Вариант 10. По запросу программы пользователь вводит с клавиатуры целое положительное десятичное число N. По следующему запросу он вводит с клавиатуры N целых трехзначных положительных десятичных чисел, разделенных пробелами. Программа выводит эти же числа на экран в порядке возрастания величины числа, причем в «троичной» системе счисления. Выполнил: Абдушукуров Гафур ; По запросу программы пользователь вводит с ; клавиатуры целое положительное десятичное число N. ; По следующему запросу он вводит с клавиатуры N целых трехзначных ; положительных десятичных чисел, разделенных пробелами. ; Программа выводит наибольшее число из введенных, ; представленное в десятичной и шестнадцатеричной системах счисления. ; Подключение библиотеки подпрограмм include 'emu8086.inc' ORG 100h start: jmp beg number dw 0 maxim dw 0 array dw 10 dup (0) hexbuf dw '0000h',0 symb db '0123456789ABCDEF' ; вывод AX в 16ричном виде print_hex:add si,4 hex0: dec si mov dx,0 mov di,16 div di ; DL = младшая 16ричная цифра lea bx,symb ; BX = таблица символов push ax mov al,dl ; преобразование цифры в символ xlat mov [si],al ; запись символа в строку pop ax cmp ax,0 ; конец преобразования ? jnz hex0 ; нет - продолжение цикла call print_string ; печать строки результата ret ; get char from keyboard ; into AL: getchar:MOV AH, 00h INT 16h ; and print it: MOV AH, 0Eh INT 10h ret ; Этот символ - цифра ? Да Нет isdigit:cmp al,'0' jc id1 cmp al,'9'+1 jnc id1 clc ret id1: stc ret getval3:mov cx,3 ; ввод 3значного десятичного числа AX (с лидирующими 0) mov ax,0 v1: push ax call getchar call isdigit jc fmterr sub al,'0' mov bl,al ; bl=цифра mov bh,0 pop ax ; ax=ax*10+bx mov si,10 mul si add ax,bx loop v1 ret ; ошибка - введена не цифра fmterr: call pthis db 13,10,'You must enter 3 digits',0 int 20h ; ошибка - N должно быть от 001 до 010 e2: call pthis db 13,10,'You must enter a value from 001 to 010',0 int 20h ; основная программа beg: call pthis DB 'Enter 3 digits for N: ', 0 CALL getval3 ; ввести N cmp ax,0 ; проверить N на допустимость jz e2 cmp ax,11 jnc e2 mov number,ax ; number=N call pthis db 13,10,'Enter array of N 3digits',13,10,0 mov cx,number lea di,array ; ввести массив чисел main0: push cx call getval3 stosw call pthis ; печать пробела между числами db 32,0 pop cx loop main0 lea si,array ; maxim=первое число массива mov ax,[si] mov maxim,ax mov cx,number ; цикл поиска maxim main1: lodsw ; вводим число из массива cmp ax,maxim ; если оно >=maxim, то запоминаем jc skip mov maxim,ax skip: loop main1 mov ax,maxim ; вывод maxim на печать CALL pthis DB 13, 10, 'Maximal value: ', 0 CALL print_num ; print number in AX.(10ичный вид) call pthis db '=',0 mov ax,maxim lea si,hexbuf call print_hex ; (16ричный вид) RET ; return to operating system. ; DEFINE_SCAN_NUM DEFINE_PRINT_STRING DEFINE_PRINT_NUM DEFINE_PRINT_NUM_UNS ; required for print_num. DEFINE_PTHIS END |