标题:[求助]学了王爽的《汇编语言》,有个小问题请教大家
取消只看楼主
nofarewell
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-5-14
 问题点数:0 回复次数:1 
[求助]学了王爽的《汇编语言》,有个小问题请教大家
学了王爽的汇编语言许久,今天终于能往屏幕上输出点东西了,汗。做了实验十第一题,感觉题目有点怪,居然用cl存储字体颜色,但又要用cx来判断字符串结束,所以只好在子程序循环中把cx再次入栈(子程序开始前就入了一次了)总是感觉很怪。。。我觉还是我编得不好。把程序贴出来大家帮我看看:
题目:设计一个子程序
名称:show_str
功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
参数:(dh)=行号,(取值范围0-24),(dl)=列号(取值范围0-79),(cl)=颜色,ds:si指向字符串首地址
my code:

assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start: mov dh,8 ;给各参数赋值
mov dl,3
mov cl,0cah
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push ax ;题目要求的子程序
push bx
push cx ;cx第一次入栈
push es
push di
push si
mov ax,0b800h ;以下代码为定位要显示的行,列
mov es,ax
mov ah,0
mov al,0a0h
mul dh
mov bx,ax
mov ah,0
mov al,2
mul dl
mov di,ax
to_show: mov ch,ds:[si] ;to_show段处理写要写处显存的字符串,结束条件为遇到字符串后面的0
push cx ;cx第二次入栈,不入栈下一次就没法用cx判断是否继续循环了
mov cl,0
jcxz ok
pop cx
mov es:[bx+di],ch
mov es:[bx+di+1],cl
inc si
add di,2
jmp short to_show
ok: pop cx ;好多的pop,push...
pop si
pop di
pop es
pop cx
pop bx
pop ax
ret
code ends
end start

调试通过。但总感觉太繁琐,另外还有个问题,子程序运行之前有必要把所有用到的寄存器都入栈吗?包括在外部赋值的

[此贴子已经被作者于2007-11-4 23:17:44编辑过]

搜索更多相关主题的帖子: 王爽 汇编语言 
2007-11-04 22:56
nofarewell
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-5-14
得分:0 
不爽不爽 课程都快结束了,居然才告诉读者汇编可以计算表达式的值!啊啊啊 这程序原来几行就可以完成
2007-11-05 22:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-183513-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.815745 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved