用汇编语言完成一个图形变换的程序,系统具有4 种可选择的功能,按字母“Y”画一个用点组成的圆;按字母“S”画一个用不同颜色填充的三角形;按字母“Z”画一个用不同颜色填充的图形;按“q”键退出。
时间: 2023-09-18 12:10:20 浏览: 206
以下是一个使用汇编语言完成图形变换的程序,可以实现根据输入的命令绘制不同的图形,支持圆、三角形和其他任意形状的填充图形。程序使用VGA显卡模式,需要在支持VGA显卡的计算机上运行。
```
.model small
.stack 100h
.data
msg db "Enter command(Y=Semicircle, S=Triangle, Z=Fill Shape, q=Quit): $"
color db 0
x db 0
y db 0
r db 0
i db 0
.code
start:
mov ax, @data
mov ds, ax
mov ah, 0
mov al, 13h
int 10h ; 设置VGA显卡模式
mov ah, 9
lea dx, msg
int 21h ; 显示提示信息
mov ah, 1
int 21h ; 读取命令
cmp al, 'Y'
je draw_circle
cmp al, 'S'
je draw_triangle
cmp al, 'Z'
je draw_shape
cmp al, 'q'
je exit
jmp start ; 无效命令,重新输入
draw_circle:
mov ax, 0a000h
mov es, ax ; 设置显存地址
mov color, 1 ; 设置颜色
mov x, 320 ; 设置圆心坐标
mov y, 240
mov r, 100 ; 设置半径
mov i, 0
draw_circle_loop:
inc i
cmp i, 360
jg start
push cx
push dx
mov cx, x
mov dx, y
mov al, color
stosb ; 在显存中绘制点
pop dx
pop cx
mov ah, 0
mov al, i
mul r
mov bx, 180
div bx
add al, 90
mov ah, 0
mov bl, al
mov al, bh
mov cx, r
mul cx
mov cx, ax
mov ah, 0
mov al, bl
mov dx, r
mul dx
mov dx, ax
sub cx, dx
mov bx, 1024
div bx
add cx, x
sub dx, 768
mov ax, cx
mov bx, dx
push ax
push bx
mov ax, 0a000h
mov es, ax
mov al, color
stosb ; 在显存中绘制点
pop bx
pop ax
mov x, bx
mov y, ax
jmp draw_circle_loop
draw_triangle:
mov ax, 0a000h
mov es, ax ; 设置显存地址
mov color, 2 ; 设置颜色
mov x, 320 ; 设置三角形顶点坐标
mov y, 100
mov cx, 50
mov cy, 200
mov dx, 400
mov dy, 200
mov i, 0
draw_triangle_loop:
inc i
cmp i, 20000
jg start
push cx
push dx
mov ax, x
mov bx, cx
sub bx, ax
mov cx, i
mul bx
mov bx, 20000
div bx
add ax, x
mov cx, y
mov bx, cy
sub bx, cx
mov dx, i
mul bx
mov bx, 20000
div bx
add ax, y
push ax
mov ax, dx
mov bx, dy
sub bx, ax
mov cx, i
mul bx
mov bx, 20000
div bx
add ax, dy
push ax
mov ax, 0a000h
mov es, ax
mov al, color
stosb ; 在显存中绘制点
pop dx
pop cx
jmp draw_triangle_loop
draw_shape:
mov ax, 0a000h
mov es, ax ; 设置显存地址
mov color, 3 ; 设置颜色
mov i, 0
draw_shape_loop:
inc i
cmp i, 20000
jg start
push cx
push dx
mov cx, i
mov dx, 10000
div dx ; 将计算结果缩小,使形状更加平滑
mov bx, 10
div bx
mov x, ax
mov cy, 200
mov dx, 300
mov ax, x
mul x
add ax, cy
mov y, ax
push ax
push dx
mov ax, 0a000h
mov es, ax
mov al, color
stosb ; 在显存中绘制点
pop dx
pop cx
jmp draw_shape_loop
exit:
mov ah, 0
mov al, 3
int 10h ; 恢复文本模式
mov ah, 4ch
int 21h ; 退出程序
end start
```
程序中使用了三个子程序来分别绘制圆、三角形和填充图形,每个子程序都使用了不同的算法来实现图形的绘制。在程序中,使用了VGA显卡的显存进行图形绘制,通过设置不同的颜色来实现图形的填充效果。程序可以根据用户的输入来选择不同的绘制功能,支持退出操作。
阅读全文