• 王爽《汇编语言》(第三版)实验16解析


    安装程序

    assume cs:code 
    code segment 
    
    start:	mov ax,cs
    		mov ds,ax
    		mov si,offset setscreen
    		mov ax,0
    		mov es,ax
    		mov di,200h
    		mov cx,offset setscreenend-offset setscreen
    		cld
    		rep movsb
    		
    		mov ax,0
    		mov es,ax
    		mov word ptr es:[7ch*4],200h
    		mov word ptr es:[7ch*4+2],0
    		
    		mov ax,4c00h
    		int 21h
    
    setscreen:
    			cmp ah,0	; 清屏
    			je do1
    			cmp ah,1	; 设置前景色
    			je do2
    			cmp ah,2	; 设置背景色
    			je do3
    			cmp ah,3	; 向上滚动一行
    			je do4
    			jmp short sret
    		
    		do1:call sub1
    			jmp short sret
    		do2:call sub2
    			jmp short sret
    		do3:call sub3
    			jmp short sret
    		do4:call sub4
    		
    		sret: ret
    		
    	sub1:	push bx
    			push cx
    			push es
    			
    			mov bx,0b800h
    			mov es,bx
    			mov bx,0
    			mov cx,2000
    	sub1s:	mov byte ptr es:[bx],' '
    			add bx,2
    			loop sub1s
    			
    			pop es
    			pop cx
    			pop bx
    			ret
    		
    	sub2:	push bx
    			push cx
    			push es
    			
    			mov bx,0b800h
    			mov es,bx
    			mov bx,1
    			mov cx,2000
    	sub2s:	and byte ptr es:[bx],11111000b
    			or es:[bx],al
    			add bx,2
    			loop sub2s
    			
    			pop es
    			pop cx
    			pop bx
    			ret
    		
    	sub3:	push bx
    			push cx
    			push es
    			
    			mov cl,4
    			shl al,cl
    			mov bx,0b800h
    			mov es,bx
    			mov bx,1
    			mov cx,2000
    	sub3s:	and byte ptr es:[bx],10001111b
    			or es:[bx],al
    			add bx,2
    			loop sub3s
    			
    			pop es
    			pop cx
    			pop bx
    			ret
    		
    	sub4:	push cx
    			push si
    			push di			
    			push es
    			push ds
    			
    			mov si,0b800h
    			mov es,si
    			mov ds,si
    			mov si,160
    			mov di,0
    			cld
    			mov cx,24
    			
    	sub4s:	push cx
    			mov cx,160
    			rep movsb
    			pop cx
    			loop sub4s
    			
    			mov cx,80
    			mov si,0
    	sub4s1:	mov byte ptr [160*24+si],' '	;最后一行清空
    			add si,2
    			loop sub4s1
    			
    			pop ds 
    			pop es
    			pop di
    			pop si
    			pop cx
    			ret
    setscreenend: nop
    
    code ends
    end start
    

    测试

    assume cs:code
    
    code segment
    		
    start:	;mov ah,0	;清屏
    		
    		;mov ah,1
    		;mov al,7	; 设置前景色,al为颜色
    		
    		;mov ah,2
    		;mov al,7	; 设置背景色,al为颜色
    		
    		;mov ah,3	; 向上滚动一行
    		int 7ch
    		
    		mov ax,4c00h
    		int 21h
    code ends
    
    end start
    
  • 相关阅读:
    IO模式 select、poll、epoll
    C++设计模式——SingleTon单件模式
    C和C++区别——前置自增与后置自增
    进程——父子进程共享
    一个例子理解c++函数模板的编译
    C/C++多参数函数参数的计算顺序与压栈顺序
    经常登录Linux,用户密码背后的知识了解一下
    一道值得思考的fork()面试题
    vim实用快捷键整理
    Linux硬链接与软连接
  • 原文地址:https://www.cnblogs.com/nojacky/p/13905862.html
Copyright © 2020-2023  润新知