汇编语言(详解)

汇编语言安装指南

第一步:在github上下载汇编语言的安装包

网址:GitHub - HaiPenglai/bilibili_assembly: B站-汇编语言-pdf、代码、环境等资料B站-汇编语言-pdf、代码、环境等资料. Contribute to HaiPenglai/bilibili_assembly development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/HaiPenglai/bilibili_assembly

第二步:解压汇编语言的安装包

然后回到解压问价夹------> 复制MASM文件

当然这个时候窗口有点小需要我们手动修改一些文件做处理

右击鼠标,找到文件的起始位置,复制文件起始位置的路径,不要复制到引号

复制起始位置到电脑的文件搜索栏中搜索【搜索出如下的页面显示】

修改文件窗口的大小

双击打开文件后文件显示出如下的的文本【修改文本中相关参数改变汇编模拟器的窗口大小】

修改output参数,将output的参数改为ddraw

参数修改完毕后继续打开汇编模拟器,会发小窗口的大小发生改变

【mount c f:\masm 含义是将c挂载到f盘的masm】

【c: 表示进入编译环境】

【dir 表示查看当前环境下有哪些文件】

下一步:写入debug,是一个编译所用的环境汇编语言的编程是在debug上面进行的


汇编:mov,add,sub 指令

进入汇编指令控制面板

#if 0
   mount c f:\masm
   c:
   dir
   debug
   r

#endif

进入debug模式使用 r 命令查看寄存器

a 指令可以在汇编中编写需要的东西

【把要写的东西写入cs:ip地址中,cs:ip,cs 表示的是代码段的地址 + ip表示的是偏移组成20位物理地址】

汇编指令的含义

  • mov 寄存器, 数据 如:mov ax ,8
  • mov 寄存器 , 寄存器 如: mov ax ,bx
  • mov 寄存器 , 内存单元 如:mov ax ,[0]
  • mov 内存单元,寄存器 如:mov [0],ax
  • mov 段寄存器,寄存器 如:mov ds,ax

使用T指令执行刚刚编写的指令

【mov ax 8 指令的作用:将8移动到ax中】

【mov bx ax 相当于把后面寄存器的值移动到前面的寄存器中】

【mov ch,10】

继续使用命令编写汇编指令

【mov ah ,13】 -----------------> 把8移动到ah的低8位中

【mov bl, 23】 -----------------> 把23移动到bl的高8位中

【mov ch ,al】 -----------------> 把al移动到ch的高8位中

Add指令

【add ax,3】-----------------------> 把3的值加给了ax

【add bx,4】-----------------------> 把4的值加给了bx

【add,cx,bx】-----------------------> 把bx的值加给了cx

数值太大的话会发生越界现象【这个时候会发生进位现象,汇编语言越界会将越界的值舍弃掉】

汇编语言当中超过了特定的界限【多出来的一位会被舍弃掉:高位和地位都是这种情况】

【汇编语言基础Sub指令】

sub 内存单元,寄存器 比如:sub【0】,ax

字母表示的数字含义

A == 10 , B == 11, C == 12,D == 13, E == 14,F == 15,G == 16

汇编寄存器简称

【AX : 累加寄存器】

【BX : 基址寄存器】

【CX : 计数寄存器】

【DX: 数据寄存器】

【SP : 堆栈指针寄存器】

【BP:基址指针寄存器】

【SI:源变址寄存器】

【DI:目的变址寄存器】

【IP:指令指针寄存器】

【CS:代码段寄存器】

【DS:数据段寄存器】

【SS:堆栈段寄存器】

【ES:附加段寄存器】

【OF:溢出标志操作数超出机器能表示的范围,表示溢出,溢出时为1】

【SF:符号标志,记录运算结果的符号,结果负时为1】

【ZF:零标志,运算结果0时为1,否则为0】

【CF:进位标志,最高有效位产生进位时为1,否则为0】

【AF:辅进位标志,运算时,第三位向第四位产生进位时为1,否则为0】

【PF:奇偶标志,运算结果操作数为1的个数为偶数个时为1,否则为0】

