|
主题 : : 第十章———实验10.1 [待解决] |
回复[ 5次 ]
点击[ 406次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-04-26 19:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25 |
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 ax,0b800h;
mov es,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push cl
mov cl,[si]
mov ch,0
jcxz ok
pop cl
mov al,[si]
mov ah,cl;
mov es:462h[bx],ax;
inc si
add bx,2
jmp show_str;
ok: ret;
code ends
end start
============================================
DEBUG上结果只显示p1.ASM(8): Out of memory ,但我的问题多多!!
1.mov ax,0b800h; 而不是mov ax,b800h?问过N次,没人诚恳回答/
2.mov dh,8
mov dl,3
mov cl,2
————这3条指令有什么特别用处?第九章『实验9』也是显示字符串,但没有这3条。其实后面代码段都有指令说明行,列,色。
3.谢谢非搪塞的回答!! | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-04-26 20:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
1.不是不诚恳回答,是分享给你一种好的学习方法,而不是告诉你答案
2.希望会有高手手把手教你^-^ | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-04-27 11:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25 |
回复:[第1楼]
------------------
1.嗯,你的回答很诚恳。提供答案的诸位可能出发点是好的,但是我因为这样的瓶颈问题,搞得后面的程序都没法正确运行,严重影响学习进度,另外既然跑这里来提问了至少说明已经经过了自己的仔细思考了……
2.呃呃```这句不是讽刺我的吧…… | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-04-27 11:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
1.mov ax,0b800h 加0不是表示20位,编译器相关,A~F开头的要加0,否则报错
2.push cl,pop cl 这句不对,push的操作对象是16bit的,masm5.0有warning,仔细看编译器信息
3.Out of memory 这个信息是因为ok: ret;这个分号是中文造成的
4.总结你遇到的问题,可以看书或编译器提供的信息搞定,还是多用点心吧^-^ | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-05-04 19:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-20 23:22 |
3楼的兄弟说的不错,前面两个疑问上面已经有答案了,接下来我告诉你mov dh,8 mov dl,3以及mov cl,2的作用。
这里mov dh,8 是将8行存入dh里,具体地址为 mov al,dh
mul dh '
mov dx,ax '将行地址存入dx中
mov dl,3 mov al,dl
mul dl
add dx,ax '这样就得出了偏移地址相当于你的462h[bx]
最后那个mov cl,2是存取颜色属性的,最好用个8位寄存器暂存! | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-05-12 22:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-28 22:23 |
|
|