鱼C论坛

 找回密码
 立即注册
查看: 1789|回复: 1

实验10,求思路,有点模糊

[复制链接]
发表于 2012-8-4 12:00:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code,ds:data

data segment

     db 'welcome to masm!',0

data ends

code segment

start:   mov dh,8  ;dx=0800

     mov dl,3    ;dx=0803

     mov cl,2    ;cx=0002

     mov ax,data   ;data=0caf ax=data

     mov ds,ax     ;ds=0caf

     mov si,0     ;si=0000

     call show_str   ;call 0016   ip=0016 sp=fffe



     mov ax,4c00h

     int 21h



;名称:show_str

;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。

;参数:(dh)=行号(取值范围0~24);

;      (dl)=列号(取值范围0~79);

;      (cl)=颜色;

;      ds:si指向字符串的首地址。

;返回:无。

show_str:

     push ax   ;0017  sp=fffc

     push bx   ;0018   sp=fffa

     push es   ;0019  sp=fff8

     push si    ;001a  sp=fff6
         
         ;----------------------------------------------------------
         ;mov bx,(160*dh+dl*2)设置es:bx指向显存首地址
     mov ax,0b800h   ;ax=b800

     mov es,ax      ;es=b800

     mov ax,160     ;ax=00a0

     mul dh         ;ax=0500

     mov bx,ax ;bx=160*dh  

     mov ax,2

     mul dl        ;ax=dl*2

     add bx,ax     ;mov bx,(160*dh+dl*2)设置es:bx指向显存首地址
         ;
         ;------------------------------------------------------------
     mov al,cl     ;把颜色cl赋值al

     mov cl,0

show0:

     mov ch,[si]    ;cx=0000 变为cx=7700

     jcxz show1    ;(ds:si)=0时,转到show1执行,等于0会是什么情况?      

     mov es:[bx],ch

     mov es:[bx].1,al

     inc si        ;ds:si指向下一个字符地址

     add bx,2      ;es:bx指向下一个显存地址

     jmp show0

show1:

     pop si

     pop es

     pop bx

     pop ax

     ret



code ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-4 12:40:21 | 显示全部楼层
等于0会是什么情况?
要打印的数据不是在ds段嘛,然后字符串又是以0为结尾的。等于0了,自然就是到了最后一个字节了,就是打印字符串结束了,这个子程序可以ret了,当然ret前要把push进去的pop出来。如果检测出来不为0,就执行
inc si        ;ds:si指向下一个字符地址

     add bx,2      ;es:bx指向下一个显存地址

准备打印下一个字符。直到检测到0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 06:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表