Вывод таблицы ASCII в два столбца - Assembler
Формулировка задачи:
После того как были инициализированы два окна, в левое окно вывести первую половину таблицу ASCII, а в правое – вторую половину. Предусмотреть очистку окон и выход из программы.
Тут код 2 окон
.model small .data cll db 05ch clll db 35h .stack dw 128 dup(0) .code start: ; set segment registers: mov ax, data mov ds, ax mov es, ax mov ax,1003h mov bl,0 int 10h ; add your code here mov ax,0003h int 10h mm: mov bh,cll mov ch,0 mov cl,0 mov dh,25 mov dl,39 call main add cl,dl ADD DL,40 mov bh,clll call main ;____________ int 10h mov ah,0Ah int 21h ;_________________ mov ah,02h mov bh,0 mov dh,0 mov dl,40 int 10h mov ah,0Ah int 21h ;__________________ mov ax,1003h mov bl,1 int 10h je F10 F10: mov ax,1003h mov bl,0 int 10h main proc mov ah,06h mov al,0h int 10h ret main endp end start
Решение задачи: «Вывод таблицы ASCII в два столбца»
textual
Листинг программы
_STACK segment para stack db 1024 dup(?) _STACK ends _DATA segment CrLf db 0Dh, 0Ah, '$' ColorLeft equ 1Ch ColorRight equ 35h VideoPage db 0 _DATA ends _TEXT segment assume cs:_TEXT, ds:_DATA, ss:_STACK main proc ;инициализация сегментного регистра данных mov ax, _DATA mov ds, ax ;уточнить параметры видеорежима mov ah, 0Fh int 10h mov [VideoPage], bh ;разрешить 16 цветов фона (вместо мерцания) mov ax, 1003h mov bl, 0 int 10h ;окрасить фон левой половины экрана mov ah, 06h ;скроллинг части экрана mov cx, 0 mov dx, (24 SHL 8)+(80/2 - 1) mov al, 0 ;очистить всё окно mov bh, ColorLeft ;атрибут (цвет) int 10h ;окрасить фон правой половины экрана mov ah, 06h ;скроллинг части экрана mov cx, (0 SHL 8)+(80/2) mov dx, (24 SHL 8)+(80 - 1) mov al, 0 ;очистить всё окно mov bh, ColorRight ;атрибут (цвет) int 10h ;вывод первой половины таблицы ASCII в левой части экрана ; - позиционирование курсора в левый верхний угол левого окна mov ah, 02h mov bh, [VideoPage] mov dx, 0 int 10h mov al, 0 @@ForChars000_127: mov ah, 0Ah mov bh, [VideoPage] ;mov al, 01h mov cx, 1 int 10h ;переход на следующую позицию курсора mov ah, 03h mov bh, [VideoPage] int 10h inc dl cmp dl, 16 jb @@NextChar000_127 inc dh xor dl, dl @@NextChar000_127: mov ah, 02h mov bh, [VideoPage] int 10h inc al cmp al, 128 jb @@ForChars000_127 ;вывод второй половины таблицы ASCII в правой части экрана ; - позиционирование курсора в левый верхний угол правого окна mov ah, 02h mov bh, [VideoPage] mov dx, (0 SHL 8)+(80/2) int 10h mov al, 128 @@ForChars128_255: mov ah, 0Ah mov bh, [VideoPage] ;mov al, 01h mov cx, 1 int 10h ;переход на следующую позицию курсора mov ah, 03h mov bh, [VideoPage] int 10h inc dl cmp dl, (80/2)+16 jb @@NextChar128_255 inc dh mov dl, (80/2) @@NextChar128_255: mov ah, 02h mov bh, [VideoPage] int 10h inc al cmp al, 0 jne @@ForChars128_255 ;завершение программы mov ax, 4C00h int 21h main endp _TEXT ends end main