Часть 1. Настройка DGS-3324SR_A Настроить IP-адрес VLAN по умолчанию config ipif System ipaddress 10.1.1.10/8 Включить покрывающее дерево
Часть 1. Задание: написать программу, которая переводит числа в римскую систему и печатает их на экран прерыванием int 21h.
Блок-схема программы:
Код программы: DOSSEG .MODEL TINY .STACK 1000h .DATA ;Message DB 13,10,'HELLO WORLD!! ',13,10,'$' InputBuff db 10,?, 10 dup ('-') InputInt dw 0 .CODE mov ax,@Data mov ds,ax; установить регистр DS таким ; образом, чтобы он указывал ; на сегмент данных
;====================================ввод данных с клавиатуры
mov al,0 mov ah,0ch int 21h;сброс буфера чтения
;lea bx,InputBuff ;mov ax,10; mov bx,10 ;mov [bx],ax; lea dx,InputBuff mov ah,0Ah int 21h
mov cl,[InputBuff+1]
lea bx,InputBuff+2 push bx mov dx,[bx]
mov ah,2 int 21h
;; этот код для записи в dx введенного char (0,1,2,3,4,5,6 --- 9) cmp dl,'0' jne EndCase0 mov dx,0 EndCase0: cmp dl,'1' jne EndCase1 mov dx,1 EndCase1: cmp dl,'2' jne EndCase2 mov dx,2 EndCase2: cmp dl,'3' jne EndCase3 mov dx,3 EndCase3: cmp dl,'4' jne EndCase4 mov dx,4 EndCase4: cmp dl,'5' jne EndCase5 mov dx,5 EndCase5: cmp dl,'6' jne EndCase6 mov dx,6 EndCase6: cmp dl,'7' jne EndCase7 mov dx,7 EndCase7: cmp dl,'8' jne EndCase8 mov dx,8 EndCase8: cmp dl,'9' jne EndCase9 mov dx,9 EndCase9:
;mov dx,1 ;int 21h
StrToIntLoop: add cl,-1 cmp cl,0 jna BreakStrToIntLoop mov ax,10 mul dx mov dx,ax
;------------добавление текущей цифры pop bx add bx,1 push bx push cx
mov cx,[bx]
push dx mov ah,2 mov dx,cx int 21h pop dx
;mov ah,2 ;int 21h
;; этот код для записи в dx введенного char (0,1,2,3,4,5,6 --- 9) cmp cl,'0' jne EndCaseL0 add dx,0 EndCaseL0: cmp cl,'1' jne EndCaseL1 add dx,1 EndCaseL1: cmp cl,'2' jne EndCaseL2 add dx,2 EndCaseL2: cmp cl,'3' jne EndCaseL3 add dx,3 EndCaseL3: cmp cl,'4' jne EndCaseL4 add dx,4 EndCaseL4: cmp cl,'5' jne EndCaseL5 add dx,5 EndCaseL5: cmp cl,'6' jne EndCaseL6 add dx,6 EndCaseL6: cmp cl,'7' jne EndCaseL7 add dx,7 EndCaseL7: cmp cl,'8' jne EndCaseL8 add dx,8 EndCaseL8: cmp cl,'9' jne EndCaseL9 add dx,9 EndCaseL9:
pop cx ;---конец добавления этой цифры jmp StrToIntLoop BreakStrToIntLoop:
pop bx mov ax,dx
push ax mov ah,2 mov dx,13 int 21h mov dx,10 int 21h pop ax
;===================================перевод ax в римское число ;------------------ печатаем все N ;mov ax,A mov bx,100 mov dx,0 div bx push dx
mov cx,ax PrintNLoop: cmp ax,0 jna BreakNLoop mov ah,2 mov dx,4Eh int 21h Loop PrintNLoop BreakNLoop:
pop ax
;------------------ печатаем все C mov bx,50 mov dx,0 div bx push dx
mov cx,ax PrintCLoop: cmp ax,0 jna BreakCLoop mov ah,2 mov dx,43h int 21h Loop PrintCLoop BreakCLoop:
pop ax
;------------------ печатаем все X mov bx,10 mov dx,0 div bx push dx
mov cx,ax PrintXLoop: cmp ax,0 jna BreakXLoop mov ah,2 mov dx,58h int 21h Loop PrintXLoop BreakXLoop:
pop ax
;----------------- если число оканчивается на 9 те IX, печатаем его и выходим cmp ax,9 jne NotEquals9 mov ah,2 mov dx,49h int 21h mov dx,58h int 21h jmp ExitProgram NotEquals9:
;----------------если число окачивается на 4 те IV печатаем его и выходим cmp ax,4 jne NotEquals4 mov ah,2 mov dx,49h int 21h mov dx,56h int 21h jmp ExitProgram NotEquals4:
;--------------если число отлично от 4 и 9, печатаем все V mov bx,5 mov dx,0 div bx push dx
cmp ax,1 jne ZeroV mov ah,2 mov dx,56h int 21h ZeroV:
pop ax
;--------------печатаем все I mov cx,ax PrintILoop: cmp ax,0 jna BreakILoop mov ah,2 mov dx,49h int 21h Loop PrintILoop BreakILoop:
ExitProgram: ;====================================конец перевода
mov ah,4ch int 21h END
|