| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 659 人关注过本帖
标题:关于masm5.0错误信息代码的问题
只看楼主 加入收藏
shuojingcao
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-9-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
关于masm5.0错误信息代码的问题
王爽老师书里面第八章实验的程序。写了一个比较短的程序   但是在用masm编译的时候出现了好多错误代码 着实把我吓了一大跳   修改了几个错误  但是还是有9个逻辑错误 请帮忙指出错误在哪里  

   代码如下:
assume cs:codesg

data segment

    db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
    db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
    db '1993','1994','1995'
     
    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,
    dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
    dw 11542,14430,15257,17800

data ends

table segment
    db 21 dup ('year summ ne ?? ')
table ends

stack segment
    dw 0,0,
stack ends

codesg segment
start:  mov ax,data
     mov ds,ax
      
     mov bx,0
     mov si,0
     mov di,0
      
     mov cx,21
s:   mov ax,[bx]
     mov table:[di],ax
     add bx,2
      
     mov ax,[bx]
     mov table:[di+2],ax

     mov ax,[bx+52h]
     mov table:[di+5],ax
     add,bx,2
      
     mov ax,[bx+52h]
     mov table:[di+7],ax
      
     mov ax,[si+0ah]
     mov table:[di+0ah],ax
     push bx

     mov dx,table:[di+7]
     mov ax,table:[di+5]
     mov bx,table:[di+0ah]
     div bx
     mov table:[di+0dh],ax
     
     pop bx

     add bx,4
     add di,16
     add si,2
     
    loop s
     mov ax,4c00h
     int 21h

codesg ends
end start   

       mov ax,4c00h
       int 21h
codesg ends
end start
      

   编译中的错误代码:
2.txt(9): warning A4101: Missing data; zero assumed
2.txt(22): warning A4101: Missing data; zero assumed
2.txt(35): error A2068: Cannot address with segment register
2.txt(39): error A2068: Cannot address with segment register
2.txt(42): error A2068: Cannot address with segment register
2.txt(43): warning A4101: Missing data; zero assumed
2.txt(46): error A2068: Cannot address with segment register
2.txt(49): error A2068: Cannot address with segment register
2.txt(52): error A2068: Cannot address with segment register
2.txt(53): error A2068: Cannot address with segment register
2.txt(54): error A2068: Cannot address with segment register
2.txt(56): error A2068: Cannot address with segment register

  50386 + 450062 Bytes symbol space free

      3 Warning Errors
      9 Severe  Errors
搜索更多相关主题的帖子: 信息 
2012-09-26 12:32
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
看错误信息先看error再看warning

mov table:[di],ax

你这里面最严重的问题是这个 虽然table是个段 但不能这么写 只有段寄存器可以用于寻址 所以 必须是

mov ax, seg table
mov ds, ax

然后 再用 mov ds:[di],ax

学语言要按照语言的规定来 不能自创 自创的东西一般是错的


2012-09-26 12:43
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
但是在用masm编译的时候出现了好多错误代码 着实把我吓了一大跳

这几个就吓着了 很多时候 一个标点符号错了就会带来成百上千个错误
2012-09-26 12:44
shuojingcao
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-9-26
收藏
得分:0 
回复 楼主 shuojingcao
版主你好! 首先谢谢版主如此细致的为我讲解错误原因,由于我是刚刚开始学习8086汇编所以对于编程中的很多技巧和格式不了解。版主的解答我否可以这样理解  是否由于我没有定义table段的段地址 所以出现了错误   应该和程序开始定义data段一样  先需要让cpu知道我的table段的段地址   
2012-09-26 19:17
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:10 
以下是引用shuojingcao在2012-9-26 19:17:35的发言:

版主你好! 首先谢谢版主如此细致的为我讲解错误原因,由于我是刚刚开始学习8086汇编所以对于编程中的很多技巧和格式不了解。版主的解答我否可以这样理解  是否由于我没有定义table段的段地址 所以出现了错误   应该和程序开始定义data段一样  先需要让cpu知道我的table段的段地址   

首先 这不是技巧和格式 这是最基本的 学8086必须学会的东西。。

其次呢 因为8086的寻址方式就是段:偏移量 所以 你必须把相应的段的地址放在段寄存器里 然后寻址 8086里基本上都是这个样子 你的写法是错误的 虽然意思对但和CPU的设计不符

是否由于我没有定义table段的段地址 所以出现了错误

你定义了table段 但没有把段地址符给段寄存器

data segment

    db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
    db '1984','1985','1986','1987','1988','1989','1990','1991','1992'

这些东西是段的定义 这样 可执行文件里面就有相应的内容了 而且程序执行的时候也装载到内存里面了 但要寻址 也就访问 还必须要用段寄存器来寻址 所以 只能按照我上面说的那个步骤来
2012-09-26 20:17
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:10 
用MASMPlus编译一下 能比较容易的找出错误
你程序的问题是 多了好几个, table段 没有和寄存器联系起来。
书上一般有例子 对比下就能发现问题所在了。

梅尚程荀
马谭杨奚







                                                       
2012-09-27 10:39
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
assume 语句都不来个   牛X

我要成为嘿嘿的黑客,替天行道
2012-09-27 23:22
快速回复:关于masm5.0错误信息代码的问题
数据加载中...
 
   



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

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