注册 登录
编程论坛 汇编论坛

MASMPlus编译通不过?

有容就大 发布于 2012-08-10 20:30, 2150 次点击
下面是王爽汇编第9章 实验9 目的根据材料编程 :在屏幕中间分别显示绿色,绿底红色
白底蓝色的字符串'Welcome to masm!'

程序代码如下 (参考答案):
程序代码:
assume cs:code, ds:data, es:table

data segment
     db 'Welcome to masm!'
data ends

table segment
     dw 4000 dup(0)
table ends

code segment

   start : mov ax, data
           mov ds, ax
           mov ax, 0b800h
           mov es, ax
         

           mov bx, 0
           mov si, 0
           mov cx, 16
      s1:  mov ax, [bx]
           mov es:[bx + 720h][si], ax
           mov al, 2
           mov es:[bx + 721h][si], al
           inc bx
           inc si        

           ;mov ax, 9
           ;int 21h
           loop s1
         

           mov bx, 0
           mov cx, 16
           mov si, 160
      s2:  mov ax, [bx]
           mov es:[bx + 720h][si], ax
           mov al, 36
           mov es:[bx + 721h][si], al
           inc bx
           inc si
           loop s2
         

           mov bx, 0
           mov cx, 16
           mov si, 320
      s3:  mov ax, [bx]
           mov es:[bx + 720h][si], ax
           mov al, 113
           mov es:[bx + 721h][si], al
           inc bx
           inc si
           loop s3
         

           mov ax, 4c00h
           int 21h         

code ends
end start
然后 我让他在cmd中用masm编译后能运行得到结果
只有本站会员才能查看附件,请 登录

但是在一样的程序在MASMPlus 下编译后有错误?
ml.exe /c /coff /nologo /Fo"D4.obj" "D:\masm\11\D4.asm"
 Assembling: D:\masm\11\D4.asm
D:\masm\11\D4.asm(13) : error A2004: symbol type conflict
D:\masm\11\D4.asm(56) : warning A4023: with /coff switch, leading underscore required for start address : start
我以为是mov es:[bx + 720h][si], al那个类型不匹配
就改成mov byte ptr es:[bx + 720h][si], al但是还是提示同样的错误 这个怎么弄?
求Z版 和 各位大牛帮解惑。
只有本站会员才能查看附件,请 登录

20 回复
#2
zklhp2012-08-10 20:43
编译参数错了 16位程序加coff参数肯定是错的
#3
有容就大2012-08-10 21:06
回复 2楼 zklhp
那怎么办
这个编译参数在那里啊 我装后什么都没改就直接用的。
#4
zklhp2012-08-10 21:09
以下是引用有容就大在2012-8-10 21:06:11的发言:

那怎么办
这个编译参数在那里啊 我装后什么都没改就直接用的。

https://bbs.bccn.net/thread-375027-1-1.html 今天刚回答过
#5
有容就大2012-08-10 21:15
我建工程的时候选的是DOS那排的第一个 不对吗?
貌似上次你给我的那个例子就是那个吧 上面的程序框架(注释和初始代码)都差不多。
他的编译参数是系统自己定的? 那我要选那个好?
#6
zklhp2012-08-10 21:19
以下是引用有容就大在2012-8-10 21:15:22的发言:

我建工程的时候选的是DOS那排的第一个 不对吗?
貌似上次你给我的那个例子就是那个吧 上面的程序框架(注释和初始代码)都差不多。
他的编译参数是系统自己定的? 那我要选那个好?

没明白你啥意思 如果你是用的MASMPlus 建立工程的时候选DOS开头的编译参数就错不了 如果命令行编译 对于Masm6及以上版本 要加Zm参数以编译16位代码 具体咋写你看MASMPlus工程里面用的是啥罢
#7
zklhp2012-08-10 21:21
ml.exe /c /coff

一看你这里就明白了 coff是32位的编译参数 用于指定obj文件的格式
#8
有容就大2012-08-10 21:45
回复 6楼 zklhp
只有本站会员才能查看附件,请 登录

如图 我选的是红圈圈里那个DOS 建立的工程 为什么MASMPlus还编译不过?
#9
zklhp2012-08-10 21:47
啥错误啊
#10
有容就大2012-08-10 21:49
还是那个错误啊
ml.exe /c /coff /nologo /Fo"D4.obj" "D:\masm\11\D4.asm"
Assembling: D:\masm\11\D4.asm
D:\masm\11\D4.asm(13) : error A2004: symbol type conflict
D:\masm\11\D4.asm(56) : warning A4023: with /coff switch, leading underscore required for start address : start
#11
有容就大2012-08-10 21:51
去网上看了下 有这种情况 说是不允许 列出了N多英文错误翻译
但是都没说怎么解决
#12
zklhp2012-08-10 21:54
我试了下 发现问题在哪了

程序代码:

;#Mode=DOS
;
MASMPlus 单文件代码模板 - 纯 DOS 程序
;
--------------------------------------------------------------------
;
单个文件需要指定编译模式,否则默认是EXE方式,在系统设置中可以设置默认是DOS还是Windows.
;
编译模式自带了DOS/COM/CON/EXE/DLL/LIB这几种,如果有必要,可以更改ide.ini添加新的编译模式
;
当然,更好的是创建为一个工程.更方便及易于管理,使用方法:按Ctrl多选->创建工程.必须有多个文件



单文件 就靠的第一行的那个 #Mode=DOS 来决定编译参数 你删掉了 就当成32位程序编译了 如果是选的工程 就没事

这个东西类似 magic number 一种具有特殊含义的符号罢
#13
zklhp2012-08-10 21:55
以下是引用有容就大在2012-8-10 21:51:35的发言:

去网上看了下 有这种情况 说是不允许 列出了N多英文错误翻译
但是都没说怎么解决

核心问题是编译参数问题
#14
zklhp2012-08-10 22:01
估计也没其他问题了 给分罢
#15
有容就大2012-08-10 22:02
呵呵 是啊 我把.model small
              .stack 200h
那些简化的代码都删掉了直接用书上的全定义形式。
#16
有容就大2012-08-10 22:05
回复 14楼 zklhp
哈哈 搞定了 为什么#Mode=DOS前面要带个分号 去掉还不行? 分号不是用来注释的吗
;#Mode=DOS 一个注释也会影响程序啊 奇怪的东西。。。。。
#17
信箱有效2012-08-10 22:05
蹭剐几分
#18
有容就大2012-08-10 22:06
回复 17楼 信箱有效
~~~结了
#19
zklhp2012-08-10 22:07
以下是引用有容就大在2012-8-10 22:05:12的发言:

哈哈 搞定了 为什么#Mode=DOS前面要带个分号 去掉还不行? 分号不是用来注释的吗
;#Mode=DOS 一个注释也会影响程序啊 奇怪的东西。。。。。

IDE用这个判断代码的类型 这个是很常见的技术
#20
有容就大2012-08-10 22:10
回复 19楼 zklhp
谢谢啊 终于解决了啊 吃块 我也在吃呢 哈哈
#21
huayutf12342012-08-13 10:13
老师那里呢噶时光电影啦是你的老公偶像剧啊累死你老公美女
1