linux下用汇编语言写"你好,天下!"

1.vim编写 你好.asm

[section .data]         ;  // 数据在此
    nihao db "你好,天下!", 0Ah
    STRLEN equ $ - nihao
    [section .text]  ; // 代码在此
    global _start    ; // 我们必须导出 _start这个入口,以便让链接器识别
 
_start:
    mov edx, STRLEN
    mov ecx, nihao
    mov ebx, 1
    mov eax, 4    ;  sys_write
    int 0x80         ;  系统调用
    mov ebx, 0
    mov eax, 1    ;  sys_exit
    int 0x80         ;  系统调用

2.安装nasm汇编编译器

sudo apt-get install nasm (深度deepin, Debian, ubuntu等)

yum install nasm    (其它系统Fedora和RedHat以及CentOS中)

 

3.针对不同平台进行编译连接

nasm -f elf64 你好.asm -o 你好.o

 

4.生成可执行文件:

ld -o 你好 你好.o

 

5.运行文件:

./你好

6.解决问题:

ld: i386 架构于输入文件 hello.o 与 i386:x86-64 输出不兼容

电脑的架构是x86_64,即是64位的电脑,我-f elf 默认32位命令去编译,改成 -f elf64即可

 

7.相关参数说明:

-f elf【64,32】以32位,还是64位编译输出

我的系统架构是64位的

-o hello.o  指定输出的文件名是hello.o

-g 编译时生成调试信息

使用ld链接生成可执行文件

 

番外:

 内存的最小单位是字节  byte=8bit

在内存中,指令和数据是没有任何取别的,都是二进制信息,cpu只有在工作的时候才将有的信息当作指令

有的信息当作数据,cpu根据什么将内存中的信息当作指令?cpu将cs:ip指向的内存单元中的内容当作指令。

cs:ip决定了cpu从哪里开始读取指令。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值