📜  颤动中富文本行之间的空间 - 汇编(1)

📅  最后修改于: 2023-12-03 14:58:47.119000             🧑  作者: Mango

颤动中富文本行之间的空间 - 汇编

在富文本编辑器中,每行文本之间都有一个行间距,通常是一定的固定值。但是,有时我们需要在某些行之间添加一些效果,比如让它们颤动起来,或者动态改变它们之间的距离。这就需要我们掌握汇编语言中的一些技巧。

修改行间距

我们可以使用中断号10H来控制屏幕的输出。其中,AH寄存器中的值是功能号,AL寄存器中的值是要输出字符的ASCII码。而要控制行间距,我们需要修改AH寄存器的值。

具体地,在DOS中,每次输出一行字符,屏幕将光标移动到下一行开始的位置。这通常是高度+1的位置,即BH寄存器中的值。因此,如果我们想修改行间距,就需要改变BH寄存器中的值。

以下是修改行间距的汇编代码,将行间距设置为10个字符:

mov ah, 3
mov bh, 10
int 10H
颤动文字

如果想要让文字颤动起来,我们需要先定义一个字符数组,然后在循环中改变字符数组中的每个元素的位置,使其随机偏移。这样就可以实现文字颤动的效果。

以下是颤动文字的汇编代码:

;定义字符数组
char_array db 'Hello, World!$'

;定义循环
loop:
;设置随机偏移量
mov ah,06h
mov bh,00h
int 16h
mov bl,05h
and ah,bl
;修改数组中每个字符的位置
mov si,0
mov cx, 13
rand:
mov dl,[char_array+si]
add dl,ah
mov [char_array+si],dl
inc si
loop rand
;输出字符数组
mov ah,09h
mov dx,offset char_array
int 21h
;延迟
mov cx, 30000
delay:
loop delay
jmp loop

其中,mov ah,06hint 16h是用来生成随机数的。具体来说,al寄存器中的值是随机数,范围在0到255之间。

返回结果

下面是以上两个示例代码的Markdown格式的返回结果:

修改行间距
mov ah, 3
mov bh, 10
int 10H 
颤动文字
;定义字符数组
char_array db 'Hello, World!$'

;定义循环
loop:
;设置随机偏移量
mov ah,06h
mov bh,00h
int 16h
mov bl,05h
and ah,bl
;修改数组中每个字符的位置
mov si,0
mov cx, 13
rand:
mov dl,[char_array+si]
add dl,ah
mov [char_array+si],dl
inc si
loop rand
;输出字符数组
mov ah,09h
mov dx,offset char_array
int 21h
;延迟
mov cx, 30000
delay:
loop delay
jmp loop