NASM编译王爽的《汇编语言2》中的第一个程序未通过

时间:2022-05-14 13:15:38
    疑惑:
     1. 汇编语言有没有标准?(比如C语言就有ANSI标准)
     2. 汇编语言是不是与汇编编译器有关? (我知道的有GNU as, MASM, NASM)
     3. 汇编进阶的书籍有哪些?
     4. NASM编译王爽的《汇编语言第二版》中的第一个程序未通过, 为什么?

    王爽 《汇编语言第二版》中第一个汇编语言程序的代码:


assume cs:codesg
codesg segment
        mov ax,0123h
        mov bx,0456h
        add ax,bx
        add ax,ax

        mov ax,4c00h
        int 21h
codesg ends
end

12 个解决方案

#1


1,2,3不懂,4,用 masm,因为 nasm语法格式是ATT的。而王爽老师里的示例用的是Intel格式的。

#2


上面贴的代码文件名为 firstASM.asm,

nasm -o firstASM.bin firstASM.asm 之后的错误信息如下:

  firstASM.asm:1: error: parser: instruction expected
  firstASM.asm:2: error: parser: instruction expected
  firstASM.asm:10: error: symbol `codesg' redefined
  firstASM.asm:10: error: parser: instruction expected

#3


Sorry, 我忘了说我用的是Ubuntu, 估计没MASM ^_^

#4


  Hi masmaster, 烦请问下ATT是不是 <==> AT&T ?

#5


问题1:汇编大体分AT&T格式汇编与intel格式汇编两种,详细资料自己google!
问题2:汇编语言语法细节确实与编译器有关!
问题3:汇编学习的顺序一般为实模式汇编与保护模式汇编!王爽的和intel汇编程序设计可作为入门教材,提高教材有罗云斌的win32汇编程序设计,于渊自己动手写操作系统。
问题4:再回到问题1,ubuntu下的汇编大都是AT&T格式的汇编,微软的windows系统大都为intel格式的汇编,王爽的书基于intel格式的汇编,须用masm编译器,如果用nasm编译器须做改变。

#6


没有masm,那可以用虚拟机装个xp系统。

#7


看不懂 
学了这么久还是看不懂

#8


引用 3 楼 flowingfirefly 的回复:
Sorry, 我忘了说我用的是Ubuntu, 估计没MASM ^_^

听六楼的,装个XP或者在linux下装一个DOSEMU,也可。

#9


引用楼主 flowingfirefly 的回复:
疑惑:
  1. 汇编语言有没有标准?(比如C语言就有ANSI标准)
  2. 汇编语言是不是与汇编编译器有关? (我知道的有GNU as, MASM, NASM)
  3. 汇编进阶的书籍有哪些?
  4. NASM编译王爽的《汇编语言第二版》中的第一个程序未通过, 为什么?

  王爽 《汇编语言第二版》中第一个汇编语言程序的代码:


Assembly code

as……

(一)选Windows XP或Win7操作系统
(二)下载MASM32开发包 下载地址: http://www.masm32au.com/masm32/masm32v11r.zip
(三)双击开发包文件名,按照提示安装开发包,假设安装目录为:D:\masm32
(四)在D:盘(其他盘也行)建立一个存放你写的源代码的目录,假设目录的路径是D:\myasm
(五)在D:\myasm目录下用写字本新建一个文件,取名为:s.bat,文件用来设置环境变量,内容如下:
SET PATH D:\masm32
SET INCLUDE=D:\masm32\INCLUDE
SET LIB=D:\masm32\LIB
(六)打开控制台窗口,将当前目录切换到你的源文件所在目录d:\myasm 
(有的人称命令行窗口,有的人称DOS窗口)
(你可以通过窗口左下角的 开始》程序》附件》命令行提示符 这一系列查找操作,最后打开控制台窗口)
(七)在控制台窗口输入 s.bat,然后敲回车键执行。这一步用来配置你的编译环境变量。
(八)在控制台窗口输入ml,然后敲回车键执行,看看窗口是不是有了执行ml的信息,如果有,说明配置对了,如果说文件没找到,那就是环境变量配置的不对。
(九)将你在一楼提供的源文件复制到d:\myasm目录下,假设名称为f.asm
(十)在控制台窗口输入:
ml /Bllink16.exe f.asm
然后敲回车键执行,如果源代码没有错误,会在d:\myasm目录下生成f.exe文件
(十一)在命令行窗口输入:f,然后敲回车键执行,查看你编制的程序运行情况。(可惜你的f.asm程序没有输出信息,所以你什么也看不到)
祝LZ好运。

#10


……ubuntu是AT&T的汇编吧

#11


谢谢大家了!! NASM编译王爽的《汇编语言2》中的第一个程序未通过

#12


晕,assume 
segment
ends
end
这些都是masn的语法,
要用masn编译器。
nasm语法是
[section.xx]定义一个段。

#1


1,2,3不懂,4,用 masm,因为 nasm语法格式是ATT的。而王爽老师里的示例用的是Intel格式的。

#2


上面贴的代码文件名为 firstASM.asm,

nasm -o firstASM.bin firstASM.asm 之后的错误信息如下:

  firstASM.asm:1: error: parser: instruction expected
  firstASM.asm:2: error: parser: instruction expected
  firstASM.asm:10: error: symbol `codesg' redefined
  firstASM.asm:10: error: parser: instruction expected

