Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2023, 20:07   #1
Dima22012
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 1
По умолчанию ассемблер

x-32 ассемблер
Видела решение этой задачи, но там она не правильная, а сама не знаю как еще исправить

Программа очищает экран и вырезает в его центре инверсное окно разумных размеров. Вводимый с клавиатуры символ полностью заполняет это окно. При вводе следующего символа всё повторяется. Программно проверить нажатие клавиши Right Alt Выход из программы по нажатию клавиши F9.
Dima22012 вне форума Ответить с цитированием
Старый 08.03.2023, 20:29   #2
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Что именно надо сделать?
Lapita12 вне форума Ответить с цитированием
Старый 08.03.2023, 21:02   #3
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
Восклицание Это должно быть верное решение, но используйте на свой страх и риск

Код:
; Initialize data segment
        MOV AX, @data      ; Set up addressability to data segment
        MOV DS, AX         ;      by initializing DS

; Initialize stack segment
        MOV AX, @data      ; Set up addressability to data segment
        MOV SS, AX         ;      by initializing SS
        MOV SP, 100h       ; Set SP to top of data segment

; Clear the screen
        MOV AX, 03h        ; AH = 03h - Clear screen function
        INT 10h            ; Call BIOS video services

; Create an inverse window in the center
        MOV AH, 02h        ; AH = 02h - Set cursor position function
        MOV BH, 0Fh        ; BH = 0Fh - Inverse colors
        MOV CX, 079h       ; CX = 079h - Row 7, column 9
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ah       ; CX = 07Ah - Row 7, column 10
        INT 10h            ; Call BIOS video services
        MOV CX, 07Bh       ; CX = 07Bh - Row 7, column 11
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ch       ; CX = 07Ch - Row 7, column 12
        INT 10h            ; Call BIOS video services
        MOV CX, 07Dh       ; CX = 07Dh - Row 7, column 13
        INT 10h            ; Call BIOS video services
        MOV CX, 07Eh       ; CX = 07Eh - Row 7, column 14
        INT 10h            ; Call BIOS video services
        MOV CX, 07Fh       ; CX = 07Fh - Row 7, column 15
        INT 10h            ; Call BIOS video services

; Accept user input to fill the window
START:  MOV AH, 01h        ; AH = 01h - Check keyboard status function
        INT 16h            ; Call BIOS keyboard services
        JZ START           ; If no key is pressed, loop back to START
        MOV AH, 00h        ; AH = 00h - Read character from keyboard function
        INT 16h            ; Call BIOS keyboard services
        CMP AL, 0           ; Check if the character is null
        JE START           ; If the character is null, loop back to START
        MOV BH, 0          ; BH = 0 - Normal color
        MOV CX, 079h       ; CX = 079h - Row 7, column 9
        MOV DX, CX         ; DX = CX
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ah       ; CX = 07Ah - Row 7, column 10
        MOV DX, CX         ; DX = CX
        INT 10h            ; Call BIOS video services
        MOV CX, 07Bh       ; CX = 07Bh - Row 7, column 11
        MOV DX, CX         ; DX = CX
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ch       ; CX = 07Ch - Row 7, column 12
        MOV DX, CX         ; DX = CX
        INT 10h            ; Call BIOS video services
        MOV CX, 07Dh       ; CX = 07Dh - Row 7, column 13
        MOV DX, CX         ; DX = CX
        INT 10h            ; Call BIOS video services
        MOV CX, 07Eh       ; CX = 07Eh - Row 7, column 14
        MOV DX, CX         ; DX = CX
        INT 10h            ; Call BIOS video services
        MOV CX, 07Fh       ; CX = 07Fh - Row 7, column 15
        MOV DX, CX         ; DX = CX
        INT 10h            ; Call BIOS video services

