LZ的这个程序的毛病比较多,比如:
第一个循环里,每一次循环si都没有自增加1,所以造成取出来的字符都一样
而且在循环体内,cl表示颜色,loop要自减去CX用来循环,这个都混到一块去了,如何能保证取出的字符数量的正确性?
还有别的问题吧, LZ还是再重写一个吧 !
记着,保证每次循环结束后,源地址si,和目的地址bx,要增加
循环开始要保存循环次数cx,结束循环前恢复
call完之后mov ax,4c00h int 21h,好久没看过了。去年我写过一个例子http://hi.baidu.com/5858978/blog/item/2b94cdfd8627428eb901a095.html
16位汇编用Masm for Windows 集成实验环境,32位的推荐radasm
assume cs:code
date segment
db 'Welcome to masm!',0
date ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,date
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push si
push dx
push cx
mov ax,0b800h
mov es,ax ;设置es为显存段地址
dec dh
mov al,0a0h
mul dh ;ax=(dh-1)*160 找行
mov bx,ax ;行偏移地址存bx中
dec dl
mov ax,2
mul dl ;ax=(dl-1)*2 找列
add bx,ax ;bx为目标偏移地址=(dh-1)*160+(dl-1)*2
s0: mov cl,[si] ;将字符串存入显存
mov ch,0
jcxz ok
mov byte ptr es:[bx],cl
pop cx
mov byte ptr es:1[bx],cl
push cx
inc si
add bx,2
jmp short s0
ok: pop cx
pop dx
pop si
ret
code ends
end start
这个是修改后的源码,在全屏方式下可以运行看效果.