汇编语言基础及编译原理(网安)
汇编语言基础及编译原理
二进制基础
程序的编译 汇编与链接
从c语言到可执行程序
源代码.c
编译
汇编代码.s
汇编
目标文件.o
链接(静态库直接拷贝,动态库运行时通过动态链接方式加载)
可执行文件(p)
x86机器指令入门
栈
一种先进后出的数据结构
被用于保存函数的局部(保存局部变量和返回地址)
栈往低地址增长
esp ...
汇编语言简易教程(14):中断与恢复
汇编语言简易教程(14):中断与恢复
从一般意义上讲,中断是工作流的暂停或保持。 例如,如果您正在打电话,门铃响了,则电话通话将处于暂停状态,门将应答。 销售人员被送走后,电话交谈恢复(对话中断的地方)
在计算机编程中,中断也是当前正在执行的过程的暂停或保持。 通常,当前进程会中断,以便可以执行其他一些工作 ...
汇编语言简易教程(12):系统服务
汇编语言简易教程(12):系统服务
应用程序必须使用操作系统执行许多操作。 此类操作包括控制台输出、键盘输入、文件服务(打开、读取、写入、关闭等)、获取时间或日期、请求内存分配等
访问系统服务是应用程序请求操作系统执行某些特定操作(代表进程)的方式。 更具体地说,系统调用是执行进程和操作系统之间的接口
本节 ...
汇编语言简易教程(11):函数与栈帧
汇编语言简易教程(11):函数与栈帧
需要注意. 这里的函数指的是汇编语言(yasm)的函数, 但对理解其他高级语言的函数在汇编中的实现会有很大的帮助.
函数和过程(即空函数)有助于将程序分解为更小的部分,从而更容易编码、调试和维护。函数调用涉及两个主要操作:
函数链接
由于可以从代码中的多个不同位置调用该函数,因 ...
汇编语言简易教程(10):宏
汇编语言简易教程(10):宏
汇编语言宏是一组预定义的指令,可以轻松插入到需要的地方。
一旦定义,宏可以根据需要多次使用。当必须多次使用同一组代码时,它非常有用。
宏可用于减少编码量、简化程序并减少重复编码带来的错误.
汇编器包含一个强大的宏处理器,支持条件汇编、多级文件包含和两种形式的宏(单行和多行),以 ...
汇编语言简易教程(7):初探指令集
汇编语言简易教程(7):初探指令集
组织顺序
将按照以下顺序进行简单的介绍:
移动
转换
数值
逻辑
控制
符号约定
操作符号
描述
<reg>
寄存器操作数, 该操作数必须为寄存器
<reg8>, <reg16>,<reg32>, <reg64>
带有指定大小的寄存器操作数, 例如reg8指的是byte大小的寄存器, 例如al, bl.reg32指的是do ...
汇编语言简易教程(5):环境构建
汇编语言简易教程(5):环境构建
最近在学习assembly64 时, 需要对程序进行编写 -> 生成汇编代码 -> 调试 -> 执行. 本文聚焦于如果在Windows环境下, 尽可能精简并且完整的构建一个汇编环境.
基于 Windows11, WSL Ubuntu22.04, vscode, 其他的系统/WSL发行版本. 您可以以本文作为简单的参考.
安装
WSL
你首先需要确保自己有 ...
汇编语言简易教程(4):基本语法
汇编语言简易教程(4):基本语法
以yasm语法为主
注释
; 分号之后的所有内容全都是注释, 没有实际作用.
数值
数值必须是 10进制 / 16进制 / 八进制
最终都会被转为16进制的数字, 以0x开头, 例如 127 ->0x7f
当使用8进制的时候: 511 -> 777q
默认基数(基数)为十进制,因此十进制(基数为 10)数字不需要特 ...
第4章 汇编语言程序设计
第4章 汇编语言程序设计
汇编语言语句格式
一、指令格式
[标号:]助记符 操作数1,操作数2 [;注释]
标号:由1-8个字符组成,且第一个字符必须是字母。用于指示指令的地址。
操作数:可使用二(B结尾)、十(D结尾或省略)、十六(H结尾)进制数和字符串(加" ")
注释:为不可执行部分,对程序加以说明。
二、伪指令格 ...
nand2tetris_hack汇编语言
计算机
我接触的第一台电脑是winXP系统,我拥有的第一台电脑是win7,也就说一开始我理解的计算机就有着好看的界面,灵活的操作性方式,拥有许多软件,可以做很多事情。
我们可曾想过,大部分机器都有其专属用途,比如榨汁机只能用来榨汁、削皮刀只能用来削皮,而计算机,他可以播放视频、浏览网页等等,这是一件多么神奇的 ...
汇编语言段定义的使用
目录段定义三步走段定义段关联段传送数据段开辟空间的伪指令存储数据语法格式代码演示段定义三步走
段定义
关键字:segment(开始) ends(结束)
段名:不得超过八个字符。一般情况下,
code 表示代码段。data 表示数据段
语法
段名 segment
段名 ends
段关联
关键字:assume
类型:CS(代码段)、DS(数据段)、SS(堆栈段 ...
汇编语言中move指令的使用
DOSBOX->debug->r,r具有查看的功能
接着输入a,回车,输入:mov ax,5 回车、回车、r
在这里,我们之前写的是mov ax,5但最终变为MOV AX,0005,这之间其实已经有了编译(翻译)的过程。注意:我们在使用mov指令时,要保证数据与寄存器之间,位数的一致性。16位寄存器对16位数据,8位寄存器对8位数据。接着输入t,用于执行MOV ...
汇编程序add指令的使用
目录一、add命令的常规操作二、ADD命令时超过最大范围后?add指令是CPU用来加法计算的汇编指令。
一、add命令的常规操作
add 寄存器,数据
解释:将数据累加到寄存器中,比如寄存器当时是1,数据为2,则结果为3,此时寄存器所保存的值就是3.
1.启动dosbox,然后输入debug,r
接着输入a,回车然后输入命令:mov ax,18mov ah,7 ...
VScode配置汇编语言环境的实现步骤
目录要求:操作:由于汇编实验课上使用的是机房电脑的msm,实验没做完下课后在自己电脑上没有这个软件,也不想装,但是作业又必须要完成,索性用vscode试一试,网上搜了一搜,没想到效果还不错,现在将操作分享给大家
要求:
vscode软件
操作:
1.安装MASM/TASM
在vscode插件仓库里搜索然后下载
2.新建一个目录然后作为项 ...
汇编语言中debug命令使用小结
目录一、debug是什么?二、命令总结一、debug是什么?
这里的debug是用在调试汇编时使用的。
Debug的常用功能
R命令:查看、改变CPU寄存器的内容;D命令:查看内存中的内容;E命令:改写内存中的内容:U命令:将内存中的机器指令翻译成汇编指令:T命令:执行一条机器指令;A命令:以汇编指令的格式在内存中写入一条机器指令 ...
汇编语言中XLAT查表指令的使用
如何正确使用查表指令XLAT ?
XLAT指令简介
①功能:完成一个字节的查表转换功能。将DS:[BX+AL]指向的字节单元的内容送给AL。其中,BX存放的是DS段内表首元素的偏移地址,AL存放的是表内元素相对于表首的偏移量。(可以看作是对一维数组的访问)②说明:使用该指令需要先在数据段中建立一张字节类型的表,该表的最大 ...
汇编语言loop命令的具体使用
前言
在计算机编程的世界里,了解底层的硬件操作是提升程序员能力的关键一步。汇编语言作为一种底层语言,直接操作计算机的硬件,其中的 LOOP 指令和段前缀是我们探讨的两个重要概念。LOOP 指令为我们提供了一种简洁的方式来实现循环,而段前缀则是用来指定数据存储位置的关键工具。在这篇文章中,我们将深入探讨这两个概念 ...
汇编高效乘法运算的具体使用方法
目录使用IMUL指令完成乘法使用LEA指令替换乘法使用LEA指令拆分计算使用LEA指令递减计算使用SHL计算无符号乘法使用SAL计算有符号乘法乘法指令是一种在CPU中实现的基本算术操作,用于计算两个数的乘积。在汇编语言中,乘法指令通常是通过mul(无符号乘法)和imul(有符号乘法)这两个指令实现的。由于乘法指令在执行时所消耗 ...
汇编语言中DIV指令的具体用法
div指令是除法指令
格式: div 源操作数
div指令隐含目的操作数(被除数),一般默认AX(16位)或 DX和AX(32位)中,需要提前将被除数放入目的操作数寄存器中。
首先要分清除数和被除数。
例如:100÷10 则100为被除数 ,10为除数
除数:有8位和16位,存放在一个寄存器或者内存单元中被除数:一般默认放在AX(16位) ...
汇编语言自学笔记
2.27
回顾计算机组成原理中学到的冯诺依曼结构的计算机取指执行的过程。
x86计算机开机时,CPU处于实模式。寻址CS:IP(CS左移4位+IP)
CS和IP是8086CPU中两个关键的寄存器,它们指示了CPU当前要读取指令的地址。 CS : 代码段寄存器;IP : 指令指针寄存器。 在8086机中,任意时刻,CPU将CS:IP指向的内容当作指令来执行。
【 ...