|
主题 : : 实验10.1显示字符串 [待解决] |
回复[ 2次 ]
点击[ 259次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2019-08-24 13:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-11-21 12:54 |
assume cs:codesg,ds:datasg,ss:stack
datasg segment
db 'welcom to masm!',0
datasg ends
stack segment
dw 10 dup (0)
stack ends
codesg segment
start: mov dh,23
mov dl,48
mov cl,2
mov ax,datasg
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push ax
push bx
push cx
push si
push di
mov ax,0b800h
mov es,ax
mov bl,cl ;存放字体颜色
mov al,160
dec dh
mul dh ;乘法结果为ax
mov dh,0
add dl,dl
add ax,dx ;ax 为行+列位置
mov di,ax ;显示屏位置
mov ah,bl ;设置字体颜色al
change: mov ch,0
mov cl,[si]
jcxz ok ;遇到0结束
mov al,ds:[si]
mov es:[di],ax
inc si
add di,2
jmp short change
ok: pop di
pop si
pop cx
pop bx
pop ax
ret
codesg ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2019-08-24 13:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-11-21 12:54 |
|
|
|
|
|
[第2楼]
[ 回复时间:2019-08-27 17:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-11-21 12:54 |
assume cs:codesg
datasg segment
db 'welcom to masm!',0
datasg ends
stack segment
db 32 dup (0)
stack ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov si,0 ;ds:si指向字符串的首地址
mov ax,stack
mov ss,ax
mov sp,16
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
;name: show_str
;function: 行dh,列dl,颜色cl, ds:si指向字符串的首地址
;return: 0
show_str: push ax
push bx
push cx
push di
push si
mov ax,0b800h
mov es,ax ;显示屏段起始地址
mov bl,cl ;暂存颜色
mov al,160
mul dh ;8位乘法al*dh,结果储存在ax
mov dh,0
add dl,dl ;dh,dl合成dx,dl列
add ax,dx
mov di,ax ;es:di为显示屏当前位置
mov ah,bl ;字体颜色
show_s0: mov ch,0
mov cl,ds:[si]
jcxz show_s1
mov al,ds:[si]
mov es:[di],ax
inc si
add di,2
jmp short show_s0
show_s1: pop si
pop di
pop cx
pop bx
pop ax
ret
codesg ends
end start | | |
|