其他两个子程序:
2.编写子程序-解决除法溢出的问题 https://blog.csdn.net/qq_41700629/article/details/89426260
3.编写子程序-数值显示 https://blog.csdn.net/qq_41700629/article/details/89447439
1.编写子程序-显示字符串
子程序描述
名称:show_str
功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),
(cl)=颜色,ds:si指向字符串的首地址
返回:无
应用举例:在屏幕的8行3列,用绿色显示data段中的字符串。
提示
(1)子程序的入口参数是屏幕上的行号和列号,注意在子程序内部要将它们转化为显存中的地址,首先在分析一下屏幕上的行列位置和显存地址的对应关系;(参见:王爽《汇编语言》实验9)
(2)注意保存子程序中用到的相关寄存器
(3)这个子程序的内部处理和显存的结构密切相关,但是向外提供了显存结构无关的接口。通过调用这个子程序,进行字符串的显示时可以不必了解显存的结构,为编程提供了方便。在实验中,注意体会这种设计思想。
参考代码:
assume cs:code
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 ;显存段地址es
mov al,0a0h
mov bh,6h
mul bh ;第七行偏移地址放在ax中
mov di,4h
add di,ax ;第3列地址放在di中,不再使用ax,用es:[di]
mov al,cl ;把颜色从cl放到al中
mov ch,0
f: mov cl,ds:[si]
jcxz ok ;检测是否放到0
mov es:[di],cl ;放字母
inc di
mov es:[di],al ;放颜色
inc di
inc si
jmp short f
ok: ret
code ends
end start
结果图: