. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第十章———实验10.1  [待解决] 回复[ 5次 ]   点击[ 406次 ]  
girl_lulu
[帖 主]   [ 发表时间: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.谢谢非搪塞的回答!!
versaariel
[第1楼]   [ 回复时间:2010-04-26 20:40 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
1.不是不诚恳回答,是分享给你一种好的学习方法,而不是告诉你答案
2.希望会有高手手把手教你^-^
girl_lulu
[第2楼]   [ 回复时间:2010-04-27 11:15 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25
回复:[第1楼]
------------------
1.嗯,你的回答很诚恳。提供答案的诸位可能出发点是好的,但是我因为这样的瓶颈问题,搞得后面的程序都没法正确运行,严重影响学习进度,另外既然跑这里来提问了至少说明已经经过了自己的仔细思考了……
2.呃呃```这句不是讽刺我的吧……
versaariel
[第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.总结你遇到的问题,可以看书或编译器提供的信息搞定,还是多用点心吧^-^
satanevil
[第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位寄存器暂存!
ligang636
[第5楼]   [ 回复时间:2010-05-12 22:22 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-28 22:23
楼主没有定义堆栈吧
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved