汇编:加减乘除指令

news2024/10/6 8:25:11

加法指令 (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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[C语言]自定义类型详解:结构体、联合体、枚举

目录 🚀结构体 🔥结构体类型的声明 🔥结构的自引用 🔥结构体变量的定义和初始化 🔥结构体内存对齐 🔥结构体传参 🔥结构体实现位段(位段的填充&可移植性) &a…

读人工智能时代与人类未来笔记14_管控人工智能

1. 管控人工智能 1.1. 历史上的战场进一步推进到与数字网络相连的所有地方 1.2. 数字程序现在控制着一个由众多实体系统构成的庞大且仍在不断增长的领域,而且越来越多的此类系统已实现网络化 1.2.1. 在某些情况下甚至连门锁和冰箱都实现了网络化 1.2.2. 这催生出…

Hive安装教程

前置条件:hadoop&mysql docker容器安装mysql-CSDN博客 以下的/opt/bigdata目录根据自己实际情况更改 1.上传hive包并解压 tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/bigdata/ 2.修改路径 mv /opt/bigdata/apache-hive-3.1.3-bin/ hive cd /opt/bigdata/hive/…

cnVcXsrv 21.1.13.1—VcXsrv 21.1.13中文版本简单说明~~

对于VcXsrv的使用目的和用途相信大家都很了解。前不久VcXsrv做了更新,并且将项目托管到github上了。链接如下: VcXsrv: Windows X-server based on the xorg git sourceshttps://github.com/marchaesen/vcxsrv也可以简单查看如下链接: VcXs…

python数据分析——字符串和文本数据2

参考资料:活用pandas库 1、字符串格式化 (1)格式化字符串 要格式化字符串,需要编写一个带有特殊占位符的字符串,并在字符串上调用format方法向占位符插入值。 # 案例1 varflesh wound s"Its just a {}" p…

AI大模型探索之路-实战篇7:Function Calling技术实战:自动生成函数

系列篇章💥 AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5:探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6:掌握Function Calling的详细流程 目录 系列篇章&#x1f4a…

Python自动化工具(桌面自动化、Web自动化、游戏辅助)

工具介绍 连点工具是一款可以模拟键鼠后台操作的连点器工具。支持鼠标连点、键鼠脚本录制,支持辅助您实现办公自动化以及辅助游戏操作。功能简洁易用,非常方便操作。连点工具让您在在玩游戏、网购抢购的时候全自动点击鼠标!主要功能有&#…

Amesim应用篇-制冷剂压焓图软件Coolpack简介与冷媒流量评估

前言 空调系统仿真不可避免的会涉及到冷媒的物性参数、压焓图等信息。冷媒的物性可以在Amesim中自带的模型中查看。而压焓图可以通过Coolpack软件绘制。 一 软件介绍 Coolpack是个独立的小程序,集成了各种冷媒的性能参数,可以直观查看冷媒工作工况曲线…

力扣538. 把二叉搜索树转换为累加树

Problem: 538. 把二叉搜索树转换为累加树 文章目录 题目描述思路复杂度Code 题目描述 思路 利用二叉搜索树中序遍历的特性,**降序遍历(此处是想表达先遍历其右子树再遍历其左子树这样遍历的过程中每个节点值得大小排序是降序得)**其节点&…

区块链技术和应用二

前言 学习长安链的一些基本原理 官网:长安链开源文档 b站课程:区块链基础与应用 一、共识算法 1.1 POW工作量证明 最长链共识,没听明白 1.2 51%攻击 二、区块链的发展 2.1 区块链1.0到3.0 2.2 共有链、联盟链、私有链 2.3 发展趋势 2.4 扩…

【css3】02-css3新特性之选择器篇

目录 1 属性选择器 2 结构伪类选择器 3 其他选择器 :target和::selection ::first-line和::first-letter 4 伪类和伪元素的区别 伪类(Pseudo-classes) 伪元素(Pseudo-elements) 伪类和伪元素的区别 1 属性选择器 ☞ 属性选…

揭秘《庆余年算法番外篇》:范闲如何使用维吉尼亚密码解密二皇子密信

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

网络安全之安全协议浅谈

安全协议 安全协议概述安全协议分类IPSecIPSec安全协议IPSec架构IPSec封装模式AH协议ESP协议SET协议SET协议电子交易模型SET协议安全目标认证中心CA 安全协议概述 安全协议是信息交换安全的核心,它在网络不同层次上、针对不同应用,通过对各种密码学技术…

群晖安装青龙脚本

青龙定时任务管理面板,支持 Python3、JavaScript、Shell、Typescript 这几种环境,通过它可以方便的管理和运行定时任务(在某个时间执行一段代码),并且只需简单的配置,就可以在各个平台收到任务执行的结果通…

[SCTF2019]babyre

打开看看还是有花指令 解除后首先pass1是解maze,好像又是三维的 x是25,也就是向下跳五层,注意是立体的 得到 passwd1: ddwwxxssxaxwwaasasyywwdd 接着往下看 有一个加密函数IDA逆向常用宏定义_lodword-CSDN博客 unsigned __int64 __fastca…

Golang | Leetcode Golang题解之第112题路径总和

题目: 题解: func hasPathSum(root *TreeNode, sum int) bool {if root nil {return false}if root.Left nil && root.Right nil {return sum root.Val}return hasPathSum(root.Left, sum - root.Val) || hasPathSum(root.Right, sum - roo…

文件编码格式查看和转换

1、查看文件编码格式 记事本:打开文件后,点击“文件”--“另存为”,可查看文件的编码格式。**Notepad**:打开文件后,即可在右下角查看文件的编码格式。vim:打开文件后,输入“:set fileencoding…

【Vue】computed 和 methods 的区别

概述 在使用时,computed 当做属性使用,而 methods 则当做方法调用computed 可以具有 getter 和 setter,因此可以赋值,而 methods 不行computed 无法接收多个参数,而 methods 可以computed 具有缓存,而 met…

题解:CF1016E Rest In The Shades

题意 平面上有一个点光源 s s s 并以每秒 1 1 1 单位长度的速度从点 ( a , s y ) (a,sy) (a,sy) 移动到点 ( b , s y ) (b,sy) (b,sy)&#xff0c;其中 s y < 0 sy<0 sy<0&#xff1b;在 x x x 轴正方向上有 n n n 不相交、不接触的挡板&#xff0c;第 i i i …

【DevOps】深入了解RabbitMQ:AMQP协议基础、消息队列工作原理和应用场景

目录 一、核心功能 二、优势 三、核心概念 四、工作原理 五、交换机类型 六、消息确认 七、持久性和可靠性 八、插件和扩展 九、集群和镜像队列 十、客户端库 十一、管理界面 十二、应用场景 RabbitMQ是一个基于AMQP协议的消息队列中间件&#xff0c;提供高可用、可…