; Check for the Right Alt key and exit when F9 is pressed
        CMP AH, 02h        ; Check if Right Alt key is pressed
        JE EXIT            ; If Right Alt key is pressed, exit the program
        CMP AL, 81h        ; Check if F9 is pressed
        JE EXIT            ; If F9 is pressed, exit the program
        JMP START          ; Loop back to START

; Exit the program
EXIT:   MOV AX, 4C00h      ; AH = 4Ch - Exit program function
        INT 21h            ; Call DOS interrupt
Lapita12 вне форума Ответить с цитированием
Старый 08.03.2023, 21:22   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Lapita12 Посмотреть сообщение
; Create an inverse window in the center
Код:
        MOV AH, 02h        ; AH = 02h - Set cursor position function
        MOV BH, 0Fh        ; BH = 0Fh - Inverse colors
        MOV CX, 079h       ; CX = 079h - Row 7, column 9 !!! Это не 7 и 9.
; 1) Функция 2 устанавливает курсор по координатам. Координаты курсора: bh = номер страницы, dl = номер столбца, dh = номер строки (т.е. даже число в cx не правильное, должно быть 0709h)
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ah       ; CX = 07Ah - Row 7, column 10
; Тут тоже самое
        INT 10h            ; Call BIOS video services
        MOV CX, 07Bh       ; CX = 07Bh - Row 7, column 11
; Как и тут
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ch       ; CX = 07Ch - Row 7, column 12
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Dh       ; CX = 07Dh - Row 7, column 13
        INT 10h            ; Call BIOS video services
        MOV CX, 07Eh       ; CX = 07Eh - Row 7, column 14
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Fh       ; CX = 07Fh - Row 7, column 15
; ...
        INT 10h            ; Call BIOS video services
Прыгая курсором по координатам ничего не нарисуешь

Цитата:
Сообщение от Lapita12 Посмотреть сообщение
; Accept user input to fill the window
Код:
START:  MOV AH, 01h        ; AH = 01h - Check keyboard status function
        INT 16h            ; Call BIOS keyboard services
        JZ START           ; If no key is pressed, loop back to START
        MOV AH, 00h        ; AH = 00h - Read character from keyboard function
        INT 16h            ; Call BIOS keyboard services
        CMP AL, 0           ; Check if the character is null
        JE START           ; If the character is null, loop back to START
        MOV BH, 0          ; BH = 0 - Normal color
        MOV CX, 079h       ; CX = 079h - Row 7, column 9
        MOV DX, CX         ; DX = CX
; AH здесь будет равен 0, а это функция установки видеорежима
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ah       ; CX = 07Ah - Row 7, column 10
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Bh       ; CX = 07Bh - Row 7, column 11
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ch       ; CX = 07Ch - Row 7, column 12
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Dh       ; CX = 07Dh - Row 7, column 13
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Eh       ; CX = 07Eh - Row 7, column 14
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Fh       ; CX = 07Fh - Row 7, column 15
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
Переустнавливая видеорежим вы не нарисуете ничего на экране. Да и значения видеорежимов все не верные (00h - 7Fh)

Цитата:
Сообщение от Lapita12 Посмотреть сообщение
; Check for the Right Alt key and exit when F9 is pressed
Код:
        CMP AH, 02h        ; Check if Right Alt key is pressed
; Коды этих клавишь вы отсеяли при получении (см. выше)
        JE EXIT            ; If Right Alt key is pressed, exit the program
        CMP AL, 81h        ; Check if F9 is pressed
        JE EXIT            ; If F9 is pressed, exit the program
        JMP START          ; Loop back to START
Вот только в AH должен быть записан номер предыдущей функции BIOS, а не код клавиши.

Последний раз редактировалось macomics; 08.03.2023 в 21:24.
macomics вне форума Ответить с цитированием
Старый 08.03.2023, 21:28   #5
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Код:
        MOV AH, 02h        ; AH = 02h - Set cursor position function
        MOV BH, 0Fh        ; BH = 0Fh - Inverse colors
        MOV CX, 079h       ; CX = 079h - Row 7, column 9 !!! Это не 7 и 9.
