这是汇编学习遇到的第十个实验
问题、代码以及运行结果如下:
实验10—1 显示字符串
显示字符串是现实工作中经常要用到的功能,应该编写一个通用的子程序来实现这个功能。我们应该灵活调用接口,使得调用者可以决定显示的位置(行、列)、内容和颜色。
代码如下:
assume cs:code
data segment
db 'Although XiaoHei is black,he is more than headsome!',0
db 'It is said that he likes English and Assmebly very much!',0
data ends
code segment
start:
;第一次调用 需置si为0
mov dh,8 ;行号:第八行
mov dl,3 ;列数:第三列
mov cl,0a4h ;颜色
mov ax,data
mov ds,ax
mov si,0
call show_str
;第二次调用,无需设置si
mov dh,10 ;行号:第10行
mov dl,5 ;列数:第五列
mov cl,0f1h ;颜色
mov ax,data
mov ds,ax
call show_str
;第三、第四次调用...
mov ax,4c00h
int 21h
;说明: 显示字符串
;在指定位置用指定颜色显示一个以0结束的字符串
;参数:(dh) = 行号(0~24) ,(dh)=列号(0~79)
; cl=颜色,ds:si指向要显示字符串的首地址
show_str:
mov ax,0B800h
mov es,ax
mov bl,cl ;用bl保存颜色信息
mov al,dh
mov ah,0
mov cx,ax
mov ax,es
s: add ax,0AH
loop s
mov es,ax
;更改行号
mov di,0
mov al,dl
mov ah,0
mov cx,ax
s1: add di,2
loop s1
;更改列号
it: mov al,ds:[si]
mov cl,al
mov ch,0
mov es:[di],al
mov es:[di].1,bl
inc si
add di,2
jcxz bk
jmp short it
;逐行打印
bk: ret
code ends
end start
运行结果如下:

谢谢,正好学到这一章,很好的解决了我的疑惑。