首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • [向mydo提问]如何编译《INTEL汇编语言程序设计》这本书里的代码? [无满意答案结贴,结贴人:icoding]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • icoding
    • 等级:
    发表于:2008-06-09 19:01:15 楼主
    RT,4版有光盘,5版没有.不过我从网上down了4版光盘里的文件,安装了MASM615在C盘C:\Masm615

    然后编译这个文件是老是出错,这个文件是C:\Masm615\1.ASM

    Assembly code
    TITLE Add and Subtract (AddSub.asm) ; This program adds and subtracts 32-bit integers. ; Last update: 2/1/02 INCLUDE Irvine32.inc .code main PROC mov eax,10000h ; EAX = 10000h add eax,40000h ; EAX = 50000h sub eax,20000h ; EAX = 30000h call DumpRegs exit main ENDP END main


    提示我说:调用的两个函数是未声明的符号,应该是属于链接方面的问题吧?谁能写一个正确命令行编译命令
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jxc25
    • 等级:
    发表于:2008-06-09 19:32:171楼 得分:0
    快给分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jxc25
    • 等级:
    发表于:2008-06-09 19:35:572楼 得分:0
    这个DumpRegs是生词,你给分就给你讲这个生词.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-09 20:47:423楼 得分:0
    Microsoft (R) Macro Assembler Version 6.15.8803     06/09/08 20:46:14
    Add and Subtract              (AddSub.asm)     Page 1 - 1


    TITLE Add and Subtract              (AddSub.asm)

    ; This program adds and subtracts 32-bit integers.
    ; Last update: 2/1/02

    INCLUDE Irvine32.inc
          C ; Include file for Irvine32.lib            (Irvine32.inc)
          C
          C INCLUDE SmallWin.inc ; MS-Windows prototypes, structures, and constants
          C .NOLIST
          C .LIST
          C
          C .NOLIST
          C .LIST
          C

    00000000 .code
    00000000 main PROC

    00000000  B8 00010000 mov eax,10000h ; EAX = 10000h
    00000005  05 00040000 add eax,40000h ; EAX = 50000h
    0000000A  2D 00020000 sub eax,20000h ; EAX = 30000h
    0000000F  E8 00000000 E call DumpRegs

    exit
    0000001B main ENDP
    END main
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-09 20:55:144楼 得分:0
    在DOS下C:\Masm615\MAKE32 1;就这样可以搞定了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-09 22:32:225楼 得分:0
    1,2楼太搞笑了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    发表于:2008-06-09 23:26:366楼 得分:0
    错误信息有哪些?

    1楼的朋友不要太心急,汇编板块的分不容易得。我刚来的时候答了将近40帖,一分都没得,当时我决定如果我回答50帖还不得分就走人……
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-10 06:48:417楼 得分:0
    提示我说:调用的两个函数是未声明的符号,应该是属于链接方面的问题吧?谁能写一个正确命令行编译命令:
    REM  make32.bat -  Batch file for assembling/linking 32-bit Assembly programs
    REM  Revised: 11/15/01

    @echo off
    cls

    REM The following three lines can be customized for your system:
    REM ********************************************BEGIN customize
    SET PATH=C:\Masm615
    SET INCLUDE=C:\Masm615\INCLUDE
    SET LIB=C:\Masm615\LIB
    REM ********************************************END customize

    ML -Zi -c -Fl -coff %1.asm
    if errorlevel 1 goto terminate

    REM add the /MAP option for a map file in the link command.

    LINK32 %1.obj irvine32.lib kernel32.lib /SUBSYSTEM:CONSOLE /DEBUG
    if errorLevel 1 goto terminate

    dir %1.*

    :terminate
    pause

    这是DOS批处理文件,其实在本目录中已经包含此文件:make32
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • icoding
    • 等级:
    发表于:2008-06-10 09:16:078楼 得分:0
    我KAO,1楼的没分,装什么啊,不负责任!!!

    问题我已解决,写在我blog上了
    http://icoding.spaces.live.com/blog/cns!209684E38D520BA6!393.entry

    BAYNPU 的方法,我等下看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-10 10:01:149楼 得分:0
    怎么打不开网页呀?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • icoding
    • 等级:
    发表于:2008-06-10 11:01:1210楼 得分:0
    < <INTEL汇编语言程序设计>> 代码编译
    前一周去中关村,看了一下Thinkpad T61的样机,结论是:很想要,可惜银两不足,虽然Ricky答应帮从米国带一台,也只能算了...然后去图书大厦买了一本 < <INTEL 汇编语言程序设计 第5版>> 一直以来也很想要的书,回来的时候还淋了场雨,所幸,书没湿,然后花了差不多一周的时间就把书的内容看了大半

    还是那句话,真正的好书首先是很容易懂,而且之前看了不少C的反汇编代码,所以差不多都是一晚一章,虽然很辛苦,可是很有乐趣,感觉看 < <天龙八部>>似的,看完以后感觉还是有些没吃饱,还想了解更多,呵呵

    下午到公司,想把书上的代码编译出来,结果就像K&R上说的,新手即使是编译一个很简单的程序也不容易,因为首先得熟悉环境和工具,所以花了很大力气,比较气人的是群里一人,居然还教训我,怎么怎么着...其实他自己也未必懂,现在很多人都是这样,一有问题马上就问,其实很多时候还得靠自己

    4版跟了一张光盘,有编译器和代码,编译器是MASM 6.1

    --------------------------------------------------------------------------------

    TITLE Add and Subtract  (AddSub.asm)
    ; This program adds and subtracts 32-bit integers.
    ; Last update: 2/1/02
    INCLUDE Irvine32.inc
    .code
    main PROC
    mov eax,10000h  ; EAX = 10000h
    add eax,40000h  ; EAX = 50000h
    sub eax,20000h  ; EAX = 30000h
    call DumpRegs
    exit
    main ENDP
    END main

    --------------------------------------------------------------------------------

    代码如上,非常的简单,就是说对EAX进行操作,最后把寄存器里的值打印出来,但是一编译的话,就提示我没有声明符号
    unresolved external symbol _DumpRegs@0
    unresolved external symbol _ExitProcess@4

    BAIDU,GOOGLE,CSDN全用上了,最终还是凭借了一篇文章了解了原因
    1)在编译ASM时,应指定INC文件所在的目录
    2)在链接OBJ时,应指定程序里使用的LIB文件的目录
    3)应该在代码里添加 Irvine32.lib Kernel32.lib 的引用

    --------------------------------------------------------------------------------

    TITLE Add and Subtract              (AddSub.asm)
    ; This program adds and subtracts 32-bit integers.
    ; Last update: 2/1/02
    INCLUDE Irvine32.inc
    Includelib Kernel32.lib
    Includelib Irvine32.lib
    .code
    main PROC
    mov eax,10000h  ; EAX = 10000h
    add eax,40000h  ; EAX = 50000h
    sub eax,20000h  ; EAX = 30000h
    call DumpRegs
    exit
    main ENDP
    END main

    --------------------------------------------------------------------------------

    编译链接指令如下
    ML.EXE /C /COFF /I C:\Masm615\INCLUDE 1.asm
    LINK32.EXE /SUBSYSTEM:CONSOLE /LIBPATHC:\Masm615\LIB 1.obj
    /C 是告诉编译器编译的同时不生成可执行文件
    /COFF 产生的 obj文件格式为COFF格式 貌似只有这个格式链接器才能认识
    /I 指定INCLUDE目录 I和盘符之间可以有空格
    /SUBSYSTEM:CONSOLE win32汇编程序在链接时需要指定是windows程序还是控制台程序
    /LIBPATH 指定LIB目录 注意H和盘符之间没有空格

    --------------------------------------------------------------------------------
    kernel32l.lib 包含了系统函数的引用,如果缺少它,代码里调用了exit,链接时就会出现缺少声明的提示
    Irvine32.lib是一个静态库,是 < <Intel汇编语言程序设计>>的作者Kip Irvine写的一个控制台程序专用函数库,如果缺少了,随书代码里一些有用的函数就不能使用了,而这本书为什么容易呢?就是因为作者编写了一些有用的函数适当的屏蔽了复杂性,在不需要详细了解的情况下,就不讲,只是告诉一下,这个函数大概的功能,你这样使用就可以了

    最后:
    不知道是什么原因,作者的程序里似乎没有包含LIB的那两行,而这样的话编译书里的代码,每个程序都得加上这两行了,似乎不是很好
    所以我试了一下,在Irvine32.inc文件的末尾加上
    Includelib Kernel32.lib
    Includelib Irvine32.lib
    就可以不用在每个代码文件里加上这样的代码了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-10 11:14:1011楼 得分:0
    哦,原来如此。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved