汇编:加减乘除指令

加法指令 (ADD)

ADD指令用于将两个操作数相加,结果存储在第一个操作数中。 语法:

ADD destination, source
示例:
assume cs:code
​
code segment
    mov ax,3
    mov bx,2
    add ax,bx    //相加,结果会放在ax中
    mov ax,4c00h
    int 21h
code ends   //代码段结束
end //汇编程序结束

.code标识代码段开始,程序的指令从这里开始;assume cs:code:指令告诉汇编器,代码段寄存器(CS)将使用标记为code的段;

code segment定义了一个名为code的代码段;这个段内包含了接下来的所有指令:

mov ax,3将立即数3加载到AX寄存器中;AX是一个16位的通用寄存器,用于存储操作数或结果。

mov bx,2将立即数2加载到BX寄存器中;BX也是一个16位的通用寄存器。

add ax,bx将AX和BX寄存器中的值相加,结果存储在AX寄存器中;此时,AX的值是5(3 + 2 = 5)。

mov ax,4c00h将立即数4C00h(十六进制的4C00)加载到AX寄存器中;这是用于DOS系统调用的特殊值。

int 21h触发中断21h,这是DOS系统调用的入口点。结合之前的指令mov ax, 4c00h,这个中断指令的作用是终止程序并返回到DOS;具体来说,4C00h中的4C是DOS的终止程序功能码,00是返回码。、

code ends表示代码段的结束; end指示汇编程序的结束,并告诉链接器程序从哪里开始执行。默认情况下,汇编程序从段的开头开始执行。

具体的执行过程

接着使用MASM套件中的ML.exe将汇编代码生成exe程序,接着使用debug工具来进行低级别的调试和汇编编程;debug是一个命令行程序,提供了直接与内存和硬件交互的能力。(尽管debug在现代操作系统中不再常用,但它仍然可以在Windows XP下运行。)

cmd中输入:

debug exe程序名称

输入r显示所有寄存器的值;

接着输入p或者t继续执行程序,此时立即数3被加载进AX寄存器中;

接着往下执行,发现立即数2被载入BX寄存器中,且AX寄存器中的值和BX寄存器中的值相加,存储在BX寄存器中。

最后传入4c00h到AX寄存器中,并调用中断,程序成功退出。

补充:T参数和P参数的区别

  • T 命令(单步执行):逐条指令执行,遇到子程序调用时进入子程序逐步执行。

  • P 命令(过程执行):逐条指令执行,但遇到子程序调用时执行完整个子程序。

减法指令 (SUB)

SUB指令用于将第二个操作数从第一个操作数中减去,结果存储在第一个操作数中。 语法:

SUB destination, source

示例:

mov eax, 10    ; 将10赋值给eax寄存器
sub eax, 4     ; 将eax寄存器的值减去4,结果存储在eax中
; eax现在的值是6
乘法指令 (MUL 和 IMUL)
1.MUL指令用于无符号乘法,语法:
MUL source     ; 结果存储在AX、DX:AX或EDX:EAX中,取决于操作数的大小

MUL指令将两个操作数相乘,并将结果存储在一个或多个寄存器中;MUL 指令通常用于乘法运算,它可以是一个乘法操作数与累加器的相乘,也可以是一个乘法操作数与其他寄存器或内存中的值相乘。

示例:
乘以其他寄存器或内存中的值
MOV AX, 5    ; 将5加载到AX寄存器中
MOV CX, 10   ; 将10加载到CX寄存器中
MUL CX       ; 将AX和CX寄存器中的值相乘,结果存储在AX中,AX = AX * CX

可以看到在使用mul指令时需要将被乘数提前放入AX寄存器中。

注意: 当16位乘法时,32位乘积存于DXAX中,8位乘法,乘积存于AX中。

2.IMUL指令用于有符号乘法。 语法:
IMUL destination, source1, source2  ; 目标寄存器 = source1 * source2 
示例:
mov eax, 5     ; 将5赋值给eax寄存器
mov ebx, 3     ; 将3赋值给ebx寄存器
imul eax, ebx  ; eax = eax * ebx
; eax现在的值是15

EAX 是x86系列处理器中的一个32位寄存器。它是“扩展累加器”(Extended Accumulator)的缩写,也可以称为“累加器”。在32位模式下,EAX 是一个通用寄存器,可用于存储数据和执行算术和逻辑操作。EAX 寄存器在处理器中具有特殊的用途,通常用于存放函数的返回值,也用于存储临时数据。

除法指令 (DIV 和 IDIV)