; 1) Функция 2 устанавливает курсор по координатам. Координаты курсора: bh = номер страницы, dl = номер столбца, dh = номер строки (т.е. даже число в cx не правильное, должно быть 0709h)
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ah       ; CX = 07Ah - Row 7, column 10
; Тут тоже самое
        INT 10h            ; Call BIOS video services
        MOV CX, 07Bh       ; CX = 07Bh - Row 7, column 11
; Как и тут
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ch       ; CX = 07Ch - Row 7, column 12
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Dh       ; CX = 07Dh - Row 7, column 13
        INT 10h            ; Call BIOS video services
        MOV CX, 07Eh       ; CX = 07Eh - Row 7, column 14
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Fh       ; CX = 07Fh - Row 7, column 15
; ...
        INT 10h            ; Call BIOS video services
Прыгая курсором по координатам ничего не нарисуешь


Код:
START:  MOV AH, 01h        ; AH = 01h - Check keyboard status function
        INT 16h            ; Call BIOS keyboard services
        JZ START           ; If no key is pressed, loop back to START
        MOV AH, 00h        ; AH = 00h - Read character from keyboard function
        INT 16h            ; Call BIOS keyboard services
        CMP AL, 0           ; Check if the character is null
        JE START           ; If the character is null, loop back to START
        MOV BH, 0          ; BH = 0 - Normal color
        MOV CX, 079h       ; CX = 079h - Row 7, column 9
        MOV DX, CX         ; DX = CX
; AH здесь будет равен 0, а это функция установки видеорежима
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ah       ; CX = 07Ah - Row 7, column 10
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Bh       ; CX = 07Bh - Row 7, column 11
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Ch       ; CX = 07Ch - Row 7, column 12
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Dh       ; CX = 07Dh - Row 7, column 13
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Eh       ; CX = 07Eh - Row 7, column 14
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
        MOV CX, 07Fh       ; CX = 07Fh - Row 7, column 15
        MOV DX, CX         ; DX = CX
; ...
        INT 10h            ; Call BIOS video services
Переустнавливая видеорежим вы не нарисуете ничего на экране. Да и значения видеорежимов все не верные (00h - 7Fh)


Код:
        CMP AH, 02h        ; Check if Right Alt key is pressed
; Коды этих клавишь вы отсеяли при получении (см. выше)
        JE EXIT            ; If Right Alt key is pressed, exit the program
        CMP AL, 81h        ; Check if F9 is pressed
        JE EXIT            ; If F9 is pressed, exit the program
        JMP START          ; Loop back to START
Вот только в AH должен быть записан номер предыдущей функции BIOS, а не код клавиши.
В любом случае решение не моё и я об этом заранее предупредил.
Lapita12 вне форума Ответить с цитированием
Старый 08.03.2023, 21:34   #6
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Код:
section .data
    buffer: times 2 db 0 ; buffer for entered character and attribute

section .bss
    inv_row: resb 1      ; starting row of the inverse window
    inv_col: resb 1      ; starting column of the inverse window
    inv_height: resb 1   ; height of the inverse window
    inv_width: resb 1    ; width of the inverse window

