利用VMware虚拟机,用汇编语言编写代码调用系统调用并输出

section .data
    msg db 'Press any key to continue...', 0

section .text
    global _start

_start:
    ; 显示消息
    mov eax, 4 ; 系统调用号为 4 (write)
    mov ebx, 1 ; 文件描述符 1 是标准输出
    mov ecx, msg ; 消息字符串的地址
    mov edx, 28 ; 消息字符串的长度
    int 0x80 ; 调用系统调用

    ; 等待中断
    mov eax, 3 ; 系统调用号为 3 (read)
    mov ebx, 0 ; 文件描述符 0 是标准输入
    mov ecx, buf ; 输入缓冲区的地址
    mov edx, 1 ; 缓冲区的大小
    int 0x80 ; 调用系统调用

    ; 退出程序
    mov eax, 1 ; 系统调用号为 1 (exit)
    xor ebx, ebx ; 返回值为 0
    int 0x80 ; 调用系统调用

上面是Linux下x86(32位)调用write系统调用进行输出的代码,请把“Press any key to continue...”换成自己感兴趣的语句,并进行编译、链接和运行,给出运行截图,画思维导图,说明对系统调用原理的理解和心得体会。

上面的代码是应用于32位,我用的是64位的,所以对于代码需要稍加改动

下面是更改后的代码

.section .data
	msg: .ascii "我是边梦梦,请输入...\n"
	buf: .ascii "read:"                                         "
.section .text
	.global main

main:
	# 显示消息
	mov $4,%eax 		# 系统调用号为 4 (write)
    mov $1,%ebx 		# 文件描述符 1 是标准输出
    mov $msg,%ecx 		# 消息字符串的地址
    mov $29,%edx 		# 消息字符串的长度,一个汉字占3个字节
    int  $0x80 			# 调用系统中断


	# 等待输入,产生中断
	mov $3,%eax 		# 系统调用号为 3 (read)
	mov $0,%ebx 		# 文件描述符 0 是标准输入
	mov $(buf+5),%ecx 	# 输入缓冲区的地址
	mov $64,%edx 		# 缓冲区的大小
	int $0x80 			# 调用系统中断

	# 显示消息
	mov $4,%eax 		# 系统调用号为 4 (write)
    mov $1,%ebx 		# 文件描述符 1 是标准输出
    mov $buf,%ecx 		# 消息字符串的地址
    mov $64,%edx 		# 消息字符串的长度
    int  $0x80 			# 调用系统调用
	
	# 退出程序
	mov $1, %eax 		# 系统调用号为 1 (exit)
    mov $0, %ebx 		# 返回值为 0
    int $0x80 			# 调用系统调用

.section .data
    msg: .ascii "我是边梦梦,请输入...\n"
    buf: .ascii "read:"            

这里是为了声明两个变量,.ascii是表示它是一段ascii形式的字符串

buf同理

# 显示消息
    mov $4,%eax         # 系统调用号为 4 (write)
    mov $1,%ebx         # 文件描述符 1 是标准输出
    mov $msg,%ecx         # 消息字符串的地址
    mov $29,%edx         # 消息字符串的长度,一个汉字占3个字节
    int  $0x80             # 调用系统中断
 

这段是为了把msg的“我是边梦梦,请输入...\n” 显示在屏幕上(所以用的是write)

# 等待输入,产生中断
    mov $3,%eax         # 系统调用号为 3 (read)
    mov $0,%ebx         # 文件描述符 0 是标准输入
    mov $(buf+5),%ecx     # 输入缓冲区的地址
    mov $64,%edx         # 缓冲区的大小
    int $0x80             # 调用系统中断

这段是为了在BUF字符串 “read:”后进行键盘输入,所以输入缓冲区的地址buf要+5,进行读取你键盘输入的数据。

此处 mov $64,%edx  ,你也可以自行更改大小

# 显示消息
    mov $4,%eax         # 系统调用号为 4 (write)
    mov $1,%ebx         # 文件描述符 1 是标准输出
    mov $buf,%ecx         # 消息字符串的地址
    mov $64,%edx         # 消息字符串的长度
    int  $0x80             # 调用系统调用

 这段是为了把刚才你的键盘输入的显示到你的屏幕上

最后就是退出程序,就结束啦,这样运行出来的结果就是

 这个命令将编译test.S文件并生成一个名为test的可执行文件,生成的可执行文件不是一个位置独立的可执行文件。