1.DIV 指令用于执行无符号除法。它将累加器(AX)中的值除以一个操作数,并将商存储在累加器中,余数存储在另一个指定的寄存器中。DIV 指令通常用于除法运算,它可以是累加器与一个除数的相除,也可以是累加器与其他寄存器或内存中的值相除。 语法:

DIV source     ; 被除数在AX或DX:AX中,结果商存储在AX中,余数存储在DX中
示例:
MOV AX, 10   ; 将10加载到AX寄存器中
MOV CX, 2    ; 将2加载到CX寄存器中
DIV CX       ; 将AX寄存器中的值除以CX寄存器中的值,商存储在AX中,余数存储在DX中,AX = AX / CX,DX = AX % CX

在这个示例中,AX 的值将变为 5(10 / 2),DX 的值为 0。

在16位除法中,如果被除数大于16位,则高位存放于DX中,低位存放于AX中;

2.IDIV 指令用于执行有符号除法;它将累加器中的有符号整数除以一个操作数,并将商存储在累加器中,余数存储在另一个指定的寄存器中。IDIV 指令通常用于有符号除法运算,它可以是累加器与一个除数的相除,也可以是累加器与其他寄存器或内存中的值相除。语法:

IDIV source   
 

示例:

MOV AX, 20    ; 将有符号数 20 加载到 AX 寄存器中
MOV DX, -5    ; 将有符号数 -5 加载到 DX 寄存器中
IDIV DX       ; 将 AX 中的值除以 DX 中的值,商存储在 AX 中,余数存储在 DX 中,AX = AX / DX,DX = AX % DX

乘法和除法操作可能会改变多个寄存器的值,所以要注意保存和恢复必要的寄存器值。

自加指令(INC)

在汇编语言中,自加操作通常使用 INC(Increment,增加)指令来实现;INC` 指令用于将一个操作数的值增加1。

语法
INC destination

使用:

mov AX,3
INC AX    ; 将AX寄存器中的值增加1
;此时AX寄存器中的值位4

自减指令(DEC)

在汇编语言中,自减操作通常使用 DEC(Decrement,递减)指令来实现。DEC 指令用于将一个操作数的值减去1。

语法:
DEC destination

使用:

mov AX,3
DEC AX    ; 将AX寄存器中的值减去1
          ; 此时AX中的值为2

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

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

相关文章

Training-Free Consistent Text-to-Image Generation # 论文阅读

URL https://arxiv.org/pdf/2402.03286 TL;DR 2024 年 2 月 nvidia 的文章。提出了一种不需要任何额外训练的主体保持方法,可以一次生成的 batch 中,通过多个 prompt 生成对应的多张图片,这些图片都可以拥有一个主体。 本文提出的方法通过…

怎么判断同步时序逻辑电路和异步时序逻辑电路?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

基于Python卷积神经网络的Mnist手写数字识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手写数字识别是机器学习和计算机视觉领域中的一个经典问题。Mnist数据集是一个包含大量手写数…

ACW石子合并-XMUOJ元素共鸣:唤醒神之眼 -区间DP

题目 思路 话不多说&#xff0c;直接上代码 代码 /* ACW石子合并-XMUOJ元素共鸣&#xff1a;唤醒神之眼 JinlongW-2024/05/25 区间DP 当i<j时&#xff0c;f[i][j]min(f[i][k]f[k][j]s[j]-s[i-1]) 当ij时&#xff0c;f[i][j]0 最终答案&#xff1a;f[1][n] *//* 区间DP…

[图解]SysML和EA建模住宅安全系统-07 to be块定义图

1 00:00:01,970 --> 00:00:05,040 入侵者这里有个∞ 2 00:00:05,530 --> 00:00:07,000 说明它下面已经有子图了 3 00:00:07,010 --> 00:00:08,080 我们看看里面子图 4 00:00:10,200 --> 00:00:17,000 这里&#xff0c;我们看位置 5 00:00:19,030 --> 00:00:…

BWVS 靶场测试

一、PHP弱类型 is_numeric() 输入&#xff1a;127.0.0.1/BWVS/bug/php/code.php # 1、源代码分析 如果num不是数字&#xff0c;那么就输出num&#xff0c;同时如果num1&#xff0c;就输出flag。即num要是字符串又要是数字 # 2、函数分析&#xff1a; is_numeric()函数&…

一文通晓mysql

目录 1.mysql在centos7环境上的安装 2.数据库基础 1. 什么是数据库 2.基本认识 3.库的操作 1.创建数据库 2.查看数据库列表 3.删除数据库 4.修改数据库 5.库的备份与修复 4.表的操作 1.创建表 2.查看表 3.修改表 修改表名 给表增加属性。 修改表中的某个属性&…

Android Gradle开发、应用、插件发布(六)—实现打包自动复制文件插件

1. 前言 项目中遇到了一个问题 : 其中一个模块MyLibrary的assets文件夹中&#xff0c;需要存放很多文件(每个文件对应一个功能)。 这样导致的问题是MyLibrary打出的这个aar包体积特别大。 如果把MyLibrary严谨地拆解成若干个Module又比较费时&#xff0c;对于现在业务现状来…

MFC密码对话框之间数据传送实例(源码下载)

新建一个login工程项目对话框&#xff0c;主对话框IDD_LOGIN_DIALOG中一个显示按钮IDC_BUTTON1、一个密码按钮IDC_BUTTON2。添加一个密码对话框IDD_DIALOG1&#xff0c;添加类password&#xff0c;在对话框中添加一个编辑框IDC_EDIT1、一个确定按钮IDC_BUTTON1。 程序功能&…

「数据结构」队列

目录 队列的基本概念 队列的实现 头文件queue.h 实现函数接口 1.初始化和销毁 2.出队列和入队列 3.获取队头元素和队尾元素 4.队列长度判空 后记 前言 欢迎大家来到小鸥的博客~ 个人主页&#xff1a;海盗猫鸥 本篇专题&#xff1a;数据结构 多谢大家的支持啦&#xff…

存储+调优:存储-memcached

存储调优&#xff1a;存储-memcached 什么是memcached? 高性能的分布式内存缓存服务器。通过缓存数据库的查询结果&#xff0c;减少数据库访问次数&#xff0c;以提高动态Web应用的速度、提高可扩展性。 在memcached中存什么&#xff1f; 尽快被保存 访问频率高 1.数据保…

web前端框架设计第十课-组件

web前端框架设计第十课-组件 一.预习笔记 组件&#xff1a;Vue最强大的功能之一 1.局部组件注册 注意事项&#xff1a;template标签中只能有一个根元素 2.全局组件的注册 注意事项&#xff1a;组件名的大小写需要注意&#xff08;实践&#xff09; 3.案例&#xff08;查询框…

【计算机毕业设计】030英语学习交流平台微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

在Github上寻找安装ROS软件包

1、创建一个功能包 并下载git sudo apt install git 2、找到自己想在github上要克隆的包 复制此链接 3、克隆到本地 git clone 链接 4.scripts目录用于放置脚本文件和python程序 使用脚本安装编译需要的依赖库 5、下载完成后&#xff0c;在~catkin_ws目录下运行catkin_make进…

DFS:解决二叉树问题

文章目录 了解DFS1.计算布尔二叉树的值思路代码展示 2.求根节点到叶节点数字之和思路代码展示 3.二叉树剪枝思路代码展示 4.验证二叉搜索树思路分析代码展示 5.二叉搜索树中第k小元素思路&#xff1a;代码展示 6.二叉树的所有路径思路分析代码展示 总结 了解DFS 所谓DFS就是就…

python数据类型之元组、集合和字典

目录 0.三者主要作用 1.元组 元组特点 创建元组 元组解包 可变和不可变元素元组 2.集合 集合特点 创建集合 集合元素要求 集合方法 访问与修改 子集和超集 相等性判断 集合运算 不可变集合 3.字典 字典特点 字典创建和常见操作 字典内置方法 pprin模块 0.…

详解http协议

什么是HTTP协议 定义 Http协议即超文本传送协议 (HTTP-Hypertext transfer protocol) 。 它定义了浏览器&#xff08;即万维网客户进程&#xff09;怎样向万维网服务器请求万维网文档&#xff0c;以及服务器怎样把文档传送给浏览器。从层次的角度看&#xff0c;HTTP是面向&am…

缩进在编程中的重要性及正确使用方法

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 前言 缩进不当引发的问题 缩进的正确使用方法 缩进错误的调试与修复 总结 前言 在编程世…

微信小程序连接阿里云快速入门【物联网】

一、前言 1.1 项目背景 随着5G的逐渐普及&#xff0c;万物互联的浪潮已经席卷而来。在万物互联的场景下&#xff0c;如何实现设备之间的互联互通&#xff0c;成为了一个亟待解决的问题。 微信小程序作为一款轻量级的小程序开发框架&#xff0c;以其简洁的语法和丰富的组件库…

【ZYNQ】AXI-Quad-SPI SDK 开发记录 测试

前人工作 如前人工作&#xff0c;在Navigate to BSP Settings中找到历例程 file:///F:/Xilinx/Vitis/2019.2/data/embeddedsw/XilinxProcessorIPLib/drivers/spi_v4_5/doc/html/api/example.html使用XSpi_LowLevelExample例子&#xff0c;源代码的AI解析 int XSpi_LowLeve…