马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 fishz 于 2011-5-5 12:32 编辑
王爽实验10,编写显示字符串子程序
(dh)=行号,取值范围0~24
(dl)=列号,取值范围0~79
(cl)=颜色,ds:si指向字符串的首地址
例子:在屏幕第8行,3列,用绿色显示data段中的字符串assume ds:data, cs:code, ss:stack
data segment
db 'Welcome to masm!', 0 ;words
color db 02h, 24h, 71h ;three colors
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 dh, 8
mov dl, 3
mov cl, 2
mov si, 0
call show_str ;show_str函数
mov ax, 4c00h
int 21h
show_str:
push bx
push si
push di
push es
push ax
push cx
mov bl, cl ;bl记录颜色
mov al, 0ah ;显存每一行的像素数量/10 本来是a0,作为段地址时要除于10
mov ah, 0
dec dh
mul dh ;第dh行
;mov dh, 2
;mul dh ;????
add ax, 0b800h ;显存初地址
;dec dl
;adc al, dl ;第dl列
;adc ah, 0
mov es, ax ;显存段地址
dec dl
mov al, dl
mov ah, 0
mov dl, 2
mul dl ;没列占两个字节的空间,因为还有颜色的内存
mov di, ax ;第dh行,第dl列
display:
mov cl, [si]
mov ch, 0
jcxz ok
mov al, ds:[si]
mov es:[di], al
inc di
;pop cx ;pop颜色
mov es:[di], bl
inc si
inc di
jmp short display
ok:
pop cx
pop ax
pop es
pop di
pop si
pop bx
ret
code ends
end start
为什么我的是在对话框的第四行显示的??? |