一、实验要求
二、代码实现
1 assume cs:code,ds:data 2 3 data segment 4 db ‘welcome to masm!‘,0 5 data ends 6 7 code segment 8 start: mov dh,8 ;定义行(0-24) 9 mov dl,3 ;定义列(0-79) 10 mov cl,2 ;定义颜色 11 mov ax,data 12 mov ds,ax 13 mov si,0 ;指向字符串的首地址 14 call show_str ;调用子程序 15 16 mov ax,4c00h 17 int 21h 18 19 show_str: push cx 20 push si 21 22 mov al,0A0h ;每一行160个字节 23 dec dh ;行号从0开始,需要减去1 24 mul dh ;求出行的偏移量(结果存放到了ax中) 25 mov bx,ax ;将行偏移量暂存到寄存器bx中 26 27 mov al,2 ;一个数据2个字符,包含数据和颜色属性 28 dec dl ;列号从0开始,需要减去1 29 mul dl ;求出列偏移量(结果存放到了ax中) 30 31 add bx,ax ;行和列的偏移量加在一起,就是该字符串首地址在显存中的偏移地址 32 33 34 mov ax,0b800h ;显存段地址 35 mov es,ax ;显存段地址保存到es寄存器中 36 37 38 mov di,0 ;显存中传递列值 39 mov ch,0 40 mov al,cl ;颜色数据保存到ax寄存器低位中 41 42 s: mov cl,ds:[si] ;传递数据 43 jcxz ok ;至到原始数据偏移到数据0的时候,表明所有原始数据已处理完成 44 ;然后跳转到标号ok 45 46 mov es:[bx+di],cl ;传递数据 47 mov es:[bx+di+1],al ;传递颜色 48 49 inc si ;每处理一个字节,偏移地址自增1 50 add di,2 ;每处理二个字节(包含一个数据和一个颜色属性),偏移地址自增2 51 jmp short s 52 53 ok: pop si 54 pop cx 55 ret 56 code ends 57 end start
三、实验结果
原文地址:https://www.cnblogs.com/TonyJia/p/12605503.html
时间: 2024-11-10 13:15:19