section .text
    global _start
    extern _getchar

    _start:
        ; clear the screen
        mov eax, 0x0003   ; set video mode to 80x25 color text mode
        int 0x10
        ; set inverse window parameters
        mov ebx, 0xb8000  ; video memory address
        mov al, ' '       ; space character with inverse attribute
        mov ah, 0x70      ; inverse attribute
        mov [inv_row], byte 12  ; starting row of the inverse window
        mov [inv_col], byte 25  ; starting column of the inverse window
        mov [inv_height], byte 5 ; height of the inverse window
        mov [inv_width], byte 30 ; width of the inverse window
        ; draw inverse window
        mov ecx, [inv_height] ; loop counter for rows
        .row_loop:
            mov edx, [inv_col] ; starting column of the current row
            .col_loop:
                mov bh, 0x00   ; page number (0)
                mov [ebx+edx*2], ax ; write character and attribute to video memory
                inc edx        ; move to the next column
                loop .col_loop ; repeat for all columns in the row
            add ebx, 160    ; move to the next row in video memory
            dec ecx         ; move to the next row in the window
            jnz .row_loop   ; repeat for all rows in the window

    .read_loop:
        ; read character from keyboard
        call _getchar
        cmp al, 0x00      ; check if it's an extended key code
        je .read_loop     ; ignore extended key codes
        cmp al, 0x38      ; check for Right Alt key
        je .exit
        ; fill inverse window with entered character
        mov ecx, [inv_height] ; loop counter for rows
        mov edx, [inv_col]    ; starting column of the first row
        .row_loop2:
            mov bh, 0x00    ; page number (0)
            mov ah, 0x09    ; write character and attribute
            mov [buffer], al ; store entered character in buffer
            mov al, [buffer+1] ; retrieve attribute from buffer
            int 0x10
            inc edx         ; move to the next column
            loop .row_loop2 ; repeat for all rows in the window

        jmp .read_loop

    .exit:
        mov eax, 0x4c00   ; exit program with return code 0
        int 0x21
Lapita12 вне форума Ответить с цитированием
Старый 08.03.2023, 23:28   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Хотя бы компилятор уточнили бы. Вот тогда на FASM
Код:
postpone { label end_of_image }
use16
org	256
	cli
	mov	ax, cs
	mov	ds, ax
	mov	es, ax
	add	ax, ( end_of_image + 15 ) shr 4
	mov	ss, ax
	mov	sp, 1024
	mov	al, 32	; Начинаем с символа пробела - пустое окно
	sti

  next:
	cmp	al, 32	; Если символ управляющий
	jc	@f	; Тогда ничего не выводим, а переходим к вводу нового символа

; Очистка экрана
	push	ax	; Сохраняем на будущее значение символа
	mov	ax, 0500h	; установка активной видеостраницы (0)
	int	10h	; вызов BIOS видеоадаптера
	mov	ax, 0732h	; сдвиг окна экрана на 50 строк вниз
	mov	bh, 07h	; светло серый текст на черном фоне
	mov	cx, 0000h	; 0 строка и 0 столбец
	mov	dx, 317Fh	; 49 строка и 79 столбец
	int	10h	; вызов BIOS видеоадаптера

; Вырезаем окно в центре экрана
	push	ds	; Узнаем размеры экрана ...
	mov	ax, 0040h	; ... считывая их из области ...
	mov	ds, ax	; ... данных BIOS
	mov	ax, [4Ah]	; По адресу 0044Ah содержится слово - ширина экрана в символах
	sub	ax, 20	; Вычитаем из ширины экрана ширину окна
	shr	ax, 1	; Делим это значение на 2
	mov	cl, al	; И получаем номер столбца на экране (левый верхний угол)
	add	ax, 19	; Прибавляем к этому значению 19 (ширина окна - 1)
	mov	dl, al	; И получаем второй номер столбца (правый нижний угол)
	mov	al, [84h]	; По адресу 00484h содержится слово - количество текстовых строк на экране
	sub	al, 14	; Вычитаем из высоты экрана высоту окна 
	shr	al, 1	; Делим это значение на 2
	mov	ch, al	; И получаем номер строки на экране (левый верхний угол)
	add	al, 13	; Прибавляем к этому значению 13 (высота окна - 1)
	mov	dh, al	; И получаем второй номер строки (правый нижний угол)
	pop	ds	; Восстанавливаем доступ к памяти программы
	mov	bh, 70h	; Инвертируем цвет и фон
	mov	ax, 0610h	; Выполняем сдвиг окна вверх
	int	10h	; вызов BIOS видеоадаптера
	mov	ah, 2	; установить позицию курсора
	mov	bh, 0	; Номер видеостраницы для перемещения курсора
	mov	dx, cx	; Координа курсора совпадают с левым верхним углом окна
	add	dx, 0102h	; Прибавляем смещение символа в окне
	int	10h	; вызов BIOS видеоадаптера
	pop	ax	; Восстанавливаем значение символа

