linux汇编语言程序设计
1. linux中汇编语言AT&A用call printf指令运行程序老是汇出现segmentation fault
应该是你链接了64位的标准库
试试看这个,生成32位的可执行程序:
gcc t.s -nostartfiles -o t -m32
2. linux系统中使用vim编辑器编辑汇编程序不能用#define
都知道没有 #define 了,当然会有错。那行被当作注释了。错误说的就是 GPKCON 没有定义。
3. linux下的asm目录,asm代表什么意思
asm是assembly language 的简称,即:汇编语言。asm是一个符号连接,只有在你的主makefile的ARCH 变量赋值,并且编译过一遍内核之后才会指向对应的体系结构,这个文件夹下的东西是体系结构相关的。如:make的时候 /include/asm 指向 /include/asm-x86/
4. 如何在64位的Linux系统上使用汇编和C语言混合编程 第2页
编译和链接的时候使用的指令:(AMD处理器,64位操作系统)
编译链接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -c bar.c -o bar.o
3 ld -s -o foobar bar.o foo.o
汇编语言用nasm编写并用nasm编译器编译,而C语言用的是gcc编译,这些都没有问题,但是在链接的时候出错了,提示如下:
ld: i386 architecture of input file `foo.o' is incompatible with i386:x86-64 output
google了一下,意思就是nasm 编译产生的是32位的目标代码,gcc 在64位平台上默认产生的是64位的目标代码,这两者在链接的时候出错,gcc在64位平台上默认以64位的方式链接。
这样在解决的时候就会有两种解决方案:
<1> 让gcc 产生32位的代码,并在链接的时候以32位的方式进行链接
在这种情况下只需要修改编译和链接指令即可,具体如下:
32位的编译链接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -m32 -c bar.c -o bar.o
3 ld -m elf_i386 -s -o foobar foo.o bar.o
具体的-m32 和 -m elf_i386 请自行查阅gcc (man gcc)
如果你是高版本的gcc(可能是由于更新内核造成的),可能简单的使用-m32 的时候会提示以下错误(使用别人的历程,自己未曾遇到):
> In file included from /usr/include/stdio.h:28:0,
> from test.c:1:
> /usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
> compilation terminated.
这应该是缺少构建32 位可执行程序缺少的包,使用以下指令安装:
sudo apt-get install libc6-dev-i386
此时应该就没有什么问题了。
5. Linux下的汇编语言程序设计怎么入门高手指条路~
Linux下使用的是AT&T汇编格式和Intel 汇编格式不同。可以参考“ Linux汇编语言 ”。比如:堆栈操作:(AT&T格式:pushl %eax) (Intel 格式:push eax )
6. Linux系统里如何编译汇编程序。
linux 编译汇编程序常用的有两种,一种是A&T方式的,你gcc 就可以编译了。还有一种是80X86方式,一般是用NASM,NASM你要在安装LINUX时就要添加软件包,或者你进入图型界面,增加NASM软件包,就可以编译了。
7. 求《汇编语言:基于Linux环境第三版》全文免费下载百度网盘资源,谢谢~
《汇编语言:基于Linux环境第三版》网络网盘pdf最新全集下载:
链接: https://pan..com/s/1Rpk5FmfsXmuEJUKPgauxbA
简介:本书是风靡美国的经典汇编语言畅销书籍的最新版,美国计算机领域着名作者Jeff Duntemann的力作。作者以其渊博的专业知识,丰富的实战经验,结合生动详尽的实例,全面系统地介绍了Linux环境下如何使用汇编语言进行程序设计以及与之有关的背景知识和相关工具的使用。本书写作风格独特,全书采用作者最有特色的对话式风格,结合大量源于生活的暗喻,将晦涩难懂的知识点条分缕析地呈现出来,以便读者能以轻松愉快的心情学习。 本书适合刚涉足Linux环境下汇编语言的读者,也可作为相关技术人员的参考书。
8. 汇编语言用什么软件写的后缀名是什么
汇编语言不是用什么软件写的,是由字母、单词来代替一个特定的指令来编辑的,后缀名是.asm。
汇编语言是用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用“ADD”代表数字逻辑上的加减,“MOV”代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便。
汇编语言具有更高的机器相关性,更加便于记忆和书写,但又同时保留了机器语言高速度和高效率的特点。汇编语言仍是面向机器的语言,很难从其代码上理解程序设计意图,设计出来的程序不易被移植,故不像其他大多数的高级计算机语言一样被广泛应用。
(8)linux汇编语言程序设计扩展阅读
汇编语言表达式常量:
1>数值常量1010H
2>符号常量
伪指令:<符号名>EQU<表达式>
功能:定义所指符号常量所代表的常量的值
说明:表达式可以是常数、指令助记符、伪指令助记符、寄存器名字或其他自定义的符号
例子:VAEQU100;表达式为常数
NUMEQUVA+100;表达式为数值表达式
OPEEQUADD;表达式为指令助记符
伪指令:<符号名>=<常数表达式>
功能:定义所指符号常量所代表的常量的值
说明:“=”之后只能是常数,对于字符和字符串汇编时按照整数处理
例子:VA=100
NUM=3*100
NUM=VA+500
9. 一个汇编语言程序,急求急求!!
下列程序,经过实验验证,可以满足题目要求。
;------------------------------
DATA SEGMENT
X DB 80 DUP (0) ;预留80个字符的空间.
DATA ENDS
;------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
;-------------------------
LEA BX, X ;起始地址
_IN_:
MOV AH, 1 ;输入字符.
INT 21H
CMP AL, '$'
JZ _0D0A
MOV [BX], AL
INC BX
JMP _IN_
;-------------------------
_0D0A: ;回车换行.
MOV DL, 13
MOV AH, 2
INT 21H
MOV DL, 10
INT 21H
;-------------------------
_PR_: ;反序输出.
DEC BX
CMP BX, -1
JZ EXIT
MOV DL, [BX]
MOV AH, 2
INT 21H
JMP _PR_
;-------------------------
EXIT:
MOV AH, 4CH
INT 21H
CODE ENDS
END START
;------------------------------
10. 汇编语言是一种什么语言
汇编语言是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
(10)linux汇编语言程序设计扩展阅读:
自从1946年世界上第一台电子计算机问世,人类和机器的交流方式和语言就成为了软件工程师和计算机从业者的主要研究方向,更有效更简便的编程语言成为了软件工程师的新宠儿,伴随着计算机的飞速发展,计算机的硬件升级速度也越来越快,对编程语言的要求也日益严格。
在过去的几十年,编程语言有了长足的发展,至今已经有四代语言问世。大量的编程语言为了满足不同领域的编程要求和软件功能,经历 了被修改,被取代,被发展等过程,最终发展成了现在编程语言的多样化。尽管人们多次试图寻找一个能够适应所有编程环境的通用语言,但 是却没有一次成功。程序设计语言正在与现代科技日益飞跃,人类的智慧在日益彰显。