|
主题 : : 别人写的这个程序9好啊`但是我有点不懂 [待解决] |
回复[ 8次 ]
点击[ 676次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-03-19 22:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2009-02-22 23:57 |
assume ds:data,cs:code
data segment
db 'welcome to masm!'
db 0000010b,00100100b,01110001b
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bp,0
mov bx,0
mov di,0
mov cx,16
s:mov al,ds:[bx]
mov ah,[di]
mov es:[bp+720H],ax
mov es:[bp+7c0H],ax
mov es:[bp+860H],ax
inc di
add bx,1
add bp,2
loop s
mov ax,4c00h
int 21h
code ends
end start
这里
mov es:[bp+720H],ax
mov es:[bp+7c0H],ax 这里为什么要加bp啊?
mov es:[bp+860H],ax
还有这里
add bp,2 这里为什么要加2?
晕死了``我回头看了第8章还是不明白 =.=``` | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-03-19 22:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
建议自己先努力做,而不要把看懂别人的程序就当做完了 ^_^
我觉得这个试验唯一的难点就是先看懂资料,不过也是相对很简单的,有例子,自己debug和小程序试验下就很容易搞明白。
先在屏幕显示一个字符(这个应该很简单,书上有讲了)
人后显示一个字符串(这个也就是在第一个基础上加循环,如loop)这个基本就完成实验九了,显示一个字符串
然后显示三个字符串就ok了,效率最低的方法就是把显示一个字符串的代码复制三份 呵呵
使用双循环嵌套代码就精简多了。
只要努力会发现做出来还是不太难的,主要努力~ | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-03-19 23:33 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2009-02-22 23:57 |
不知道为什么`越学越不懂了 =.= 好象以前的都忘了``可能为了赶进度吧`我只是想快点把这书看完,然后去看C 也许能把现在不懂的都理解了...哎` | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-07-27 16:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22 |
楼主,我试了,这个程序实现的功能和书本上要求的功能是不一样的。建议你先看看程序运行的结果后再来看看源代码吧。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-08-01 13:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-07-25 14:15 |
1.这个程序没有完成书上的要求,建议你找个正确的答案来研究.
2.实验9,是本书非常经典的一个习题,他涉及到了多项技巧和知识,一定要争取自己独立完成,相关的知识不明白的,可以回头看之前的章节.
3.你赶进度的心情可以理解,但你得看是什么学科,汇编语言是实践性非常强的一门语言,可不是看一遍书就算完事了,真正看书的时间,跟上机操作的时间比,1:10都不一定够,想学好汇编,就得准备好大量的时间和精力,没有付出,是不会有收获的. | | |
|
|
|
|
[第5楼]
[ 回复时间:2012-08-20 20:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-08-14 17:57 |
这个程序没有达到书上的要求,建议重做》
不过要是在 s:mov al,ds:[bx] 之前加上add bx,10h 也能达到书上的要求了
。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2012-08-20 20:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-08-14 17:57 |
这个程序没有达到书上的要求,建议重做》
不过要是在 s:mov al,ds:[bx] 之前加上add bx,10h 也能达到书上的要求了
。------------------
回复:上面是add di,10h
不是:add bx,10h | | |
|
|
|
|
[第7楼]
[ 回复时间:2012-11-13 07:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-10-30 12:52 |
楼上说得对,楼主应该是抄错了:mov di,0这句应该是:mov di,16才对,指向data段的第16字节显示颜色的种类 | | |
|
|
|
|
[第8楼]
[ 回复时间:2012-11-13 08:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-10-30 12:52 |
咳,仔细看了一下,楼主说的这个例子还是有问题,我根据这个思路该了下,运行也能通过:
assume cs:code
data segment
db 'welcome to masm!'
db 02h,24h,71h
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,1760 ;12行
mov bp,16 ;要选择的颜色
mov cx,3 ;外循环
s0:
push cx
mov si,0
mov di,33*2 ;列
mov cx,16 ;内循环
s:
mov al,[si]
mov ah,ds:[bp]
mov es:[dx+di],ax
inc si
add di,2
loop s
add bx,160 ; 换行
inc bp ;下一颜色
pop cx
loop s0
mov ax,4c00h
int 21h
code ends
end start | | |