汇编语言中,怎么得到已经设置过的屏幕显示的长,宽大小
时间: 2024-02-18 21:06:17 浏览: 27
在汇编语言中,可以通过调用 BIOS 中断来获取已经设置过的屏幕显示的长和宽大小。具体步骤如下:
1. 设置 AH 寄存器为 0Fh,表示获取当前视频模式信息。
2. 调用 INT 10h 中断,获取当前视频模式信息。
3. 从返回的信息中获取屏幕的列数和行数,分别存储到变量 COLS 和 ROWS 中。
下面是示例代码:
```
MOV AH, 0Fh ; 设置 AH 寄存器为 0Fh
INT 10h ; 调用 INT 10h 中断,获取当前视频模式信息
MOV COLS, CX ; 将列数存储在 COLS 变量中
MOV ROWS, DX ; 将行数存储在 ROWS 变量中
```
其中,COLS 和 ROWS 分别是存储列数和行数的变量,在实际应用中需要根据具体情况进行调整。
相关问题
dosbox汇编语言上机过程及屏幕字符显示程序
好的,我来回答你的问题。
首先,要在DosBox中进行汇编语言的上机操作,需要安装一个汇编语言的编译器,比如Turbo Assembler(TASM)。
安装完TASM之后,我们就可以开始编写屏幕字符显示程序了。下面是一份简单的汇编程序示例:
```
.model small
.stack 100h
.data
msg db 'Hello, World!', 0
.code
main proc
mov ax, @data
mov ds, ax
mov ah, 09h
mov dx, offset msg
int 21h
mov ah, 4ch
int 21h
main endp
end main
```
这份程序的作用是在屏幕上显示一行文字“Hello, World!”,然后退出程序。
程序的第一行`.model small`定义了程序的内存模型,这里使用的是“small”模型,表示程序占用的内存空间比较小。
`.stack 100h`定义了堆栈的大小为100h,也就是256字节。
`.data`段用来定义程序中用到的数据,这里定义了一个名为“msg”的字符串变量,内容为“Hello, World!”,0表示字符串的结束符。
`.code`段是程序的主要代码部分,其中`main proc`表示定义了一个名为“main”的过程。
在`main`过程中,首先将数据段的地址保存到`ax`寄存器中,再将`ax`的值赋给`ds`寄存器,这样就可以在程序中访问`.data`段中定义的变量了。
接下来,使用`mov ah, 09h`将09h赋给`ah`寄存器,09h是显示字符串的中断号。然后将`msg`变量的地址保存到`dx`寄存器中,这样中断服务程序就知道要显示哪个字符串了。最后使用`int 21h`调用21h中断,实现屏幕上的字符显示。
最后,使用`mov ah, 4ch`将4ch赋给`ah`寄存器,4ch是结束程序的中断号。然后使用`int 21h`调用21h中断,退出程序。
这就是一个简单的屏幕字符显示程序的汇编代码。在DosBox中,可以使用TASM进行编译,得到一个可执行文件,然后运行这个可执行文件就可以看到屏幕上显示“Hello, World!”了。
用8086汇编语言在显示屏中央打开一个大小可以调整的窗口
好的,以下是一个基本的示例程序,它可以在显示屏中央打开一个大小可调节的窗口。
```
; 8086 Assembly program to create a resizable window in the center of the screen
.model small
.stack 100h
.data
rows dw 10 ; default number of rows
cols dw 20 ; default number of columns
x dw ?
y dw ?
width dw ?
height dw ?
buffer db 32000 dup (?) ; video buffer
window db 100 dup (?) ; window buffer
.code
main proc
mov ax, @data
mov ds, ax
; Get the screen mode
mov ah, 0fh
int 10h
mov x, ax
; Calculate the position and size of the window
mov ah, 0
mov al, x
mul cols
mov width, ax
mov ah, 1
mov al, x
mul rows
mov height, ax
sub height, 2 ; account for title bar and border
mov x, (80 - width) / 2
mov y, (25 - height) / 2
; Draw the window
mov si, offset window
mov cx, cols
mov dx, rows
mov ah, 6
mov bh, 0
mov bl, 15h ; white on black
mov bp, si
int 10h
; Wait for a key press
mov ah, 0
int 16h
; Resize the window
mov ah, 0fh
int 10h
mov x, ax
mov ah, 0
mov al, x
div cols
mov rows, ax
mov cols, dl
; Calculate the new position and size of the window
mov ah, 0
mov al, x
mul cols
mov width, ax
mov ah, 1
mov al, x
mul rows
mov height, ax
sub height, 2 ; account for title bar and border
mov x, (80 - width) / 2
mov y, (25 - height) / 2
; Clear the old window
mov si, offset window
mov cx, cols
mov dx, rows
mov ah, 6
mov bh, 0
mov bl, 0 ; black on black
mov bp, si
int 10h
; Draw the new window
mov si, offset window
mov cx, cols
mov dx, rows
mov ah, 6
mov bh, 0
mov bl, 15h ; white on black
mov bp, si
int 10h
; Wait for a key press
mov ah, 0
int 16h
mov ah, 4ch
int 21h
main endp
end main
```
以上代码使用了BIOS中断来显示窗口,具体实现如下:
1. 首先使用中断10h的0fh功能来获取当前的屏幕模式,并通过模式和列数计算窗口的宽度。然后通过模式和行数计算窗口的高度,并减去标题栏和边框的高度。
2. 计算窗口的位置,使其在屏幕中央居中。
3. 使用中断10h的6号功能来在屏幕上绘制一个矩形,代表窗口。在这里,我们使用一个大小为100的缓冲区来存储窗口,然后将其传递给中断10h来绘制。
4. 等待用户按下一个键。
5. 获取窗口的新大小,即行数和列数。
6. 重新计算窗口的位置和大小。
7. 使用中断10h的6号功能来清除旧窗口。
8. 使用中断10h的6号功能来绘制新窗口。
9. 等待用户按下一个键。
10. 退出程序。
请注意,以上代码仅仅是一个示例,还有很多改进的余地。如果您想更深入地了解8086汇编语言或BIOS中断的使用,可以参考相关的书籍和文档。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)