; Вывод в окно символа из al
	call	draw	; Эта процедура рисует символ из псевдографики по точкам

  @@:
; Очищаем буфер клавиатуры от лишних введенных символов
	mov	ah, 11h	; Проверяем наличие символа в буфере клавиатуры
	int	16h	; ROM-BIOS сервис клавиатуры
	jz	@f	; Буфер пустой
	mov	ah, 10h	; Считываем символ из буфера
	int	16h	; ROM-BIOS сервис клавиатуры
	jmp	@b	; Читаем символы из буфера пока он не опустеет

  @@:
; Ожидаем нажатия клавиши
	mov	ah, 10h	; Ожидаем нажатия клавиши на клавиатуре
	int	16h	; ROM-BIOS сервис клавиатуры
	cmp	ax, 7000h	; Не нажата ли Alt+F9
	jnz	next	; нет - пытаемся отрисовать новый символ
	push	ds	; Проверяем в области данных BIOS ...
	mov	ax, 0040h	; ... флаги состояния клавиатуры ...
	mov	ds, ax	; ... с целью определить какой Alt был зажат
	mov	ax, [18h]	; По адресу 00417h содержится слово состояния клавиатуры
; но из него нужен только старший байт
	test	ax, 02h	; проверяем флаг Alt-левый
	pop	ds	; Восстанавливаем доступ к памяти программы
	jnz	next	; Флаг установлен - комбинация клавиш не верная
	mov	ax, 4C00h	; Выходим по нажатию Alt (правый) + F9
	int	21h	; Вызов функции выхода в DOS

  draw:
; Процедура побитовой отрисовки символов в окне
	push	ds	; Получаем битовое изображение символа по адресу 0FFA6Eh
	mov	dx, 0FF00h	; там хранится битовое изображение по 8 байт на символ
	mov	bx, 00A6Eh	; для первых 128 знаков ASCII
	mov	ah, 0	; Очищаем старшую часть ax для умножения на 8
	mov	ds, dx	; Переходим к чтению из таблицы знакогенератора
	shl	ax, 3	; Умножаем код знака на 8
	add	bx, ax	; Вычисляем смещение в таблицы для изображения требуемого знака
	mov	ax, [bx + 0]; Считываем изображение ...
	mov	dx, [bx + 2]; ... из таблицы ...
	mov	cx, [bx + 4]; ... в 4 регистра ...
	mov	bx, [bx + 6]; ... процессора
	pop	ds	; Восстанавливаем доступ к памяти программы
	push	bx	; Сохраняем в стеке изображение
	push	cx
	push	dx
	push	ax
	call	@f	; Вызов функции рисования строки изображения
	pop	ax
	mov	al, ah
	call	@f	; Вызов функции рисования строки изображения
	pop	ax
	push	ax
	call	@f	; Вызов функции рисования строки изображения
	pop	ax
	mov	al, ah
	call	@f	; Вызов функции рисования строки изображения
	pop	ax
	push	ax
	call	@f	; Вызов функции рисования строки изображения
	pop	ax
	mov	al, ah
	call	@f	; Вызов функции рисования строки изображения
	pop	ax
	push	ax
	call	@f	; Вызов функции рисования строки изображения
	pop	ax
	mov	al, ah
	call	@f	; Вызов функции рисования строки изображения
	retn

  @@:
	push	ax	; Сохраняем значение строки битов из al в стеке
	mov	ah, 3	; Вызываем функцию получения позиции курсора
	mov	bh, 0	; на странице 0
	int	10h	; вызов BIOS видеоадаптера
	pop	ax	; восстанавливаем значение al из стека
	push	dx	; а в стеке сохраняем уже позицию курсора
	mov	cx, 8	; количество бит в изображении 8
	mov	bh, 0F0h	; цвет каждого символа совпадает с цветом окна

  @@:
	rol	al, 1	; читаем очередной бит
	push	ax	; Сохраняем значение строки битов из al в стеке
	sbb	al, al	; проверяем значение этого бита (он остался в регистре флагов)
	and	al, 0DBh	; если он равен 1, тогда выводим CP866 код 0DBh - закрашенный символ
	mov	ah, 14	; функция вывода символов в режиме телетайпа (будет сдвигать курсор)
	int	10h	; вызов BIOS видеоадаптера
	int	10h	; вызов BIOS видеоадаптера еще раз (по две позиции на экране для одного бита)
	pop	ax	; восстанавливаем значение al из стека
	loop	@b	; повторяем по количеству бит (8 раз)
	pop	dx	; восстанавливаем позицию курсора из стека
	inc	dh	; переходим на новую строку в окне
	mov	ah, 2	; функция установки позиции курсора
	mov	bh, 0	; на странице 0
	int	10h	; вызов BIOS видеоадаптера
	retn