【DF:方向标志,用于串处理,DF=1时,每次操作后使SI和DI减小,DF= 0时则增大】

【IF:中断标志 IF = 1 时,允许向CPU响应屏蔽中断,否则关闭中断】

【TF:陷阱标志,用于调试单步操作】

汇编指令:mul,div,and,or

[汇编指令    mul]

  • 1:两个数相乘:两个数相乘,要么都是8位,要么都是16位,如果是8位,一个默认放在AL中,另外一个放在8为reg或内存字节单元中,如果是16位,一个默认在AX中,另外一个放在16位的reg或内存字节单元中。
  • 2:结果--->如果是8位乘法,结果默认放在AX中:如果是16位乘法结果高位默认在DX中,低位放在AX中

【汇编指令DIV】

  • 1:除数-------> 使用div做除法的时候应该注意以下问题
  • (除数有8位和16位两种在,在一个reg的内存单元中)
  • 2:被除数:默认放在AX或DX和AX中,如果除数为8为,被除数则为16位,默认在AX中存放,如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。
  • 3:结果--->如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数,如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。

【mov dx ,f】

【mov ax,4241】

【mov bx,2710】

【div bx】

如果是一个8位数的除法:会将ax 除以 bl 然后将结果放在AL当中

如果是一个16位数的除法:会将ax拼接上dx然后将结果放在ax当中

如果是乘法的话就反过来

【汇编语言 ---------> and 和 or指令】

1:and指令逻辑与指令,按位进行运算

例如指令:[没有二进制的话就要先转换为2进制]

mov al , 01100011B --------------------> 63

mov al , 00111011B --------------------> 3B

执行后:al = 00100011B -----------------------------> 23

一位一位的对比,全1为1【与运算】

一位一位的对比,有1就是1,全0为0 【或运算】

2:or指令,逻辑或指令,按位进行或运算

汇编语言是无法直接运行2进制指令的;需要转换为16进制才能进行处理

或运算指令

mov al,01100011B ------------->

mov al,00111011B

执行后的结果为

al = 01111011B --------------> 7b

shr 和 shl 右移与左移指令

【shl 和 shr 左移和右移指令】

shl和shr是逻辑移位指令,shl是逻辑左移指令功能为

  • 1:将一个寄存器或内存单元中的数据向左移位
  • 2:将最后移出的一位写入CF中
  • 3:最低位用0补充

指令:

mov al,01001000b

shl al,1 ----------------------------> 将al中的数据左移一位

执行后的al = 10010000b CF = 0

我们来看一下shl,al,l的操作过程

左移:

原数据: 01001000

左移后: 01001000

【验证左移后的数据】

  • mov al ,48 ------------------------------------> 将48移动到ax寄存器的低四位
  • shl al,1 ----------------------------------------> 将al中的数据左移一位
  • shr al,1 ----------------------------------------> 将al中的数据右移一位

rol ax,1 【rol表示的是循环左移】 ----------------------------> 这个了解即可

ror ax ,1 【循环右移】 ----------------------------> 这个了解即可

rcl ax ,1 【带进位的循环左移】 ------------------------------> 这个了解即可

rcr ax ,1 【带进位的循环右移】 ------------------------------> 这个了解即可

【指令:inc ax】,【指令:dec ax】 ------------------------------------------------> 表示增加1和减少1

这两个指令相当于是c语言中的 x++ 和c语言中的 x --

空指令 ------------------------------------------------> nop 起到了占位的作用

【汇编语言:交换指令 xchg ax,bx】

【汇编语言取反指令:neg ax】----------------------> ax 刚开始的值为0002 我们观察取反后的值

退出汇编程序

【mov ax,4C】 -----------------------------> 相当于退出汇编的指令

【int 21】 -----------------------------> 相当于退出汇编的指令

【物理地址 = 段地址 * 16 + 偏移地址】

【一个物理地址可以有多个段地址和偏移地址表示方法】

【在汇编里面写东西使用 e 指令, 读取使用 D 命令】

我们看到不同的访问方式地址是一样的:二进制左移4位相当于是16进制左移一位

