• 王爽《汇编语言》(第三版)实验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
    
  • 相关阅读:
    聊聊自定义实现的SPI如何与spring进行整合
    聊聊读源码这件事
    聊聊自定义SPI如何使用自定义标签注入到spring容器中
    聊聊如何自定义数据脱敏
    聊聊自定义SPI如何与sentinel整合实现熔断限流
    排查not eligible for getting processed by all BeanPostProcessors
    SqlServer 数据脱敏脚本
    WPF 窗体使用 Show() 单个显示并设置弹窗相对于主窗体位置
    【SQLite】获取插入 ID 的几种方式
    Winform DataGridView 行单元格增加自定义 ToolTip
  • 原文地址:https://www.cnblogs.com/nojacky/p/13905846.html
Copyright © 2020-2023  润新知