首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
汇编语言专题
《x86汇编语言:从实模式到保护模式》视频来了
《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试
阅读更多...
汇编语言知识基础介绍
汇编语言是一种低级编程语言,直接与计算机硬件的指令集架构(ISA)对应。它在操作系统、设备驱动程序和性能关键的应用程序中起着重要作用。以下是汇编语言的基础介绍: 1. 基本概念 指令集架构(ISA):汇编语言与特定的处理器架构(如 x86、ARM)对应,每种架构有其特定的指令集。汇编指令:汇编语言的语法是处理器指令的符号表示,通常包括操作码(opcode)和操作数。操作码指定操作的类型,操作数
阅读更多...
汇编语言输出“Hello World!“
1.软件 Nasmide64.exe(李忠老师编写) Fixvhdw64.exe(李忠老师编写) VirtualBox虚拟机(免费 开源) 2.过程 01.Fixvhdw64.exe输入以下代码: mov ax,0xb800mov ds,axmov byte [0x00],'H'mov byte [0x02],'e'mov byte [0x04],'l'mov byte [0
阅读更多...
ARM——结构体系(处理器工作模式,CPSR,立即数,汇编语言函数调用)
1、处理器工作模式 ARM有7个基本工作模式:User:非特权模式,大部分任务执行在这种模式FIQ:当一个高优先级(fast)中断产生时将会进入这种模式IRQ:当一个低优先级(normal)中断产生时将会进入这种模式Supervisor:当复位或软中断指令执行时将会进入这种模式Abort:当存取异常时将会进入这种模式Undef:当执行未定义指令时会进入这种模式Sy
阅读更多...
ARM下汇编语言编程
一、ARM汇编语言程序格式 ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。 段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。 二、ARM汇编语言中常用的伪操作 例如: area reset,cod
阅读更多...
汇编语言05——包含多个段的程序
整理自fishcc论坛 安全的空间 通常来说,0:200~0:300这段空间是相对安全的,操作系统通常不会去占用 但这只有256个字节,当需要更多空间时,可以向操作系统申请 问题: 编程计算以下8个数据的和,结果存在ax 寄存器中: 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H 程序: assume cs
阅读更多...
汇编语言04——[BX]和loop指令
整理自fishcc论坛课件 首先展示一个新的程序: assume cs:codesg codesg segment start: mov ax,2000H mov ds,ax mov al,[0] mov bl,[1] mov cl,[2] mov dl,[3] mov ax,4C00H int 21H codesg ends end start 使用masm进行
阅读更多...
汇编语言03——第一个汇编程序
整理自鱼C论坛课件 汇编程序编写步骤 编写源代码->使用MASM.exe进行编译,产生目标文件->用LINK.exe,对目标文件进行链接,生成可执行文件 可执行文件中包含两部分内容 1,程序和数据 2,相关的描述信息(程序有多大,要占用多少内存空间等) 源程序: assume cs:abc abc segment mov ax,2 add ax,ax add
阅读更多...
汇编语言02——寄存器(内存访问)
整理自鱼C工作室的课件 DS和address DS寄存器通常用来存放要访问的数据的段地址 例如:我们要读取10000H单元的内容可以用如下程序段进行: mov bx,1000H mov ds,bx mov al,[0] 将10000H(1000:0)中的数据读到al中。 mov指令的格式: mov 寄存器名,内存单元地址 “[…]”表示一个内存单元, “[…]
阅读更多...
汇编语言01——寄存器(CPU的工作原理)
寄存器概述 CPU的组成:运算器,控制器,寄存器 8086CPU有14个寄存器(8个通用寄存器),分别为: AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW 8086CPU所有寄存器都是16位的,可以存放两个字节(一个字) AX,BX,CX,DX是通用寄存器,存放一般性数据 8086上一代CPU的寄存器是8位的;为保证兼容性,这四个寄存器都可
阅读更多...
汇编语言基础--汇编操作指令概述
本文是接续"汇编语言基础--机器级数据存储",主要介绍汇编指令的构造、寻址和指令主要分类。 操作指令 指令的基本要素: 在"计算机处理器(CPU)基础"介绍了一条完整可执行指令包括指令码和操作数。由于同一功能的指令要处理不同数据类型的操作数,这样指令的长度判读、计算的复杂度等存在差别,所以即使是同一功能的指令也存在不同的版本和编码。如针对不同数据类型,mov(传送数据)
阅读更多...
汇编语言基础--机器级数据存储
目前机器级的编程,不再像几十年前对于一个程序员来讲,是需要熟练掌握的技术,现在有很多人甚至不太了解机器指令系统。由于计算机高层的抽象愈加完善,软件项目的构建都可以使用已有的框架来拼凑,机器指令会越来越像天方夜谭。但我认为的计算机系统知识搭建会比较像TCP/IP协议的架构,虽然并不必要精通底层的东西,但了解这些,会在问题发生的时候提供很大的便利。 机器级的编程之所以总结归纳
阅读更多...
《汇编语言》第11章——实验11编写子程序
编写一个子程序,包含任意字符,以0结尾的字符串中的小写字母变成大写字母,描述如下。 名称:letterc 功能:将以0结尾的字符串中的小写字母变成大写字母 参数:ds:si指向的字符串首地址 assume cs:codesgdatasg segmentdb "Beginning's All-purpose Symbolic Instruction Code.",0datasg ends
阅读更多...
汇编语言中出现#include, #define的问题
U_boot源文件中,一些 .S文件中出现了#include, #define,如board\smdk2410目录下的lowlevel_init.S文件: #include <config.h> #include <version.h> /* some parameters for the board */ /* * * Taken from linux/arch/arm/boot/co
阅读更多...
实验11 编写子程序《汇编语言》- 王爽
1. 需求 编写一个子程序,将包含任意字符,以 0 结尾的字符串中的小写字母转变成大写字母,描述如下。 名称:letterc 功能:将以 0 结尾的字符串中的小写字母转变成大写字母 参数:ds:di 指向字符串首地址 返回:无 应用举例: assume cs:code, ds:data data segment db "Beginner's A
阅读更多...
汇编语言学习第八章-数据处理的两个基本问题
本博文系列参考自<<汇编语言>>第三版,作者:王爽 计算机CPU进行数据处理包括两个基本的问题:1.数据在何处? 2.数据有多大? 本章作为一个前面内容的总结性章节,主要来说明这两个问题。我们定义两个符号reg和sreg。其中reg为寄存器,sreg为段寄存器 reg包括:ax,bx,cx,dx,ah,al
阅读更多...
汇编语言学习第七章-更灵活的定位内存地址的方法
本博文系列参考自<<汇编语言>>第三版,作者:王爽 前面已经通过类似[0]和[bx]的方法进行了内存定位了。本章将涉及更多内存地址定位和编程的方法。 7.1 and 和 or 指令 (1) and指令,逻辑按位与指令 例如: mov al,01100011B and al,00111011B 执行后 al=00100011B and指令可以用来
阅读更多...
汇编语言学习第六章-包含多个段的程序
本博文系列参考自<<汇编语言>>第三版,作者:王爽 在前面的介绍的程序中只有一个代码段。那么如果我们需要将代码,数据分别存储在不同的内存空间应该怎么办呢?我们知道我们不可能随便使用任何一段内存空间,因为我们这段内存地址空间可能存储着非常重要的内容。其实,这只是我们考虑的太多啦,一旦我们将程序载入内存后,操作系统为我们分配的用于程序运行的内存空间都是
阅读更多...
汇编语言学习第五章-[BX]和loop指令
本博文系列参考自<<汇编语言>>第三版,作者:王爽 1.[bx]和内存单元的描述 [bx]与我们前面见过的[0]类似,mov ax,[0] 的意思是将内存地址为DS:0的两字节内容存入ax中。其中[0]中的0代表的是偏移地址。 类似的,我们有 mov al,[0]的意思是将内存地址为DS:0的单字节内容存入al中。那么我们可以大胆的推断mov ax,[bx]代表的是将偏移地址为bx寄存
阅读更多...
汇编语言学习第三章-寄存器(内存访问)
本博文系列参考自<<汇编语言>>第三版,作者:王爽 本章将紧接着上一章从内存访问的角度讲解寄存器。 3.1 内存中字的存储 一个字的大小为两个字节,8086CPU一个寄存器的大小为两个字节,所以使用8086CPU的寄存器存储一个字单元的时候,高字节寄存器存储字的高位字节,低字节寄存器存储字的低位字节。类似的,我们在用内存存储一个字的时候,高内存单元存储字
阅读更多...
零基础入门~汇编语言(第四版王爽)~第3章寄存器(内存访问)
文章目录 前言3.1 内存中字的存储3.2 DS 和[address]3.3 字的传送3.4 mov、add、sub指令3.5 数据段检测点3.13.6 栈3.7 CPU提供的栈机制3.8 栈顶超界的问题3.9 push、pop指令3.10 栈 段检测点3.2实验2 用机器指令和汇编指令编程 前言 第2章中,我们主要从CPU 如何执行指令的角度讲解了8086CPU的逻辑结构、形
阅读更多...
汇编语言中常用的寄存器
一、寄存器的分类 寄存器是计算机硬件中的一个小型存储区域,它位于中央处理单元(CPU)内部,用于临时存储数据和指令。寄存器的访问速度非常快,通常比内存中的数据访问速度快得多。寄存器是CPU执行指令时最常使用的存储器,因为它们提供了快速的数据处理和指令执行的能力。 寄存器可以分为以下几类: 1. 通用寄存器:用于存储数据和地址,最常用的寄存器——AX、BX、CX、DX AX是累
阅读更多...
汇编语言:标志寄存器ZF、PF、SF、CF、OF、DF、IF、AF
CPU内部的寄存器中,一种特殊的寄存器(对于不同的CPU,个数和结构可能都不同),具有以下3种作用。 (1)用来存储相关指令的某些执行结果 (2)用来为CPU执行相关指令提供行为依据 (3)用来控制CPU的相关工作方式 这种特殊的寄存器在8086CPU中,被称为标志寄存器,8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(Program
阅读更多...
汇编语言lea指令取数组偏移地址
最近看到一条指令,x86汇编, LEA BX, 6[DI] 根据资料,它的含义是,某数组含20个元素,每个元素占一个字节,序号为0~19。设DI指向数组开头处,把序号为6的元素的偏移地址送到BX中; lea指令, Load effective address,取有效地址,也就是取偏移地址; lea指令用于把源操作数的地址偏移量传送目的操作数。 不知道这条指令是不是对的,6[
阅读更多...
汇编语言中的高效引擎:深入理解流水线技术
标题:汇编语言中的高效引擎:深入理解流水线技术 引言 在现代计算机架构中,流水线(Pipeline)是一种允许多个指令同时在处理阶段中前进的技术,极大地提高了处理器的效率和性能。在汇编语言层面理解流水线,对于编写高效代码至关重要。本文将深入探讨流水线的工作原理、优势、挑战以及如何在汇编语言中有效利用流水线。 流水线的基本概念 流水线是计算机中的一种硬件实现技术,它将指令的执行过程分解为多个
阅读更多...
Aseembly(八)-汇编语言编写程序
前言 在该系列的第六篇文章我们主要讲述了:关于栈的寄存器:SS和SP的问题 来回一下: 对于栈指针来说,栈在被开辟的时候,首先要通过SS指针去找到开辟栈的地址空间的首地址,随后,SP指针指向该栈空间的末尾的下一个空间处.当执行push指令时,sp会-2 随后将目标压入栈中 当执行pop指令时,会先将元素弹出,随后执行sp+2 还回顾了关于不同段寄存器的作用: ds与[] 是读取数据 cs:ip是
阅读更多...