汇编实验9

多操作一下就行了。可能不是最简。
平常我们是用debug单步调试的,但是想看到整体的颜色变化
就要直接在dosbox中直接运行了。
代码:
assume cs:codesg,ds:datasg,ss:color
datasg segment
	db 'welcome to masm!'
datasg ends

color segment
	dw 0,130,36,57  ;闪一闪
color ends

codesg segment
start:	mov ax,datasg
	mov ds,ax
	
	mov ax,0B878H

;直接在dosbox中运行本程序
;0B80a  第一行
;0B80a+a(十进制为10)=0B814 第二行
;13行为中间行,即第一行加12行 C*A=78  B80a+78=B882

;第一行为0a只能加多23行即E6到第24行,使es=B8F0
;能加24行到第25行,成为B8Fa但是运行完后从
;本程序返回到dosbox程序会显示在25行所以看起来是没有效果

;在dosbox中运行debug再运行本程序
;0B8e6 倒数5行
;B828 开头
;B8aa 中间
;B8f0 结尾

;要显示三个字符串在中间 所以在12、13、14行显示
;12行B882-a=B878
	mov es,ax
	mov si,0
	mov di,64		;显示在水平方向上的中间80/2-8个字符=32 
				;32*2=64
	
	mov ax,color
	mov ss,ax
	mov sp,1
	pop ax			;改变颜色
	
	
	mov cx,3
s0:	push cx			;外循环 颜色栈与循环栈合在一起用了
	mov cx,16
				;内循环开始
s1:	mov al,ds:[si]		;改变字符 
	mov es:[di],ax		;写入显存 
	inc si
	add di,2
	loop s1			;内循环结束

	pop cx			;外循环
	mov si,0		;重新赋值
	mov di,64
	
	pop ax			;从栈中取出新的颜色
	
	mov bx,es		;修改要修改的显示的行数
	add bx,10
	mov es,bx
	loop s0

	mov ax,4c00h
	int 21h
codesg ends

end start


汇编实验9