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

我的博客

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

[2009-06-04 17:11] 实验10的第一个子程序SHOW_STR

DATAS SEGMENT
    ;此处输入数据段代码  
    db 'welcome to masm!',0
DATAS ENDS

STACKS SEGMENT
    dw 0,0,0,0,0,0,0,0,0,0;定义10个字单元
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
        ;以下代码分别设置行号8,列号3,以及颜色2(绿色)
        MOV DH,8
        MOV DL,3
        MOV CL,2
        ;以下代码设置DS:[SI]指向数据段的第一个字节,即'w'
    MOV AX,DATAS
    MOV DS,AX
    MOV SI,0
           ;初始化堆栈段
    MOV AX,STACKS
    MOV SS,AX
    MOV SP,20
    ;调用子程序
           CALL SHOW_STR         
           MOV AH,4CH
    INT 21H
SHOW_STR:
        ;保存寄存器的值
        PUSH AX
        PUSH CX
        PUSH DX
        PUSH SS
        PUSH SP
        
        ;设置显存的断地址
        MOV AX,0B800H
        MOV ES,AX
        ;下面计算偏移地址,计算公式为:80×(r-1)×2+(c-1)×2 = 160×r+2×c-162 (其中r为行row,列为column)
        ;先计算160*r的值,把其储存到BX中
        MOV AL,160
        MUL DH
        MOV BX,AX
        ;在计算2*c,其值存储在AX中
        MOV AL,2
        MUL DL
          ADD AX,BX
          SUB AX,162
          ;把偏移地址储存在DI中
          MOV DI,AX
          MOV AL,CL
COPY:
        MOV CL,DS:[SI]
        MOV CH,0
        JCXZ RETURN
        MOV ES:[DI],CL
        MOV ES:[DI+1],AL
        ADD SI,1
        ADD DI,2
        JMP COPY  
RETURN:
        POP SP
        POP SS
        POP DX
        POP CX
        POP AX
        RET  
    
CODES ENDS
    END START
评论次数(1)  |  浏览次数(566)  |  类型(汇编作业) |  收藏此文  | 

[  游客   发表于  2009-06-10 16:31  ]

正确。

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