. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验9,刚写好.顺便求指教  [待解决] 回复[ 1次 ]   点击[ 328次 ]  
ouxmm
[帖 主]   [ 发表时间:2010-12-21 21:35 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-28 15:59
assume cs:code

data segment
        db 'welcome to masm!',0h
data ends

code segment

start:
        mov ax,data
        mov ds,ax
        mov ax,0b800h
        mov es,ax
        mov bx,0
        mov si,0
        
s:        mov cx,0
        mov cl,ds:[bx]
        jcxz q ;data段最后一个字节里数据是0,如果是0说明前面的字符串已经处理了。进入q段结束程序

        mov es:[si],cl
        mov byte ptr es:[si+1],1000010b

        mov cx,2 ;如果读取到的数据是1(虽然这里没有1),不加上这句指令,下轮循环就不会走了。

        inc bx
        add si,2
        loop s

q:        mov ax,4c00h
        int 21h        

code ends

end start


代码刚写好,应该是对的。
小弟不知道该怎么看效果,编译完成后走debug好像没效果出来。
command里直接运行有效果,但效果一闪而过,还好我眼尖,依稀看出welcome打头,所以应该是对的,但又不太确定,不知各位大侠如何查看效果的。
novelasm
[第1楼]   [ 回复时间:2011-01-20 11:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-13 23:25
在q:处mov ax,4c00h的上面加上这两句:
mov ah,08h
int  21h     ;等待输入但不回显 类似于C语言的getch()函数
所以看以看出加了这两句就可以起暂停的作用
我把代码也发上来 凑凑热闹^_^
data        segment
        db 'welcome to asm!'
        N        dw $-0
        color1        equ        02h                ;绿色
        color2        equ        24h                ;绿底红字
        color3        equ        71h                ;白底蓝字
data        ends

stack        segment        para        stack        'stack'
        dw        8 dup(0)
stack        ends

code        segment
        assume cs:code,ds:data,ss:stack
        start:
                        mov        ax,data
                        mov        ds,ax
                        
                        mov        ax,stack
                        mov        ss,ax
                        mov        sp,10h
                        
                        mov        ax,0b800h
                        mov        es,ax
                        
                        mov        bx,0
                        mov        si,1670
                        mov        cx,3
                        mov        dl,3
        @1:
                push        cx
                mov        cx,N
                s:
                        mov        al,[bx]
                        mov        es:[si],al
                        cmp        dl,3                                        ;根据dl的值来选择颜色
                        jz                c3
                        cmp        dl,2
                        jz                c2
                        mov        BYTE ptr es:[si+1],color1
                        jmp        next
                c2:
                        mov        BYTE ptr es:[si+1],color2
                        jmp        next
                c3:
                        mov        BYTE ptr es:[si+1],color3
        next:
                        add        si,2
                        inc        bx
                loop        s
                
                xor        bx,bx                        ;重新指回字符串的首地址
                add        si,160                ;指向下一行的相同位置
                mov        di,N
                shl        di,1
                sub        si,di
                dec        dl
                pop        cx
        loop        @1
                mov        ah,08h
                int        21h
                mov        ax,4c00h
                int        21h
code        ends
        end        start
运行效果见到我空间去看吧:
http://hi.baidu.com/lethalboy/album/item/b166ef3c45eb546d71cf6cc2.html#
要是有发图片的功能就好了 就不用发链接去看了 牢骚几句。。。。。。。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved