zoukankan      html  css  js  c++  java
  • 王爽《汇编语言》(第三版)实验13解析

    编译并安装int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200

    assume cs:code
    assume cs:code
    code segment
    start:	mov ax,cs
    		mov ds,ax
    		mov si,offset show
    		mov ax,0
    		mov es,ax
    		mov di,200h
    		mov cx,offset showend - offset show
    		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
    		
    show:	push dx
    		push cx
    		push si
    		
    		mov di,0	
    		
    		;dec dh		; 此处是个坑!
    		mov ah,0
    		mov al,160  
    		mul dh		
    		
    		mov di,ax   
    		
    		dec dl	
    		mov ah,0
    		mov al,2		
    		mul dl		
    		add di,ax	
    		
    		mov ax,0b800h
    		mov es,ax	;指定显示缓存区的内存位置
    		
    		mov al,cl	; 由于后面jcxz语句的判断要用到cx,所以我们要将
    					; cl(颜色)先存下来。
    		
    		
    next:	mov cl,ds:[si]
    		mov ch,0
    		jcxz ok
    		mov es:[di],cl		;存字符
    		mov es:[di+1],al	;存颜色
    		inc si
    		add di,2
    		jmp short next
    		
    	ok:	pop si
    		pop cx
    		pop dx
    		iret
    showend:nop
    
    code ends
    end start
    

    编译并安装int 7ch中断例程,功能为完成loop指令的功能

    assume cs:code
    code segment
    start:	mov ax,cs
    		mov ds,ax
    		mov si,offset lp
    		mov ax,0
    		mov es,ax
    		mov di,200h
    		mov cx,offset lpend - offset lp
    		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
    
    lp:		push bp
    		mov bp,sp
    		dec cx
    		jcxz lpret
    		add [bp+2],bx	; bx为从标号 se 到标号 s 转移位移
    lpret:	pop bp
    		iret
    lpend:	nop
    code ends
    
    end start
    

    下面的程序,分别在第2、4、6、8行显示4句英文诗,补全程序。

    assume cs:code
    code segment
    	s1: db 'Good,better,best,','$'
    	s2: db 'Never let it rest,','$'
    	s3: db 'Till good is better,','$'
    	s4: db 'And better,best.','$'
    	s : dw offset s1,offset s2,offset s3,offset s4
    	row: db 2,4,6,8
    	
    start:	mov ax,cs
    		mov ds,ax
    		mov bx,offset s		;四行诗句的首地址的首地址
    		mov si,offset row	;行号的首地址
    		mov cx,4
    	ok:	mov bh,0	;第0页
    		mov dh,ds:[si]		;行号
    		mov dl,0	;列号
    		mov ah,2	;置光标
    		int 10h
    		
    		mov dx,ds:[bx]	;ds:dx 指向字符串的首地址
    		mov ah,9	;ah=9 调用21h中断例程的9号子程序,
    		int 21h		;功能是在光标位置显示字符串
    		inc si
    		add bx,2
    		loop ok
    		mov ax,4c00h
    		int 21h
    code ends
    end start
    
  • 相关阅读:
    day50_BOS项目_02
    day51_BOS项目_03
    Criteria 和 DetachedCriteria 的区别
    ecplise中如何关闭Tomcat的自动重启/加载
    Tomcat的Start可以启动起来,但是Debug启动突然启动不起来,一直停在 Class<T>.getDeclaredConstructors0(boolean) line: not available [native method] 的解决办法
    windows下读取Linux分区软件
    15 条实用 Linux/Unix 磁带管理命令
    Nginx安装与配置文件解析
    专注docker安全:Security Scanning
    清除linux系统的多余引导
  • 原文地址:https://www.cnblogs.com/nojacky/p/13905846.html
Copyright © 2011-2022 走看看