masm在屏幕上显示正方形
时间: 2023-08-15 18:07:11 浏览: 47
下面是使用 MASM 汇编语言在屏幕上显示一个正方形的代码示例:
```
.model small
.stack 100h
.data
symbol db '*'
row dw 10
col dw 10
size dw 5
.code
start:
mov ax, @data
mov ds, ax
mov cx, size
outer_loop:
mov dx, col
inner_loop:
mov ah, 02h
mov dl, symbol
int 21h
inc dx
loop inner_loop
inc col, size
cmp col, 80
jle outer_loop
mov ah, 4ch
int 21h
end start
```
这段代码通过在屏幕上打印 `symbol` 变量中的字符来创建一个正方形。`row` 和 `col` 变量用于追踪下一个字符应该打印的位置,`size` 变量定义了正方形的大小。
代码使用 `mov ah, 02h` 和 `int 21h` 指令来在屏幕上打印字符。循环语句用于迭代正方形中的每个字符。最后,`int 21h` 指令用于退出程序。
相关问题
masm汇编表格显示 编程在屏幕上显示一个表格。表格的边框、背景等颜色由用户定制。
以下是一个使用MASM汇编语言在屏幕上显示一个表格的示例代码,包括边框、背景和用户定制颜色:
```
.model small
.stack 100h
.data
; 用户定义的颜色
border_color db 0Ah
background_color db 1Ah
text_color db 0Fh
; 表格宽度和高度
table_width equ 30
table_height equ 10
.code
main proc
mov ax, @data
mov ds, ax
; 设置颜色
mov ah, 06h
mov al, 0
mov bh, 0
mov bl, border_color
int 10h ; 边框颜色
mov ah, 06h
mov al, 0
mov bh, 0
mov bl, background_color
int 10h ; 背景颜色
mov ah, 06h
mov al, 0
mov bh, 0
mov bl, text_color
int 10h ; 文字颜色
; 绘制表格
mov cx, table_height
mov bx, 0
mov dl, '+'
mov dh, '|'
call draw_top_row ; 绘制顶部行
call draw_inner_row ; 绘制内部行
dec cx
call draw_bottom_row ; 绘制底部行
jmp exit_prog
; 绘制顶部行
draw_top_row:
push cx
push bx
mov ah, 02h ; 设置光标位置
mov dh, 0
mov dl, 0
int 10h
mov ah, 09h ; 输出字符
int 21h
mov cx, table_width - 2
mov dl, '-'
rep stosb ; 绘制横线
mov dl, '+'
stosb ; 绘制右上角
mov ah, 02h ; 移动光标到下一行
inc dh
mov dl, 0
int 10h
pop bx
pop cx
ret
; 绘制内部行
draw_inner_row:
push cx
push bx
mov ah, 02h ; 设置光标位置
mov dh, 1
mov dl, 0
int 10h
mov ah, 09h ; 输出字符
int 21h
mov cx, table_width - 2
mov dh, '|'
mov dl, ' '
rep stosw ; 绘制空白
mov dh, '|'
mov dl, 0
stosb ; 绘制右边框
mov ah, 02h ; 移动光标到下一行
inc dh
mov dl, 0
int 10h
pop bx
pop cx
loop draw_inner_row
ret
; 绘制底部行
draw_bottom_row:
push cx
push bx
mov ah, 02h ; 设置光标位置
mov dh, 0Ah
mov dl, 0
int 10h
mov ah, 09h ; 输出字符
int 21h
mov cx, table_width - 2
mov dl, '-'
rep stosb ; 绘制横线
mov dl, '+'
stosb ; 绘制右下角
mov ah, 02h ; 移动光标到下一行
inc dh
mov dl, 0
int 10h
pop bx
pop cx
ret
exit_prog:
mov ah, 4ch
int 21h
main endp
end main
```
在这个示例代码中,用户可以通过更改 `border_color`、`background_color` 和 `text_color` 变量的值来定制表格的颜色。表格的宽度和高度也可以通过更改 `table_width` 和 `table_height` 的值来调整。函数 `draw_top_row`、`draw_inner_row` 和 `draw_bottom_row` 分别绘制表格的顶部行、内部行和底部行。其中,`rep stosb` 和 `rep stosw` 是使用重复指令绘制横线和空白的快捷方式。最后,当程序执行完毕时,通过调用 `exit_prog` 函数来退出程序。
需要该程序在Masm for windows上运行
好的,以下是在Masm for Windows上运行的代码:
```
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
time db 60
msg db '倒计时开始:', 0
.code
start:
mov ah, 02h ; 设置光标位置
mov bh, 0 ; 页码为0
mov dh, 0 ; 行数为0
mov dl, 0 ; 列数为0
int 10h ; 调用BIOS中断
mov ah, 09h ; 打印字符串
mov edx, offset msg ; 字符串地址
call StdOut
mov cx, 1000 ; 延迟1秒
call delay
mov ah, 02h ; 设置光标位置
mov bh, 0 ; 页码为0
mov dh, 0 ; 行数为0
mov dl, 0 ; 列数为0
int 10h ; 调用BIOS中断
mov ah, 02h ; 设置光标颜色
mov bh, 0 ; 页码为0
mov dh, 0 ; 行数为0
mov dl, 0 ; 列数为0
mov al, 0Ah ; 红色背景,亮白色前景
int 10h ; 调用BIOS中断
mov ah, 09h ; 打印倒计时
mov edx, offset time ; 字符串地址
call StdOut
countdown:
mov cx, 1000 ; 延迟1秒
call delay
mov ah, 02h ; 设置光标位置
mov bh, 0 ; 页码为0
mov dh, 0 ; 行数为0
mov dl, 14 ; 列数为14
int 10h ; 调用BIOS中断
dec byte ptr [time] ; 时间减1
cmp byte ptr [time], 0 ; 比较是否为0
jne countdown ; 如果不为0,继续倒计时
invoke ExitProcess, 0
delay:
mov bx, cx
mov dx, 0
loop1:
mov ax, 0FFFFh
dec ax
jnz loop1
dec bx
jnz delay
ret
end start
```
这个程序与之前的程序基本相同,只是使用了Masm for Windows的库函数进行输出。你可以在Masm for Windows中直接编译运行这个程序。