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

我的博客

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

[2008-05-31 10:49] 第九章实验9

实验9
自己汇编指令掌握不熟练,眼高手低,知道思路,不知道具体如何写汇编程序,有思路没步骤,找了个别人写的程序,编译分析了下,以后掌握熟练了再回来仔细想想.
assume cs:code,ds:data,ss:stack

data segment
        db 'welcome to masm!'  ;定义要显示的字符串(共16字节)
        db 02h,24h,71h         ;定义三种颜色属性
data ends

stack segment
        dw 8 dup(0)
stack ends

code segment

start:

        mov ax,data
        mov ds,ax

        mov ax,stack
        mov ss,ax
        mov sp,10h

        mov bx,0
        mov di,0
        mov ax,0b872h    ;算出屏幕第12行中间的显存的段起始位置放入ax中
 

        mov cx,3     ;外循环为3次,因为要显示三个字符串

s3:     push cx        ;三个进栈操作为外循环s3保存相关寄存器的值
        push ax        ;以防止它们的值在内循环中被破坏  字符起始位置
        push di

        mov es,ax      ;此时es为屏幕第12行中间的显存的段起始位置
        mov si,0
        mov di,0

        mov cx,10h     ;内循环为10h次,因为一个字符串中含10h个字节

s1:     mov al,ds:[bx+si]

        mov es:[bx+di],al

        inc si

        add di,2

        loop s1      ;此循环实现偶地址中存放字符

        

        mov si,1   ;si的值设为1,从而为在显存奇地址中存放字符的颜色属性做准备

        pop di        ;将di的值恢复成进入内循环之前的时候的值

        mov al,ds:10h[bx+di]    ;取颜色属性[源OP寻址方式:相对基址变址]

 

        mov cx,10h     ;第二个内循环也为10h次

s2:     mov es:[bx+si],al

        add si,2

        loop s2       ;此循环实现奇地址中存放字符的颜色属性        

        ;以下4句为下一趟外循环做准备

        inc di

        pop ax

        add ax,0ah   ;将显存的段起始地址设为当前行的下一行

                  ;[在段地址中加0ah,相当于在偏移地址中加了0a0h(=160d)]

        pop cx

        loop s3

        mov ax,4c00h

        int 21h

code ends

end start
评论次数(1)  |  浏览次数(608)  |  类型(默认类型) |  收藏此文  | 

[  xiaochong   发表于  2008-05-31 17:23  ]

不知道具体如何写汇编程序,有思路没步骤,
-----------------
建议博主,扎扎实实的学习,把前面的检测点 和 编程任务都独立的完成,在学习后面的内容,,如果博主是这样学过来的,应该不会出现博主所说的情况,,如果出现了,那说明博主的努力是不够的!

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