首页 > 编程语言 >汇编语言简易教程(4):基本语法

汇编语言简易教程(4):基本语法

时间:2024-04-10 12:25:14浏览次数:24  
标签:初始化 教程 汇编语言 section mov 语法 必须 variable bit

汇编语言简易教程(4):基本语法

以yasm语法为主

注释

;​ 分号之后的所有内容全都是注释, 没有实际作用.

数值

数值必须是 10进制 / 16进制 / 八进制

最终都会被转为16进制的数字, 以0x​开头, 例如 127​ ->0x7f

当使用8进制的时候: 511​ -> 777q

默认基数(基数)为十进制,因此十进制(基数为 10)数字不需要特殊符号

定义常量

表示方法为

<name> equ <value>

例如:

SIZE equ 10000

在组装过程中,常量将替换为其定义的值。

因此,常量没有分配内存位置。

这使得常量更加灵活,因为它没有分配特定的类型/大小(字节、字、双字等)。

这些值受预期用途的范围限制。

数据段

初始化数据必须在“section.data”部分中声明

“section”一词后面必须有一个空格。

所有初始化的变量和常量都放置在段中。

变量名必须以字母开头,后跟字母或数字,包括一些特殊字符(例如下划线、“_”)。

变量定义必须包括变量的名称、数据类型和初始值.

基本格式

<variableName> <dataType> <initialValue>

类型

类型 含义
db 8-bit variable(s)
dw 16-bit variable(s)
dd 32-bit variable(s)
dq 64-bit variable(s)
ddq 128-bit variable(s) → integer
dt 128-bit variable(s) → float

示例​

image

BSS 段

存储类似实现开辟的数组, 未填充值.

初始化数据必须在“section.bss”部分中声明

“section”一词后面必须有一个空格。

所有初始化的变量和常量都放置在段中。

变量名必须以字母开头,后跟字母或数字,包括一些特殊字符(例如下划线、“_”)。

变量定义必须包括变量的名称、数据类型和初始值.

基本格式

<variableName> <restype> <coudnt>

类型

类型 含义
resb 8-bit variable(s)
resw 16-bit variable(s)
resd 32-bit variable(s)
resq 64-bit variable(s)
resdq 128-bit variable(s) → integer

参考

image

分配的数组未初始化为任何特定值.

代码段

初始化数据必须在“section.text”部分中声明

“section”一词后面必须有一个空格。

代码段部分将包含一些定义初始程序入口点的标题或标签。

例如,假设一个基本程序使用标准系统链接器,则必须包含以下声明:

global _start
_start:

终止程序不需要特殊的标签或指令。

然而,应该使用系统服务来通知操作系统应该终止程序并恢复和重新利用资源(例如内存)

示例程序

eg.asm

; Simple example demonstrating basic program format and layout.
; Ed Jorgensen
; July 18, 2014
; ************************************************************
;  Some basic data declarations

section   .data
EXIT_SUCCESS    equ     0       ; successful operation
SYS_exit        equ     60      ; call code for terminate

bVar1           db      17
bVar2           db      9
bResult         db      0

wVar1           dw      17000
wVar2           dw      9000
wResult         dw      0

dVar1           dd      17000000
dVar2           dd      9000000
dResult         dd      0

qVar1           dq      170000000
qVar2           dq      90000000
qResult         dq      0

;  Code Section
section     .text
global _start
_start:

;  Performs a series of very basic addition operations
;  to demonstrate basic program format.
; ----------
;  Byte example
;   bResult = bVar1 + bVar2
    mov     al, byte [bVar1]
    add     al, byte [bVar2]
    mov     byte [bResult], al

; ----------
;  Double-word example
;   dResult = dVar1 + dVar2
    mov     eax, dword [dVar1]
    add     eax, dword [dVar2]
    mov     dword [dResult], eax

; ----------
;  Quadword example
;   qResult = qVar1 + qVar2
    mov     rax, qword [qVar1]
    add     rax, qword [qVar2]
    mov     qword [qResult], rax

; ************************************************************
;  Done, terminate program.

last:
    mov     rax, SYS_exit       ; Call code for exit
    mov     rdi, EXIT_SUCCESS   ; Exit program with success
    syscall

