王爽汇编第四版 实验10 编写子程序最佳答案

子程序描述
名称:show_str
功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
参数:(dh)=行号
(cl)=颜色,ds:si指向字符串的首地址
返回:无
就用举例:在屏幕的8行3列,用绿色显示data段中的字符串。
说明:下面贴出代码
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 (注:把ip地址push到栈空间内存)
mov ax,4c00h
int 21h (注:书中代码结束)

show_str:mov ah,0 (注:这里开始计算8行3列在屏幕的位置)
mov di,0
mov al,160 (注:一行160个字节)
mul dh (注:dh等于8,0行开始计算,8行就是8乘以160)
mov di,ax (注:赋值给di)
mov al,2 (注:80列,一列2个字节,赋值al=2)
mul dl (注:3列,就是3乘以2)
add ax,di (注:用行数字节加上列的字节=8乘以160+3乘以2.就是要写入的屏幕位置)
(注:这里结束计算)

mov bx,ax (注:这里寄存器的初始化)
mov ax,0b800h (注:这里是屏幕的显存段地址)
mov es,ax
mov ch,0
mov di,0
mov ah,0 (注:寄存器的初始化结束)

s:push cx (注:这里开始循环和写入字符串到显存内存。直到字符串查找到0为止跳出)
mov cl,ds:[si] (注:cl 等于ds段地址+si的偏移地址)
jcxz ok (注:当cx等于0的时候跳出,然后跳转标号处)
mov es:[bx+di],cl
pop cx
mov es:[bx+di+1],cl
inc si
add di,2
jmp short s (注:跳转s标号处,循环)

ok:pop cx (注:上面push了一下cx,取出来)
ret (注:跳转pop ip地址,然后跳转过去)
code ends
end start
如果在王爽汇编第四版有不懂的地方,可以给我私信。欢迎大家交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值