Изображения
Тип файла: png ASCII-A.png (16.7 Кб, 27 просмотров)

Последний раз редактировалось macomics; 08.03.2023 в 23:47.
macomics вне форума Ответить с цитированием
Старый 09.03.2023, 00:19   #8
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Lapita12 Посмотреть сообщение
Код:
mov ebx, 0xb8000  ; video memory address
На реальной машине в реальном режиме нельзя адресоваться дальше 64 кб от начала сегмента. Но вы и адрес сегмента не устанавливаете. Т.е. если это COM файл, тогда в DS будет адрес начала PSP (скажем 2000h) и вы теоретически обратитесь к адресу DS*16+EBX = 2000h*16+0B8000h = 0D8000h (а это уже память ROM-BIOS устройств расширения)
Цитата:
Сообщение от Lapita12 Посмотреть сообщение
loop .col_loop ; repeat for all columns in the row
Эта команда уменьшает значение в cx, а там у вас счетчик строк (хотя команда относится к вложенному циклу по столбцам).
Цитата:
Сообщение от Lapita12 Посмотреть сообщение
Код:
call _getchar
А зачем вам в DOS на ассемблере лишние сишные функции чтения символов? Чем не угодили функции BIOS

Последний раз редактировалось macomics; 09.03.2023 в 00:24.
macomics вне форума Ответить с цитированием
Старый 10.03.2023, 14:52   #9
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Мне кажется, что по заданию требовалось использовать в цикле функцию скроллинга 06 или 07 int 10h, вызывая её со вновь введённым символом.
И программа сокращается до 15 строк.
FPaul вне форума Ответить с цитированием
Старый 10.03.2023, 16:30   #10
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от FPaul Посмотреть сообщение
Мне кажется, что по заданию требовалось использовать в цикле функцию скроллинга 06 или 07 int 10h, вызывая её со вновь введённым символом.
И программа сокращается до 15 строк.
Только у скроллинга нету символа, а только атрибут цвета для заполнения
Код:
ah = 6 или 7
al = величина сдвига
bh = цвет заполнения
cl, ch = левый верхний угол (столбец и строка)
dl, dh = правый нижний угол (столбец и строка)
int 10h
Некуда вводить код символа
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер Jluc333 Помощь студентам 8 08.03.2019 11:36
ассемблер olga12221 Фриланс 0 23.01.2018 12:23
ассемблер gylayko Помощь студентам 1 13.10.2011 19:14
Ассемблер maziLa Помощь студентам 2 14.07.2009 09:25
Ассемблер maziLa Помощь студентам 3 06.07.2009 10:31