| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1610 人关注过本帖
标题:段地址分配问题
只看楼主 加入收藏
xiaxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-21
收藏
 问题点数:0 回复次数:7 
段地址分配问题
用MASM5.00,在DOS下调试,能够生成EXE文件,但是运行不出结果,不知道错在哪里?
调用DOS功能函数显示结果,并将统计的三类元素结果放在数据块之后,这里我好像程序有问题,但是说不出错哪里了,请各位指点下
DATA    SEGMENT
ORG      100H;偏移量为100
BUF       DB  259 DUP (?)
ZR         DB  ?              ;0元素
ZH         DB  ?             ;正元素
FU         DB ?              ;负元素
COUNT  EQU  $-(BUF-3);长度
DATA    ENDS
CODE    SEGMENT
            ASSUME   CS:CODE,DS:DATA
start:       mov   ax,  data
             mov   ds,  ax
             mov   si,   offset buf    ;设置数据块首地
             mov   cx,  COUNT      ;设数据块长度   
             cld                                ;地址修改为增量
             xor   al,   al                ;数据块第一个数据为0
nexta:       mov   [si], al                ;向内存送256个数据
             mov   bl,  al   
             or    bl,  0h
             jz    zero
             test  al,   80h           
             jz    zheng
             inc   FU   
             jmp   ff
             inc   si
             inc   al
             loop  nexta
             mov   si ,offset buf
             mov   dl ,[si]
             mov   ah,   02h
             int   21h
             mov   ah, 4ch
             int   21h
  zero:      mov si, offset buf  ;这样做是不是不妥啊
             inc   ZR
             mov   bl, ZR
             mov   [si+257] , bl
zheng:       mov   si, offset buf
             inc   ZH
             mov   bl, ZH
             mov   [si+258], bl
       ff:   mov   si, offset buf
             mov   bl, FU
             mov   [si+259], bl
CODE  ENDS
             end   start
搜索更多相关主题的帖子: 分配问题 地址 
2008-11-16 17:03
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
cld                                ;地址修改为增量
你并没有用串指令 为什么清方向位?
2008-11-16 20:37
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]zklhp[/un] 在 2008-11-16 20:37 的发言:[/bo]

cld                                ;地址修改为增量
你并没有用串指令 为什么清方向位?


偶写过一个类似的 你找找吧~~~
2008-11-16 21:05
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
2008-11-16 21:35
win_pig
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-11-14
收藏
得分:0 
cld虽然多余,但不影响程序的正常执行,只是无意义地置下方向标志。

楼主,我有个事,不明白的事情想请教下,你的代码中在jmp ff后边的那些代码,准备在什么情况让它们能够被执行?
             jmp   ff
             inc   si
             inc   al
             loop  nexta
             mov   si ,offset buf
             mov   dl ,[si]
             mov   ah,   02h
             int   21h
             mov   ah, 4ch
             int   21h
 
感觉你的程序根本就不可能进行循环和正常结束。
收到的鲜花
  • zklhp2008-11-17 12:40 送鲜花  50朵   附言:我很赞同
2008-11-16 22:13
cnhanxiao
Rank: 2
等 级:新手上路
威 望:4
帖 子:124
专家分:0
注 册:2008-10-17
收藏
得分:0 
回复 1# 的帖子
程序问题很多。
1、BUF       DB  259 DUP (?) —— 编译连接之后全是0,那只能得到0元素计数;
2、判断出字节为零,转到zero: 之后,怎么返回的?程序立即就死掉了;
3、显示
4、。。。

给个程序,仅供参考,未经调试:
DATA    SEGMENT
  ;BUF      DB 259 DUP (?)
  BUF       DB 01h,0FFh,32h,00h,78h,0FE,0F3,00,44h,0F5h  ;可以增长到256字节
  ZR        DB ?             ;0元素
  ZH        DB ?             ;正元素
  FU        DB ?             ;负元素
  COUNT  EQU  $-(BUF-3);长度
  sz        DB "0元素:"
  szZR      DB 2 dup(0),'个;'
            DB "正元素:"
  szZH      DB 2 dup(0),'个;'
            DB "负0元素:"
  szFU      DB 2 dup(0),'个;','$'
DATA    ENDS
CODE    SEGMENT
            ASSUME   CS:CODE,DS:DATA,ES:DATA

_CodeXhg proc NEAR
             mov   ah,al
             and   al,0Fh
             add   al,30h
             stosb
             mov   cl,4
             shr   ah.cl
             add   ah,30h
             stosb
_CodeXhg endp

start:       mov   ax,data
             mov   ds,ax
             mov   es,ax
             and   ZR,0
             and   ZH,0
             and   FU,0               ;这上面三条可以不要,因为就是0
             mov   si,  offset buf    ;设置数据块首地
             mov   cx,  COUNT         ;设数据块长度   
             cld                      ;地址修改为增量
nexta:       lodsb                    ;读一字节      
             test  al,80h             ;测试是否为负数
             jnz   _FU                ;是负数则转
             or    al,0
             jz    _ZR                ;是零转
             inc   ZH
             jmp   _loop
_FU:         inc   FU
             jmp   _loop
_ZR:         inc   ZR
_loop:       loop  nexta

             mov   al,ZR
             lea   di,szZR
             call  _CodeXhg
             mov   al,ZH
             lea   di,szZR
             call  _CodeXhg
             mov   al,FU
             lea   di,szZR
             call  _CodeXhg

             lea   dx,sz
             mov   ah,09
             int   21h

             mov   ah, 4ch
             int   21h
CODE  ENDS
             end   start
收到的鲜花
  • zklhp2008-11-17 12:38 送鲜花  50朵   附言:我很赞同

还有绑架成版主的?拒绝做版主——对不起啊!
2008-11-17 02:11
xiaxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-21
收藏
得分:0 
谢谢各位,我是刚刚接触汇编,有很多不明白的,要学得蛮多,以后请多多指教。
2008-11-17 12:49
快速回复:段地址分配问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031587 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved