Вывод таблицы 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

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

5   голосов , оценка 3.4 из 5
Похожие ответы