8086汇编 实验 10

发布时间 2023-04-01 19:36:06作者: 皮豪

image

显示字符串

assume cs:code,ds:data,ss:stack

data segment
	db 'Welcome to masm!',0
data ends

stack segment
	dd 16 dup(0)
stack ends

code segment
start:
	mov ax,0B800H
	mov es,ax
	mov ax,data
	mov ds,ax
	mov ax,stack
	mov ss,ax
	mov sp,32 ;; 初始化段址寄存器
	
	mov dh,10 ;; 行号
	mov dl,0 ;; 列号
	mov ch,0
	mov cl,11000010B ;;颜色 

	call show_str

	mov ax,4c00h
	int 21h

show_str:
	mov ax,0
	mov al,160 ;; 每段的字符数量
	mul dh ;; 字符数 乘以 行号

	mov dh,0 ;; 00[dl] == 00A0H
	add ax,dl ;; 每行起始为 0 ,+dl 就是 列的偏移

	mov si,ax ;; 每行字符不超过160,总共是25行,所以用 16位乘法刚好
	mov di,0 ;; 初始化 ds的偏移地址寄存器
	
	mov dl,cl ;; 保存cx 到 dx中,也就是存放的 cl 数据

	s:
		mov ch,0
		mov cl,[di]
		jcxz out  ;; 如果 cl 为 0 ,则是已到最后 一个 字符,跳出循环
		;; 判断完后,恢复cx

		mov byte ptr es:[si],cl;; 这个cl是 字符的信息
		mov byte ptr es:[si+1],dl

		inc di
		add si,2

		loop s
	out:
		mov byte ptr es:[si],'0'
		mov byte ptr es:[si+1],11000010B
		ret

code ends

end start