. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验10(1)请教高手  [待解决] 回复[ 4次 ]   点击[ 437次 ]  
heshen75
[帖 主]   [ 发表时间:2007-12-06 10:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-09-29 20:49
assume cs:code
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 bx
         push es
         push cx
         push si
         mov ax,0b800h
         mov es,ax
         mov ax,0
         mov ah,160
         mul dh
         mov bx,ax
         mov ax,0
         mov al,2
         mul dl
         dec ax
         add bx,ax
         mov al,cl
         mov cx,0
       s:mov cl,[si]
         jcxz ok
         mov ch,al
         mov es:[bx],cx
         inc si
         add bx,2
         jmp short s
      ok:pop si
         pop cx  
         pop es
         pop bx
         ret
code ends
end start
编译连接不上,我看了别人的程序,我也找不出我的程序问题出在那,求高手
wdm
[第1楼]   [ 回复时间:2007-12-06 11:11 ]   [引用]   [回复]   [ top ] 
荣誉值:342
信誉值:0
注册日期:2007-12-06 10:21
什么叫编译连接不上啊?
出什么问题?
db 'welcome to masm!,0 
这条语句少了一个单引号。编译肯定过不去。
但是好像程序还有问题吧,不能正常显示。
debug跟踪。
heshen75
[第2楼]   [ 回复时间:2007-12-08 09:45 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-09-29 20:49
我把单引号加上了,程序编译过去了,但一执行就跳出DOS,这是怎么回事啊
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 si,0
      call show_str
      mov ax,4c00h
      int 21h
show_str:push bx
         push es
         push cx
         push si
         mov ax,0b800h
         mov es,ax
         mov ax,0
         mov al,160
         mul dh
         mov bx,ax
         mov ax,0
         mov al,2
         mul dl
         dec ax
         add bx,ax
         mov al,cl
         mov cx,0
       s:mov cl,ds:[si]
         jcxz ok
         mov ch,al
         mov word ptr es:[bx],cx
         inc si
         add bx,2
         jmp short s
      ok:pop si
         pop cx  
         pop es
         pop bx
         ret
code ends
end start
zhuzhu
[第3楼]   [ 回复时间:2007-12-08 11:25 ]   [引用]   [回复]   [ top ] 
荣誉值:50
信誉值:0
注册日期:2007-07-08 09:33
楼上使的是集成环境吧?我猜可能是集成环境的问题,因为我的集成环境就不能用了,我就没有管它~_~

直接用第四章讲的masm.exe和link.exe编译连接,没有问题。

不过程序有问题,显示的是一堆乱码。

首先一个问题是(不是显示'welcome to masm!'长度个乱码,说明你的循环有问题) jcxz ok 不能结束。---原因:cl有等于0的机会,但是ch一直保存的是al的值。

另一个问题可能就是行列计算后的数值问题了,如果在循环显示前(s:mov cl,ds:[si])把mov bx,0,则显示没有问题。
zhuzhu
[第4楼]   [ 回复时间:2007-12-08 11:27 ]   [引用]   [回复]   [ top ] 
荣誉值:50
信誉值:0
注册日期:2007-07-08 09:33
楼主可以用debug跟踪一下计算行列值的代码,看看是哪里计算错了。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved