(Afficher la chaîne de couleur spécifiée dans la position spécifiée) Troisième édition de Wang Shuang de l'expérience de langage d'assemblage 10.1

Caractéristiques

Utiliser la couleur spécifiée à la position spécifiée, afficher une chaîne terminée par 0 et
afficher le contenu de la section de données en vert sur 8 lignes et 3 colonnes de l'écran

section de codes

1. Initialisation

Tout d'abord, la chaîne spécifiée est donnée dans le segment de données et le
segment de pile est initialement vide à la fin de 0.

assume cs:code,ds:data,ss:stack
data segment
	db 'Welcome to masm!',0
data ends
stack segment stack
	db 128 dup(0)
stack ends

Initialiser ss, sp représente la pile

		mov ax,stack
		mov ss,ax
		mov sp,128

Appelez la fonction d'initialisation pour initialiser ds pour représenter le segment de données et es pour représenter la position dans l'écran

init_reg:
		mov bx,0b800h
		mov es,bx

		mov bx,data
		mov ds,bx
		ret

Le titre nous oblige à afficher dans la huitième ligne et la troisième colonne, nous écrivons des fonctions pour définir respectivement la ligne et la colonne

Fonction de ligne, chaque ligne occupe 160 octets, il suffit donc de régler le registre sur 160*le nombre de lignes, puis d'utiliser le registre es+

get_row:
		mov al,160
		mul dh
		ret	

La fonction de la colonne, chaque position occupe deux octets, le premier représente le contenu, et le second représente la couleur, il faut donc ici donner le nombre de colonnes * 2, puis utiliser le registre es+.

get_col:
		mov al,2
		mul dl
		ret
2. Nettoyez l'écran

Il n'y a pas de nettoyage d'écran dans le titre, mais ici nous écrivons une fonction pour nettoyer l'écran par souci de beauté,
réglez directement dx sur 0700h 07 signifie vide 00 signifie pas de couleur, puis réglez le nombre de cycles sur 2000 fois, et assignez dx à es:[di] à chaque fois Ça y est, pensez à pousser le registre utilisé par la pop

clear_screen:
		push bx
		push cx
		push es
		push si

		mov bx,0b800h
		mov es,bx
		mov si,0
		
		mov dx,0700h
		mov cx,2000
clearscreen:
		mov es:[si],dx
		add si,2
		loop clearscreen

		pop si
		pop es
		pop cx
		pop bx
		ret

3. Chaîne d'affichage

L'idée générale : assignez le contenu de ds à cl, puis jugez d'abord que si cl vaut 0, sortez directement de la boucle, assignez le contenu d'affichage à es:[si] dans la boucle, et assignez la couleur à es : [si+1]

show_string:
		push ax
		push cx
		push es
		push ds
		push di
		push si


		mov cx,0

showstring:
		mov cl,ds:[si]		
		jcxz show_string_ret	;字符串以0结尾(循环出口)
		mov es:[di],cl
		mov es:[di+1],dl
		add di,2
		inc si
		jmp showstring	

show_string_ret:
		pop si
		pop di
		pop ds
		pop es
		pop cx
		pop ax

		ret
code complet
assume cs:code,ds:data,ss:stack
data segment
	db 'Welcome to masm!',0
data ends
stack segment stack
	db 128 dup(0)
stack ends
code segment

	start:
		mov ax,stack
		mov ss,ax
		mov sp,128

		call init_reg

		mov di,0
		mov dh,8
		call get_row		;行
		add di,ax

		mov dl,3
		call get_col		;列
		add di,ax

		call clear_screen	;清理屏幕

		mov cl,2
		mov dl,cl		;颜色
		call show_string	;显示字符串
		

		mov ax,4c00h
		int 21h

;================================================
clear_screen:
		push bx
		push cx
		push es
		push si

		mov bx,0b800h
		mov es,bx
		mov si,0
		
		mov dx,0700h
		mov cx,2000
clearscreen:
		mov es:[si],dx
		add si,2
		loop clearscreen

		pop si
		pop es
		pop cx
		pop bx
		ret


;================================================
show_string:
		push ax
		push cx
		push es
		push ds
		push di
		push si


		mov cx,0

showstring:
		mov cl,ds:[si]		
		jcxz show_string_ret	;字符串以0结尾(循环出口)
		mov es:[di],cl
		mov es:[di+1],dl
		add di,2
		inc si
		jmp showstring	

show_string_ret:
		pop si
		pop di
		pop ds
		pop es
		pop cx
		pop ax

		ret

;================================================
get_col:
		mov al,2
		mul dl
		ret


;================================================
get_row:
		mov al,160
		mul dh
		ret	


;================================================
init_reg:
		mov bx,0b800h
		mov es,bx

		mov bx,data
		mov ds,bx
		ret

Effet

insérez la description de l'image ici
La compilation est amusante

Je suppose que tu aimes

Origine blog.csdn.net/weixin_46035615/article/details/124132762
conseillé
Classement