Закрашенные прямоугольники - Assembler

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

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

Написать программу, которая рисует на экране случайное число прямоугольников случайного размера и случайного цвета. (Использовать текстовый режим дисплея - Псевдографика) Не происходит вывод прямоугольник что не так? Может что-то не так с mov es:[si],bl?
.model  tiny
    .model
;C_SEG SEGMENT   PARA 'CODE'
    .stack  100
    .code
    .ORG 100H
;ASSUME CS:C_SEG, DS:C_SEG, SS:C_SEG
 
START:          JMP GO
 
GO:
            mov ax,0b800h;установка es на видеопамять
            push ax
            pop es              
 
            push cs
            pop ds
 
            push cs
            pop ss
;-----------------------
;Видеорежим с цветными символами
mov ah,0;
mov al,03h;
int 10h;
call rr
 
ex:
 
;Quit from program  
            mov ah,4ch
            int 21h
;------------------------------------------
rr proc near
call random
and ax,0ffh;
mov cx,ax
l1:
push cx
call randrect
pop cx
loop l1
ret
rr endp
 
randrect proc near
; y
call random;
and ax,01111b
push ax
 
; x
call random;
and ax,0111111b
push ax
 
; sy
call random;
and ax,01111b
inc ax
push ax
 
; sx
call random;
and ax,01111b
inc ax
push ax
 
; c
call random;
and ax,01111b
push ax
 
;mov dx,5;
call rect
add sp,10
 
ret
randrect endp
 
rect proc near
    push bp
 
    mov bp,sp
    x equ [bp+12]
    y equ [bp+10]
    sx equ [bp+8]
    sy equ [bp+6]
    c equ [bp+4]
    
    mov cx,sy
    loop1:
        push cx
        mov dx,cx
        mov cx,sx
        loop2:
            push dx
            mov ax,x
            add ax,cx
            push ax
            mov ax,y
            add ax,dx
            push ax
            mov dx,c
            call point
            pop ax
            pop ax
            pop dx
        loop loop2
        pop cx
    loop loop1
 
    pop bp
    ret
rect endp
 
point proc near
    push bp
    mov bp,sp
    x equ [bp+4]
    y equ [bp+6]
    mov ax,y
    shl ax,2
    add ax,y
    shl ax,4
    add ax,x
    shl ax,1
    mov si,ax
    mov bl,219
    mov es:[si],bl
    inc si
    mov es:[si],dl
    pop bp
    ret
point endp
 
random proc near
 
  mov ax,rnum
  or ax,ax
  jns getnext
 
  push ds
  mov ax,040h
  push ax
  pop ds
  mov ax,ds:[006ch]
  pop ds
getnext: mul word ptr rconst
  xor dx,dx
  div word ptr rrange
  mov ax,dx
  mov rnum,dx
  xor dx,dx
  div word ptr rmrange
  mov ax,dx
  ret
random endp
 
rnum dw -1; для инициализации генератора
rconst dw 16807 
rrange dw 7fffh
rmrange dw 0ffffh;0-max
 
END START

Решение задачи: «Закрашенные прямоугольники»

textual
Листинг программы
.model  tiny
.code
.186
ORG 100H
START:      mov ax,0b800h;установка es на видеопамять
        push    ax
        pop es
;Видеорежим с цветными символами
        mov ax,3;
        int 10h;
        call    rr
        xor ax,ax
        int 16h
;Quit from program
        ret
;------------------------------------------
rr  proc
        call    random
        and ax,0fh;
        mov cx,ax
l1:
        push    cx
        call    randrect
        pop cx
        loop    l1
        ret
rr  endp
 
randrect    proc
;y
        call    random;
        and ax,01111b
        push    ax
 
;x
        call    random;
        and ax,0111111b
        push    ax
 
;sy
        call    random;
        and ax,01111b
        inc ax
        push    ax
 
;sx
        call    random;
        and ax,01111b
        inc ax
        push    ax
 
;c
        call    random;
        and ax,01111b
        push    ax
 
;mov dx,5;
        call    rect
        add sp,10
;retn N
        ret
randrect    endp
 
rect proc
    push    bp
 
    mov bp,sp
x   equ [bp+12]
y   equ [bp+10]
sx  equ [bp+8]
sy  equ [bp+6]
c   equ [bp+4]
    
    mov cx,sy
loop1:
        push    cx
        mov dx,cx
        mov cx,sx
loop2:
    push    dx
    mov ax,x
    add ax,cx
    push    ax
    mov ax,y
    add ax,dx
    push    ax
    mov dx,c
    call    point   
    pop ax
    pop ax
    pop dx
    loop    loop2
    pop cx
    loop    loop1
 
    pop bp
    ret
rect    endp
 
point   proc
    push    bp
    mov bp,sp
x   equ [bp+4]
y   equ [bp+6]
    mov ax,y
    shl ax,2
    add ax,y
    shl ax,4
    add ax,x
    shl ax,1
    mov si,ax
    mov bl,219
    mov es:[si],bl
    inc si
    mov es:[si],dl
    pop bp
    ret
point   endp
 
random  proc    
    mov ax,rnum
    or  ax,ax
    jns getnext
    push    ds
    mov ax,040h
    push    ax
    pop ds
    mov ax,[006ch]
    pop ds
getnext:mul word ptr rconst
    xor dx,dx
    div word ptr rrange
    mov ax,dx
    mov rnum,dx
    xor dx,dx
    div word ptr rmrange
    mov ax,dx
    ret
random endp
 
rnum dw -1; для инициализации генератора
rconst dw 16807 
rrange dw 7fffh
rmrange dw 0ffffh;0-max 
END START

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


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

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

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