王爽 汇编 实验10.1

一、实验要求

 二、代码实现

 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

三、实验结果

猜你喜欢

转载自www.cnblogs.com/TonyJia/p/12605503.html
今日推荐