可以使用./test命令在终端上运行生成的可执行文件

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ARM9嵌入式系统设计基础教程ppt 第1章 嵌入式系统基础知识 1.1 嵌入式系统的定义和组成 1.1.1 嵌入式系统的定义 1.1.2 嵌入式系统发展趋势 1.1.3 嵌入式系统的组成 1.1.4 实时系统 1.2 嵌入式微处理器体系结构 1.2.1 冯•诺依曼结构与哈佛结构 1.2.2 精简指令集计算机 1.2.3 流水线技术 1.2.4 信息存储的字节顺序 1.3 嵌入式微处理器的结构和类型 1.3.1 嵌入式微控制器 1.3.2 嵌入式微处理器 1.3.3 嵌入式DSP处理器 1.3.4 嵌入式片上系统 1.3.5 多核处理器 思考题与习题 第2章 ARM体系结构 2.1 ARM体系结构简介 2.2 ARM微处理器结构 2.2.1 ARM7微处理器 2.2.2 ARM9微处理器 2.2.3 ARM9E微处理器 2.2.4 ARM10E微处理器系列 2.2.5 SecurCore微处理器 2.2.6 StrongARM微处理器 2.2.7 XScale微处理器 2.3 ARM微处理器的寄存器结构 2.3.1 处理器运行模式 2.3.2 处理器工作状态 2.3.3 ARM微处理器的寄存器组织 2.3.4 Thumb状态的寄存器集 2.4 ARM微处理器的异常处理 2.4.1 ARM体系结构的异常类型 2.4.2 异常类型的含义 2.4.3 异常的响应过程 2.4.4 应用程序中的异常处理 2.5 ARM的存储器结构 2.6 ARM微处理器指令系统 2.6.1 基本寻址方式 2.6.2 ARM指令集 2.6.3 Thumb 指令集 2.7 ARM微处理器的接口 2.7.1 ARM协处理器接口 2.7.2 ARM AMBA接口 2.7.3 ARM I/O结构 2.7.4 ARM JTAG调试接口 思考题与习题 第3章 32 Bit RISC微处理器 S3C2410A 3.1 S3C2410A简介 3.1.1 S3C2410A内部结构 3.1.2 S3C2410A的技术特点 3.2 S3C2410A存储器控制器 3.2.1 S3C2410A的存储器控制器特性 3.2.1 S3C2410A的存储器映射 3.3 时钟和电源管理 3.4 S3C2410A的I/O口 3.4.1 S3C2410A的I/O口配置 3.4.2 S3C2410A的I/O口寄存器 3.5 S3C2410A的中断控制 3.5.1 ARM系统的中断处理 3.5.2 S3C2410A的中断控制器 3.5.3 S3C2410A中断编程实例 3.6 S3C2410A的DMA控制器 3.6.1 DMA工作原理 3.6.2 S3C2410A的DMA控制器 3.6.3 S3C2410A DMA编程实例 思考题与习题 第4章 嵌入式系统的存储器系统 4.1 存储器系统概述 4.1.1 存储器系统的层次结构 4.1.2 高速缓冲存储器 4.1.3 存储管理单元 4.2 嵌入式系统存储设备分类 4.2.1 存储器部件的分类 4.2.2 存储器的组织和结构 4.2.3 常见的嵌入式系统存储设备 4.3 NOR Flash接口电路 4.3.1 NOR Flash存储器Am29LV160D 4.3.2 S3C2410A与NOR Flash存储器的接口电路 4.4 NAND Flash接口电路 4.4.1 S3C2410A NAND Flash控制器 4.4.2 S3C2410A与NAND Flash存储器的接口电路 4.5 SDRAM接口电路 4.6 CF卡接口电路 4.6.1 PCMCIA接口规范 4.6.2 S3C2410A的CF卡接口电路 4.6.3 CF卡的读操作 4.7 SD卡接口电路 4.7.1 SD卡的接口规范 4.7.2 S3C2410A的SD卡接口电路 4.8 IDE接口电路 4.8.1 S3C2410A 的IDE接口电路 4.8.2 IDE硬盘读/操作 思考题与习题 第5章 嵌入式系统输入/输出设备接口 5.1 GPIO(通用输入/输出接口) 5.1.1 GPIO原理与结构 5.1.2 S3C2410A输入/输出端口编程实例 5.2 A/D转换器接口 5.2.1 A/D(模/数)转换的方法和原理 5.2.2 S3C2410A的A/D转换器 5.2.3 S3C2410A A/D接口编程实例 5.3 D/A转换器接口 5.3.1 D/A(数/模)转换器的方法和原理 5.3.2 S3C2410A与D/A转换器的接口电路 5.4 键盘与LED数码管接

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值