|
主题 : : 实验9,刚写好.顺便求指教 [待解决] |
回复[ 1次 ]
点击[ 328次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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打头,所以应该是对的,但又不太确定,不知各位大侠如何查看效果的。 | | |
|
|
|
|
[第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#
要是有发图片的功能就好了 就不用发链接去看了 牢骚几句。。。。。。。 | | |
|