. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验一我写完了,感觉没什么问题了,可是显示结果是奇怪的笑脸!  [待解决] 回复[ 3次 ]   点击[ 401次 ]  
cfcxg
[帖 主]   [ 发表时间:2009-06-13 21:07 ]   [引用]   [回复]   [ top ] 
荣誉值:9
信誉值:3
注册日期:2008-12-21 10:26
下面是我的程序,希望大家可以帮我简单的分析一下:
assume cs:code,ss:stack
data segment
  db 'welcome to masm!',0
data ends
stack segment
  db 16 dup (0)
stack ends

code segment
start: mov dh,8
       mov dl,3
       mov cl,2
       mov ax,data
       mov ds,ax
       mov ax,stack
       mov ss,ax
       mov sp,16
       mov si,0
       call show_str
       mov ax,4c00h
       int 21h
show_str:push dx
         push ax
         push bx
         mov ax,0b800h
         mov es,ax

         mov al,160
         mul dh
         mov bx,ax
         mov al,2
         mul dl
         add bx,ax
         dec bx
                             ******在这之上是相关寄存器及偏移地址的设置,实现显示功能的主要在下面一段,可是显示出来的却是最下面的一串奇怪字符,我用debug调试跟踪在数据段及各步的寄存器都没看出问题,不知道是我电脑的事还是程序写的不合理!****
         mov dh,cl
         mov cx,0
      s: mov cl,ds:[si]
         jcxz ok
         mov es:[bx],cl
         mov es:[bx+1],dh
         inc si
         add bx,2
         jmp short s

      ok:pop bx
         pop ax
         pop dx
         ret
code ends
end start   
***************************************下面是xp系统的cmd窗口运行的结果*************
D:\MASM5~1.0>p101

D:\MASM5~1.0>




   ☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻
mess
[第1楼]   [ 回复时间:2009-06-14 16:32 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
mov ax,0b800h 
         mov es,ax 

         mov al,160 
         mul dh 
         mov bx,ax 
         mov al,2 
         mul dl 
         add bx,ax 
         dec bx 
----------------
去掉dec bx看看。

注意字符颜色和asscii码在显存是是如何存放的。
cfcxg
[第2楼]   [ 回复时间:2009-06-14 16:49 ]   [引用]   [回复]   [ top ] 
荣誉值:9
信誉值:3
注册日期:2008-12-21 10:26
呀!,多谢高人指点:),我总算发现问题所在了,或都多加一条dec或者去掉那条dec都可以,我是将列位置定义错位了!,看来我还得多加细心才是:)
wsay666
[第3楼]   [ 回复时间:2009-07-22 19:02 ]   [引用]   [回复]   [ top ] 
荣誉值:1
信誉值:8
注册日期:2009-06-27 18:30
你那算什么,我的出现了两行笑脸:
assume cs:code,ss:stack 
data segment 
  db 'welcome to masm!',0 
data ends 
stack segment 
  dw 8 dup (0) 
stack ends 
code segment 
start: mov dh,8 
       mov dl,3 
       mov cl,2 
       mov ax,data 
       mov ds,ax 
       mov ax,stack 
       mov ss,ax 
       mov sp,16 
       mov si,0 
       call show_str 
       mov ax,4c00h 
       int 21h 
show_str: push cx
mov di,0
mov bx,0
mov ax,0b800h
mov es,ax
mov al,80
mul dh
mov bx,ax
mov dh,0
add bx,dx
s:  mov ch,0
mov cl,ds:[si]
jcxz ok
pop cx
mov al,ds:[si]
mov ah,cl
mov es:[bx+di],ax
inc si
add di,2
push cx
jmp short s
ok:ret
code ends 
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved