『香`草の゛芭芙 发表于 2012-7-16 08:19:13

实验十

assume cs:code,ds:data
data segment
db 'Welcome to masm!',0
data ends
code segment
start:mov dh,8    ;行号
mov dl,3    ;列号
mov cl,2    ;颜色
mov ax,data
mov ds,ax
mov si,0
call show_str


mov ax,4c00h
int 21h

show_str:

mov ax,0b800h
mov es,ax
mov al,160
sub dh,1
mul dh ;结果在AX中
mov bx,ax

sub dl,1
mov al,dl
mov ah,0
add bx,ax ;得到显存的 起始位置....
mov dl,cl
mov si,bx   ;si是显存的偏移地址...
mov di,0;di数据库的偏移地址

ks: mov ax,ds:
mov es:,ax

mov es:,dl

mov bl,ds:
mov ch,0
mov bh,0
mov cx,bx
   
jcxz ok
inc di
add si,2

jmp short ks
ok: ret

code ends
end start

写出来了,,,开心{:5_95:}....没用 push pop   不知道会不会出问题, 改行号和列号,颜色值都没问题....

敉沧 发表于 2012-7-16 09:24:07

assume cs:code,ds:data
data segment
db 'Welcome to masm!',0
data ends
code segment
start:mov dh,8    ;行号
mov dl,3    ;列号
mov cl,2    ;颜色
mov ax,data
mov ds,ax
mov si,0
call show_str


mov ax,4c00h
int 21h

;<<<<<<<<<<<<<<<<<<<<<<<<<<

;名称:show_str
;
;功能:指定位置,指定颜色,显示用0结束的字符串
;
;参数: (dh)=行号,(dl)=列号
;         (cl)=颜色,ds:si指向字符串首地址
;


show_str:


mov ax,0b800h
mov es,ax

mov al,160
sub dh,1
mul dh ;结果在AX中
mov di,ax

sub dl,1
add dl,dl
sub dh,dh

add di,dx
;显存行列地址

mov ah,cl
;方便将字符属性和字符同时送至显存

sub cx,cx
;检测字符用

ks:
mov al,ds:
mov es:,ax

mov cl,al

jcxz ok
inc di
add si,2

jmp short ks

ok: ret

code ends
end start

这是我对你的程序进行改造的样子,你看如何?

『香`草の゛芭芙 发表于 2012-7-16 11:31:25

mov ah,cl
;方便将字符属性和字符同时送至显存

sub cx,cx
;检测字符用

这思路很不错呢...谢谢分享...不过你这个debug了 结果出错了....

额...上传不了图片....{:5_96:}

敉沧 发表于 2012-7-16 12:13:07

『香`草の゛芭芙 发表于 2012-7-16 11:31
mov ah,cl
;方便将字符属性和字符同时送至显存



额额呃呃。。。。什么错误。。。论述下。
页: [1]
查看完整版本: 实验十