#3


Sorry, 我忘了说我用的是Ubuntu, 估计没MASM ^_^

#4


  Hi masmaster, 烦请问下ATT是不是 <==> AT&T ?

#5


问题1:汇编大体分AT&T格式汇编与intel格式汇编两种,详细资料自己google!
问题2:汇编语言语法细节确实与编译器有关!
问题3:汇编学习的顺序一般为实模式汇编与保护模式汇编!王爽的和intel汇编程序设计可作为入门教材,提高教材有罗云斌的win32汇编程序设计,于渊自己动手写操作系统。
问题4:再回到问题1,ubuntu下的汇编大都是AT&T格式的汇编,微软的windows系统大都为intel格式的汇编,王爽的书基于intel格式的汇编,须用masm编译器,如果用nasm编译器须做改变。

#6


没有masm,那可以用虚拟机装个xp系统。

#7


看不懂 
学了这么久还是看不懂

#8


引用 3 楼 flowingfirefly 的回复:
Sorry, 我忘了说我用的是Ubuntu, 估计没MASM ^_^

听六楼的,装个XP或者在linux下装一个DOSEMU,也可。

#9


引用楼主 flowingfirefly 的回复:
疑惑:
  1. 汇编语言有没有标准?(比如C语言就有ANSI标准)
  2. 汇编语言是不是与汇编编译器有关? (我知道的有GNU as, MASM, NASM)
  3. 汇编进阶的书籍有哪些?
  4. NASM编译王爽的《汇编语言第二版》中的第一个程序未通过, 为什么?

  王爽 《汇编语言第二版》中第一个汇编语言程序的代码:


Assembly code

as……

(一)选Windows XP或Win7操作系统
(二)下载MASM32开发包 下载地址: http://www.masm32au.com/masm32/masm32v11r.zip
(三)双击开发包文件名,按照提示安装开发包,假设安装目录为:D:\masm32
(四)在D:盘(其他盘也行)建立一个存放你写的源代码的目录,假设目录的路径是D:\myasm
(五)在D:\myasm目录下用写字本新建一个文件,取名为:s.bat,文件用来设置环境变量,内容如下:
SET PATH D:\masm32
SET INCLUDE=D:\masm32\INCLUDE
SET LIB=D:\masm32\LIB
(六)打开控制台窗口,将当前目录切换到你的源文件所在目录d:\myasm 
(有的人称命令行窗口,有的人称DOS窗口)
(你可以通过窗口左下角的 开始》程序》附件》命令行提示符 这一系列查找操作,最后打开控制台窗口)
(七)在控制台窗口输入 s.bat,然后敲回车键执行。这一步用来配置你的编译环境变量。
(八)在控制台窗口输入ml,然后敲回车键执行,看看窗口是不是有了执行ml的信息,如果有,说明配置对了,如果说文件没找到,那就是环境变量配置的不对。
(九)将你在一楼提供的源文件复制到d:\myasm目录下,假设名称为f.asm
(十)在控制台窗口输入:
ml /Bllink16.exe f.asm
然后敲回车键执行,如果源代码没有错误,会在d:\myasm目录下生成f.exe文件
(十一)在命令行窗口输入:f,然后敲回车键执行,查看你编制的程序运行情况。(可惜你的f.asm程序没有输出信息,所以你什么也看不到)
祝LZ好运。

#10


……ubuntu是AT&T的汇编吧

#11


谢谢大家了!! NASM编译王爽的《汇编语言2》中的第一个程序未通过

#12


晕,assume 
segment
ends
end
这些都是masn的语法,
要用masn编译器。
nasm语法是
[section.xx]定义一个段。