|
主题 : : 被第九章的实验郁闷了,不明白哪里有错,请高手指教(附我的源代码) [已解决] |
回复[ 7次 ]
点击[ 302次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-07-10 21:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2008-06-07 10:57 |
错误提示:第九行,symbol not defined:B800H
代码如下:
assume cs:codesg,ds:data
data segment
db 'welcome to masm!'
data ends
codesg segment
start: mov ax,data
mov ds,ax
mov di,0
mov ax,b800h
mov es,ax
mov si,07c0h
mov sp,16
mov cx,12
s1: mov ax,0
mov al,ds:[di]
mov es:[si],al
mov byte ptr es:[si+1],02h
add si,2
inc di
loop s1
mov cx,12
mov si,07c0h
mov di,0
s2: mov ax,0
mov al,ds:[di]
mov es:[si+160],al
mov byte ptr es:[si+161],64h
add si,2
inc di
loop s2
mov cx,12
mov di,0
mov si,07c0h
s3: mov ax,0
mov al,ds:[di]
mov es:[si+320],al
mov byte ptr es:[si+321],71h
add si,2
inc di
loop s3
mov ax,4c00h
int 21h
codesg ends
end start
请指教 | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-07-10 21:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2008-06-07 10:57 |
将b800用十进制47104表示后程序编译通过
并且运行后按题目要求显示了welcome to ma,但缺少了"sm!"这三个字符。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-07-10 21:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2008-06-07 10:57 |
|
|
|
|
|
[第3楼]
[ 回复时间:2008-07-10 21:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2008-06-07 10:57 |
其中cx由于写程序的时候笔误写成了12,应该是16的,好了,问题解决。
那么请大家讨论下我的代码吧,我觉得算法很繁琐,并且只能在改动字体行数不多的情况下用,如果需要更改的行数多,那么这样一行行写就太麻烦了,肯定还是要用循环和转移这样的方法的,但我对这个还没想太明白,请大家讲讲自己的算法。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2008-07-10 22:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-06-14 17:52 |
可以只要一个循环体就可了。这个循环中分三部分,为不同的行和不同的显示颜色。可以用[bx+data],要算好每行的data. 想一下这个。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2008-07-10 22:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2008-06-07 10:57 |
嗯,看到有同学用栈来存颜色的数据,我觉得很好,这样用两个循环嵌套一下就可以了。
另看到有同学用jcxp转移,也不错,不过觉得不如用栈来的清晰。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2008-07-14 11:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2008-06-07 10:57 |
回复:[第4楼]
------------------
这样写的话更麻烦,用【bx+data】要写处理16个字节的数据,这里用循环更合适。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2008-07-19 12:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2008-06-07 10:57 |
此贴由 贴主 于 [ 2008-07-19 12:20 ] 结贴。 结贴原因:问题已解决 | | |