Ёлочка,игрушки,подарок - Assembler

Узнай цену своей работы

Формулировка задачи:

Имеется ёлочка,а как под неё положить подарок и повесить на неё игрушки?
DATA SEGMENT
    txt1 db '          H E L L O', 13, 10, '$'
    txt2 db '     Happy New Year 2017, SAMARA', 13, 10, '$'
    txt3 db 'WITH BEST REGARDS FROM ELENA', 13, 10, '$'
    stroka db (?)
    stolb  db (?)
DATA ENDS
 
STCK SEGMENT STACK
    DB 256 DUP(?)
STCK ENDS
 
ASSUME CS:CODE, DS:DATA, SS:STCK
 
CODE SEGMENT
;------- Процедура CURSOR устанавливает курсор в нужную позицию ---------------
    CURSOR PROC                     ; начало процедуры CURSOR
        MOV AH, 02H                 ; AН<-код функции перемещения курсора
        MOV BH, 00H                 ; номер страницы
        MOV DH, stroka              ; DH <- строка
        MOV DL, stolb               ; DL <- столбец
        INT 10H                     ; прерывание BIOS
        RET                         ; корректное завершение процедуры
    CURSOR  ENDP                    ; конец процедуры CURSOR
;--- Процедура TABLE, выводит символ "залитая точка" на экран по вертикали ----
    TABLE PROC                      ; начало процедуры TABLE
        MOV AH, 02H                 ; функция перемещения курсора
        MOV BH, 00H                 ; страница 0
        INC DH                      ; увеличение dh на единицу
        INT 10H                     ; прерывание BIOS
        MOV AH, 09H                 ; функция вывода символа на экран
        MOV AL, 7Ch                 ; символ '|' 
        MOV BH, 00H                 ; страница 0
        MOV BL, 0Eh                 ; желтый на черном
        MOV CX, 01H                 ; один символ
        INT 10H                     ; прерывание BIOS
        RET                         ; корректное завершение процедуры
    TABLE ENDP                      ; конец процедуры TABLE
;----------------------- Вывод заданного текста -------------------------------
    TEXT PROC                       ; процедура вывода TEXT
        MOV AH, 09H                 ; функция вывода символа
        INT 21H                     ; прерывание DOS
        RET                         ; корректное завершение процедуры
    TEXT ENDP                       ; конец процедуры TEXT
;--------------- Процедура реализации задания программы -----------------------
    MAIN PROC                       ; начало процедуры MAIN
        MOV AH, 00H                 ; функция задания режима экрана
        MOV AL, 03H                 ; ЦВ текстовый, 25х80
        INT 10H                     ; прерывание BIOS
        MOV AH, 06H                 ; функция прокрутки вверх
        MOV AL, 00H                 ; очистка всего экрана
        MOV BH, 00000110B           ; ярко - желтый
        MOV CX, 0000H               ; верхняя левая позиция
        MOV DX, 184FH               ; нижняя правая позиция
        INT 10H                     ; прерывание BIOS
;----------------------- Текст ----------------------------------------------
        MOV AH, 06H                 ; функция прокрутки вверх
        MOV AL, 01H                 ; 1 строка
        MOV BH, 00000110B           ; ярко - желтый
        MOV CX, 0015                ; верхне левая позиция 
        MOV DX, 001                 ; нижне правая позиция 
        INT 10H                     ; прерывание BIOS
        MOV stroka, 00H             ; установка курсора в заданную позицию:
        MOV stolb, 8H               ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        LEA DX, txt1                ; вывод текста txt1
        CALL TEXT                   ; с помощью процедуры TEXT
;-----------------------------------------------------------------------------
        MOV AH, 06H                 ; функция прокрутки вверх
        MOV AL, 01H                 ; 1 строка
        MOV BH, 00000001B           ; ярко - желтый
        MOV CX, 0204H               ; верхне левая позиция
        MOV DX, 0225H               ; нижне правая позиция
        INT 10H                     ; прерывание BIOS
        MOV stroka, 02H             ; установка курсора в заданную позицию:
        MOV stolb, 5H               ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        LEA DX, txt2                ; вывод текста txt2
        CALL TEXT                   ; с помощью процедуры TEXT
;-----------------------------------------------------------------------------
        MOV AH, 06H                 ; функция прокрутки вверх
        MOV AL, 01H                 ; 1 строка
        MOV BH, 00000010B           ; ярко - желтый
        MOV CX, 1400H               ; верхне левая позиция
        MOV DX, 1450H               ; нижне правая позиция
        INT 10H                     ; прерывание BIOS
        MOV stroka, 14H             ; установка курсора в заданную позицию:
        MOV stolb, 9H               ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        LEA DX,txt3                 ; вывод текста txt3
        CALL TEXT                   ; с помощью процедуры TEXT  
;----------- Рисование гор. границ рамки(верхняя и нижняя) ---------------------
        MOV stroka, 04H             ; установка курсора в заданную позицию:
        MOV stolb, 3H               ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV AH, 09H                 ; функция вывода символа
        MOV AL, 5Fh                 ; символ "-"
        MOV BH, 00H                 ; страница 0
        MOV BL, 0Eh                 ; желтый
        MOV CX, 28H                 ; 40 символов
        INT 10H                     ; прерывание BIOS
        MOV stroka, 13H             ; установка курсора в заданную позицию:
        MOV stolb, 3H               ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV AH, 09H                 ; функция вывода символа
        MOV AL, 5Fh                 ; символ "-"
        MOV BH, 00H                 ; страница 0
        MOV BL, 0Eh                 ; желтый
        MOV CX, 28H                 ; 40 символов
        INT 10H                     ; прерывание BIOS
;----------- Рисование верт. границ рамки(левая и правая) ---------------------
        MOV stroka, 04H             ; установка курсора в заданную позицию:
        MOV stolb, 03H              ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV DL, 03H                 ; столбец 20
        REPT 15                     ; цикл с 15 повторениями
            CALL TABLE              ; вызов процедуры TABLE
        ENDM                        ; конец цикла
        MOV stroka, 04H             ; установка курсора в заданную позицию:
        MOV stolb, 12H              ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV DL, 2AH                 ; столбец 60
        REPT 15                     ; цикл с 15 повторениями
            CALL TABLE              ; вызов процедуры TABLE
        ENDM                        ; конец цикла
;--------------------- Рисование елки ------------------------------------------
        MOV stroka, 09H             ; установка курсора в заданную позицию:
        MOV stolb, 16H              ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV AH, 09H                 ; функция вывода символа
        MOV AL, 0FH                 ; символ "солнышко"
        MOV BH, 00H                 ; страница 0
        MOV BL, 10001110B           ; мигающий желтый
        MOV CX, 01H                 ; 1 символ
        INT 10H                     ; прерывание BIOS
;-----------------------------------------------------------------------------
        MOV stroka, 0AH             ; установка курсора в заданную позицию:
        MOV stolb, 15H              ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV AH, 09H                 ; функция вывода символа
        MOV AL, 2AH                 ; символ "*"
        MOV BH, 00H                 ; страница 0
        MOV BL, 00000010B           ; зеленый
        MOV CX, 03H                 ; 3 символа 
        INT 10H                     ; прерывание BIOS
;-----------------------------------------------------------------------------
        MOV stroka, 0BH             ; установка курсора в заданную позицию:
        MOV stolb, 14H              ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV AH, 09H                 ; функция вывода символа
        MOV AL, 2AH                 ; символ "*"
        MOV BH, 00H                 ; страница 0
        MOV BL, 00000010B           ; зеленый
        MOV CX, 05H                 ; 5 символов
        INT 10H                     ; прерывание BIOS
;-----------------------------------------------------------------------------
        MOV stroka, 0CH             ; установка курсора в заданную позицию:
        MOV stolb, 13H              ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV AH, 09H                 ; функция вывода символа
        MOV AL, 2AH                 ; символ "*"
        MOV BH, 00H                 ; страница 0
        MOV BL, 00000010B           ; зеленый
        MOV CX, 07H                 ; 7 символов
        INT 10H                     ; прерывание BIOS
;-----------------------------------------------------------------------------
        MOV stroka, 0DH             ; установка курсора в заданную позицию:
        MOV stolb, 12H              ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV AH, 09H                 ; функция вывода символа
        MOV AL, 2AH                 ; символ "*"
        MOV BH, 00H                 ; страница 0
        MOV BL, 00000010B           ; зеленый
        MOV CX, 09H                 ; 7 символов
        INT 10H                     ; прерывание BIOS
;-----------------------------------------------------------------------------
        MOV stroka, 0EH             ; установка курсора в заданную позицию:
        MOV stolb, 16H              ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV AH, 09H                 ; функция вывода символа
        MOV AL, 2AH                 ; символ "*"
        MOV BH, 00H                 ; страница 0
        MOV BL, 00000110B           ; желтый
        MOV CX, 01H                 ; 1 символов
        INT 10H                     ; прерывание BIOS
;--------------------------------------------------------------------------------
        MOV stroka, 16H             ; установка курсора в заданную позицию:
        MOV stolb, 12H              ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV AH, 09H                 ; функция вывода символа
        MOV AL, 2AH                 ; символ "*"
        MOV BH, 00H                 ; страница 0
        MOV BL, 00000111B           ; Белый
        MOV CX, 00H                 ; 0 символов
        INT 10H                     ; прерывание BIOS   
;--------------------------------------------------------------------------------------     
        MOV AH, 00H                 ; режим
        INT 16H                     ; ожидания
        RET                         ; корректное завершение процедуры
    MAIN ENDP                       ; конец процедуры main
;--------------- Конец процедуры реализации задания программы ----------------------------
    START:
      MOV AX, DATA
      MOV DS, AX
      CALL MAIN
      MOV AL, 0
      MOV AH, 4CH
      INT 21H
 
CODE ENDS
END START
кто нибудь подскажите как это сделать

Решение задачи: «Ёлочка,игрушки,подарок»

textual
Листинг программы
;--------------------------------------------------------------------------------------
        MOV stroka, 0EH             ; установка курсора в заданную позицию:
        MOV stolb, 12H              ; заносим значение строки и столбца
        CALL CURSOR                 ; вызов процедуры CURSOR
        MOV AH, 09H                 ; функция вывода символа
        MOV AL, '#'                 ; символ "#"
        MOV BH, 00H                 ; страница 0
        MOV BL, 00000111B           ; Белый
        MOV CX, 02H                 ; 0 символов
        INT 10H                     ; прерывание BIOS
;--------------------------------------------------------------------------------

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5