标签:初始化,教程,汇编语言,section,mov,语法,必须,variable,bit
From: https://www.cnblogs.com/pDJJq/p/18125755/simple-tutorial-of-assembly-language-4-basic-gram

相关文章

  • 汇编语言简易教程(5):环境构建
    汇编语言简易教程(5):环境构建最近在学习assembly64时,需要对程序进行编写->生成汇编代码->调试->执行.本文聚焦于如果在Windows环境下,尽可能精简并且完整的构建一个汇编环境.基于Windows11,WSLUbuntu22.04,vscode,其他的系统/WSL发行版本.您可以以本文作为......
  • 汇编语言简易教程(6):工具链以及调试器
    汇编语言简易教程(6):工具链以及调试器通常,用于创建程序的编程工具集称为工具链。就本文而言,工具链包括以下内容汇编器Assembler​连接器Linker​加载器Loader​调试器Debugger虽然工具链有很多选项,但本文使用了一组相当标准的开源工具,这些工具可以很好地协同工作并......
  • 汇编语言简易教程(4):基本语法
    汇编语言简易教程(4):基本语法以yasm语法为主注释​;​分号之后的所有内容全都是注释,没有实际作用.数值数值必须是10进制/16进制/八进制最终都会被转为16进制的数字,以0x​开头,例如127​->0x7f​当使用8进制的时候:511​->777q​默认基数(基数)为十进制,......
  • 汇编语言简易教程(5):环境构建
    汇编语言简易教程(5):环境构建最近在学习assembly64时,需要对程序进行编写->生成汇编代码->调试->执行.本文聚焦于如果在Windows环境下,尽可能精简并且完整的构建一个汇编环境.基于Windows11,WSLUbuntu22.04,vscode,其他的系统/WSL发行版本.您可以以本文作为......
  • 汇编语言简易教程(6):工具链以及调试器
    汇编语言简易教程(6):工具链以及调试器通常,用于创建程序的编程工具集称为工具链。就本文而言,工具链包括以下内容汇编器Assembler​连接器Linker​加载器Loader​调试器Debugger虽然工具链有很多选项,但本文使用了一组相当标准的开源工具,这些工具可以很好地协同工作并......
  • WebClient类 详细使用教程
    原文链接:https://blog.csdn.net/nutian/article/details/2913670   https://blog.csdn.net/m0_58015531/article/details/131322801WebClient类如果只想从特定的URI请求文件,则可以使用的最简单.NET基类就是System.Net.WebClient。这个类是非常高层的类,它主要用于执行带有一......
  • Python教程‘r’的使用技巧
    嗨,大家好!今天,我们将探讨Python中一个重要但经常被忽视的小技巧'r'。 在Python中,r是一个前缀,它用于处理原始字符串(rawstrings)。原始字符串与普通字符串不同,它们让你在字符串中使用反斜杠符号\而不必担心它们被解释成转义字符。为什么要使用原始字符串?原始字符串......
  • 博客园美化教程
    博客园美化教程前言之前一直想美化博客园,但一直没有找到比较喜欢的主题。最近找到了一个还比较满意的主题,SimpleMemory,特此分享。正文一、申请js权限首先点击这里--->博客后台-博客园(cnblogs.com),来到博客园后台管理页面,点击设置下滑,在基本设置里找到申请js权......
  • ArcGls10.8保姆式安装教程
    ArcGIS10.8保姆式安装教程ArcGIS是由美国Esri公司开发的一套地理信息系统软件,可进行地理信息数据的采集、管理、分析和发布等操作。ArcGIS10.8是ArcGIS系列的最新版本,具有更加强大的功能和更好的性能。本文将介绍ArcGIS10.8的保姆式安装教程,帮助您快速安装和配置ArcGIS10.......
  • Markdown语法笔记
    序言下述笔记为个人结合网上的相关参考资料总结的常用标准markdown语法笔记。支持工具记事本Typora(编辑器,不具备管理功能)Obsidian(编辑+管理)BearUlysses石墨文档幕布常用语法自动生成目录[TOC]部分软件不支持,例如obsidian标题#文本关于标题......