【DS数据段地址寄存器 + 可以通过数据段地址加上偏移地址的方式实现移动】

mov 以21F0为段地址以60为偏移地址,移动到ax中

1234 【前面的两个表示的是低位,后面的两个表示是高位,应该高低搭配,所以吧34移动到AH吧34移动到AL】

将ds为段地址:0000为偏移地址的数据移动到al当中

【汇编语言有汇编语言的限制可以将ax移动到ds,但是不能将1000移动给ds】

汇编语言CS和IP寄存器

使用 u 指令可以将寄存器中的数据翻译出来

【CS是一个段地址IP是一个偏移地址他们两个构成了一个实际的地址,这个地址指向一个指令这个指令可以被执行,执行的是内存里面对应的指令】


 

【汇编语言中代码和数据是不加区分的】

【汇编语言的jmp指令-------------------------------> jmp指令某一合法寄存器,指令的功能为:用寄存器的值修改IP】

执行指令

[

a 2000:0000

mov ax,6622

mov cx,ax


]


[

a 1000:0000

mov ax,0123

mov ax,0000

mov bx,ax

jmp bx

]

[IP和CS表示的是代码将要执行的指针,表示的是以CS为段地址IP为偏移地址地方的代码]

【CS和IP事一个关键的寄存器,是一个代码段寄存器,指示了CPU当前要读取的地址,CS位代码段寄存器,IP为指令指针寄存器,从名称上我们可以看出它们和指令的关系】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/562889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32 | USART实战案例

STM32 | 通用同步/异步串行接收/发送器USART带蓝牙(第六天)随着扩展的内容越来越多,很多小伙伴已经忘记了之前的学习内容,然后后面这些都很难理解。STM32合集已在专栏创建,方面大家学习。1、通过电脑串口助手发送数据,控制开发板LED灯 从题目中可以挖掘出,本次使用led、延…

【JVM常见问题总结】

文章目录 jvm介绍jvm内存模型jvm内存分配参数jvm堆中存储对象:对象在堆中创建分配内存过程 jvm 堆垃圾收集器垃圾回收算法标记阶段引用计数算法可达性分析算法 清除阶段标记清除算法复制算法标记压缩算法 实际jvm参数实战jvm调优jvm常用命令常用工具 jvm介绍 Java虚…

C++设计模式:适配器模式(十四)

1、定义与动机 定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。 动机: 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境…

【Hadoop】- YARN概述[6]

目录 一、YARN & Reduce 二、分布式资源调度 - YARN 1、资源调度 2、YARN的资源调度 总结 一、YARN & Reduce MapReduce是基于YARN运行的,即没有YARN “无法” 运行MapReduce程序。 二、分布式资源调度 - YARN YARN(Yet Another Resou…

注意力机制中多层的作用

1.多层的作用 在注意力机制中,多层的作用通常指的是将注意力机制堆叠在多个层上,这在深度学习模型中被称为“深度”或“多层”注意力网络。这种多层结构的作用和实现过程如下: 1. **逐层抽象**:每一层都可以捕捉到输入数据的不同…

Oracle之SQL plus的一些经验心得

每次登入SQL plus后,不知道时哪个用户登入,非常不方便,只能使用show user查看。 以下时可以通过一些设置实现上述的效果,知道时哪个用户登入,和实现输出效果等 1)SQL plus使用细则 SQL plus登录时,我们可以设置一些通用的设置,在每次登入SQL plus的时候生效。 [root@c…

Eclipse+Java+Swing实现学生信息管理系统-TXT存储信息

一、系统介绍 1.开发环境 操作系统:Win10 开发工具 :Eclipse2021 JDK版本:jdk1.8 存储方式:Txt文件存储 2.技术选型 JavaSwingTxt 3.功能模块 4.工程结构 5.系统功能 1.系统登录 管理员可以登录系统。 2.教师-查看学生…

rmallox勒索病毒威胁网络安全:如何避免数据被锁定

尊敬的读者: 随着信息技术的飞速发展,网络空间的安全问题日益凸显。近年来,一种名为.rmallox的勒索病毒频繁出没,给广大计算机用户带来了严重的困扰。本文将对该病毒进行深入剖析,并探讨相应的应对策略。在面对被勒索…

VulnHub靶机 DC-7 打靶 渗透详细流程

VulnHub靶机 DC-7 实战打靶 详细渗透测试流程 目录 VulnHub靶机 DC-7 实战打靶 详细渗透测试流程一、将靶机配置文件导入虚拟机当中二、渗透测试流程主机发现端口扫描目录爆破web渗透白盒测试ssh远程连接 提权修改后台密码GETSHELL反弹shell 一、将靶机配置文件导入虚拟机当中 …

深度神经网络(DNN)

通过5个条件判定一件事情是否会发生,5个条件对这件事情是否发生的影响力不同,计算每个条件对这件事情发生的影响力多大,写一个深度神经网络(DNN)模型程序,最后打印5个条件分别的影响力。 示例 在深度神经网络&#xf…

【免费源码下载】完美运营版商城 虚拟商品全功能商城 全能商城小程序 智慧商城系统 全品类百货商城php+uniapp

简介 完美运营版商城/拼团/团购/秒杀/积分/砍价/实物商品/虚拟商品等全功能商城 干干净净 没有一丝多余收据 还没过手其他站 还没乱七八走的广告和后门 后台可以自由拖曳修改前端UI页面 还支持虚拟商品自动发货等功能 挺不错的一套源码 前端UNIAPP 后端PHP 一键部署版本&am…

51、图论-岛屿数量

思路: 该问题要求在一个由 1(表示陆地)和 0(表示水)组成的二维网格中,计算岛屿的数量。岛屿被水包围,并且通过水平或垂直连接相邻的陆地可以形成。这个问题的核心是识别并计数网格中相连的陆地…

ssm068海鲜自助餐厅系统+vue

海鲜自助餐厅系统的设计与实现 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管…

车载电子电器架构 —— 功能安全开发(首篇)

车载电子电器架构 —— 功能安全开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己…

go | defer、panic、recover

刷一道题, 将当函数触发panic 之后,函数是怎么执行的 然后我去找相关博客,发现这篇讲的蛮好的 接下来我直接上demo ,然后通过demo 来逐个分析 package mainimport ("fmt" )func f() {defer func() {if r : recover();…

断言(Assertion)在IT技术中的确切含义— 基于四类典型场景的分析

当“断言”(Assertion)一词成为IT术语时,语义的混沌性和二义性也随之而生。那么,何为断言?断言何为?实际上,只需分析四种典型场景,确切答案和准确描述就将自然显现。 在SAML&#xf…

浏览器主页被“绑架”了?按照这个可以修改。

前言 小白是一个很喜欢看新闻的人,浏览器的默认主页通常都是MSN和百度的新闻,这可以说是习惯吧。 电脑用得好好的,有一天浏览器的主页被“绑架”了,变成了“hao***”。我知道,新一轮的检查又准备开始了。 上一次是Wi…

Docker - WEB应用实例

原文地址,使用效果更佳! Docker - WEB应用实例 | CoderMast编程桅杆Docker - WEB应用实例 在之前的章节中,仅对普通容器进行了演示,但在实际中常常使用到 Docker 容器中的 WEB 应用程序。 运行一个WEB应用 拉取镜像 创建一个容器…

小型架构实验模拟

一 实验需求 二 实验环境 22 机器: 做nginx 反向代理 做静态资源服务器 装 nginx keepalived filebeat 44机器: 做22 机器的备胎 装nginx keepalived 99机器:做mysql的主 装mysqld 装node 装filebeat 77机器:做mysq…

ROS机器人实战,对标古月老师HRMRP机器人(一)——机器人总体方案设计

咳咳!这个是自己的毕业设计,内容比较多就拆开发。设计实现了一款SLAM移动机器人,加机械臂完成视觉识别抓取的,同时还有语音识别控制、QT上位机控制、Web网页控制。前几年看古月老师的视频,看到古月老师设计的HRMRP&…