汇编网首页登录博客注册
ddcw的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
最新留言
好友圈
文章收藏
友情链接

[2009-04-14 16:23] 实验10之显示字符串

标号s开始是子程序的内容,通过jcxz得到字符串长度,作为循环次数。




;说明:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0-24),(dl)=列号(0-79) (cl)=颜色 ds:si指向首地址
;返回:无
assume cs:code 
data segment
  db 'welcome to masm'
data ends
stack segment
  dd 16 dup (0)
stack ends
code segment
  start:mov ax,stack
        mov ss,ax
        mov sp,64
        mov dh,8
        mov dl,3
        mov cl,02h
        mov ax,data
        mov ds,ax
        mov si,0
        call s
        mov ax,4c00h
        int 21h



s:push si
  push ax
  push bx
  push cx
  push dx
  push es
mov bl,cl  ;由于cx要使用必须首先传递值到bl中
push si
 s3:mov cx,0
  mov cl,[si]
  jcxz s1
  inc si
  jmp s3

 s1:mov cx,si ;取得了字符串长度,作为循环次数(已验证正确性)
    pop si    ;还原si到初始值(已验证正确性)

    mov ax,0b80ah
    mov es,ax
    mov al,80
    mul dh    
    mov dh,0
    add ax,dx  ;通过((dh)x80+dl)x2算出了偏移地址
    add ax,ax
    mov di,ax
    

 s2:mov al,[si]
    mov es:[di],al
    mov es:[di+1],bl
    inc si
    add di,2
    loop s2

    pop es
    pop dx
    pop cx
    pop bx
    pop ax
    pop si
 ret
code ends
end start
评论次数(1)  |  浏览次数(374)  |  类型(实验分析) |  收藏此文  | 

[  游客   发表于  2009-04-15 08:58  ]

没问题。继续。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码