汇编语言程序范例

这个程序主要功能是显示CPU厂商的Vendor ID

源代码如下:

.section .data

#x是占位符
output:
    .ascii "The processor Vendor ID is: ‘xxxxxxxxxx‘\n"

#_start和output都是标签
.section .text

#如果用gcc编译的话,_start要改为main
.global _start
_start:
    movl $0, %eax
    cpuid

#相当于把字符串output的地址传入到寄存器edi中.
movl $output, %edi

#将调用cpuid命令的内容放入指定的内存
movl %ebx, 28(%edi)
movl %edx, 32(%edi)
movl %ecx, 36(%edi)

#4表示系统调用的值,1表示文件描述符, output是输入的字符
movl $4, %eax
movl $1, %ebx
movl $output, %ecx
movl $42, %edx

#"int $0x80"是系统调用中断
int $0x80
movl $1, %eax
movl $0, %ebx
int $0x80

编译

as -o cpuid.o assembly_template.s

ld -o cpuid cpuid.o

执行

./cpuid

输出

The processor Vendor ID is: GenuineIntel

时间: 2024-07-28 22:27:24

汇编语言程序范例的相关文章

AT&T 汇编语言程序范例

.section .data output: .ascii "The processor Vendor ID is 'xxxxxxxxxxxx'\n" .section .text .globl _start _start: movl $0, %eax cpuid # 创建一个指针,处理内存中声明的 output 变量时会使用这个指针 # output 标签的内存位置被加载到 EDI 寄存器中 # 包含厂商 ID 字符串片段的三个寄存器的内容被放到数据内存的正确位置 # 括号外的数字表

汇编语言程序设计读书笔记(3)- 程序范例

主要描述三方面的内容:第一是汇编语言的程序模版,以及模版涉及到的一些知识点:第二是如何调试汇编语言:第三是如何在汇编语言中调用C库函数. 1. 汇编语言的组成 汇编语言由段(section)组成,一个程序中执行的代码,叫文本段(text),程序还可能有定义变量,有付给初始值的变量放在数据段(data)中,没有赋初值或者付给零初值的放在bss段中.text段一定是要有的,data和bss可以没有. 2. 段的定义 用.section语法定义段.比如: .section .text定义文本段, .s

X86汇编6.编写汇编语言程序

最近学习了X86汇编,其实无论是古老的8086还是现在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位数,寻址空间,寄存器个数,指令集的扩充等方面有所不同,对于学习,8086永不过时. 1.程序从写入到执行的过程(1)编写汇编程序代码===>输出程序文件,helloworld.asm 或 helloword.s(一般linux下用.S命名汇编文件)(2)对代程序代码进行编译和链接编译就是: 源码文件---编译--->目标文件链接就是: 目标文件---链接--->

C程序范例(3)——结构体

一.结构体类型定义. 结构体类型和数组类型一样,需要由程序员定义,必须限定以后使用. struct 类型标识符 { 类型名 成员名; 类型名 成员名; ... }; 其中,struct 是结构体类型定义的关键字,他与其后用户指定的类型标识符共同组成结构体类型名.例如学生结构体类型定义如下: struct st_type { char num[7]; char name[20]; char sex; int age; float score; char address[30]; }; 说明:(1)

Python面向对象编程 - 一个记事本程序范例(二)

给程序加上控制台菜单 menu.py import sys from notebook import Notebook, Note class Menu: '''Display a menu and respond to choices when run.''' def __init__(self): self.notebook = Notebook() self.choices = { "1": self.show_all_notes, "2": self.sea

[基于Android的ARM汇编语言系列]之三:ARM汇编语言程序结构

作者:郭嘉 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell Android平台的ARM汇编是GNU ARM汇编格式,使用的汇编器是GAS(GNU Assembler),GAS有自己的一套语法结构.详细的内容可以查阅GAS语法结构官方手册. 我们先来看一个完整的ARM汇编程序: C代码: #include <stdio.h> int main(int argc,

汇编语言程序:16进制转换成10进制(三种方法)

1 ;天水浪客(Gouki Jiang) , 16进制to10进制例题 2007.5.18 2 STACK SEGMENT PARA STACK 3 S_AREA DW 100H DUP(?) 4 S_TOP EQU $-S_AREA 5 STACK ENDS 6 7 DATA SEGMENT PARA 8 VALUE DW 0EB9AH ;060314 9 RESULT DB 5 DUP(?),'$' 10 DATA ENDS 11 12 CODE SEGMENT PARA 13 ASSUME

AT&amp;T汇编语言——工具及程序组成

1.开发工具 在汇编语言中,用到的工具主要用以下几个: 汇编器.连接器.调试器.编译器 因为我在这里的是AT&T汇编语言,所以工具下也都是gnu下的那些. 1.1 汇编器(as) 汇编器有很多,masm,nasm,gas等,不像高级语言,虽然都叫汇编语言,但不同的汇编器,其语法是存在很大不同的.Intel汇编的书籍到处可见,可是AT&T的却少之又少.但想看Linux内核的话,还是要对AT&T汇编熟悉才行.这也许是自己为什么学习汇编的原因吧.说到汇编器,我们用的是as,其可选参数有很

程序的载入和运行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25

程序的载入和运行(五)--<x86汇编语言:从实模式到保护模式>读书笔记25 前面几篇博文最终把代码分析完了.这篇就来说说代码的编译.运行和调试. 1.代码的编译及写入镜像文件 之前我们都是在命令行输入命令进行编译和写入.源文件少的时候还不认为麻烦,当源文件多了,就会认为特别麻烦.有没有简单的方法呢? 当然有,就是用make工具. 1.1.什么是make工具 make是一个命令工具,它解释Makefile中的指令.在Makefile文件里描写叙述了整个project全部文件的编译顺序.编译规则