Description

前面我们用到了mov, add. sub指令,它们都带有两个操作对象。到现在,我们知道,mov指令可以有以下几种形式。

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

我们可以根据这些己知指令进行下面的推测。

  1. 既然有 “mov段寄存器,寄存器”,从寄存器向段寄存器传送数据,

    那么也应该有 “mov寄存器,段寄存器” ,从段寄存器向寄存器传送数据。

    一个合理的设想是:8086CPU内部有寄存器到段寄存器的通路,那么也应该有相反的通路。

    有了推测,我们还要验证一下。进入Debug,用 \(-A\)​​​​ 命令,如下图3.4所示。

图中,用A命令在一个预设的地 \(0B39:0100\)​处,用汇编的形式 mov ax,ds 写入指令,再用T命令执行,可以看到执行的结果,段寄存器 ds 中的值送到了寄存器 ax 中。

通过验证我们知道,“mov寄存器,段寄存器”是正确的指令。

  1. 既然有 “mov内存单元,寄存器”,从寄存器向内存单元传送数据,

    那么也应该有“mov内存单元,段寄存器”,从段寄存器向内存单元传送数据。比如我们可以将段寄存器 \(cs\) 中的内容送入内存 \(10000H\) 处,指令如下。

mov  ax,1000H
mov ds,ax
mov [0],cs

在Debug中进行试验,如图3.5所示。

图3.5中,当 \(CS:IP\) 指向 \(0B39:0105\) 的时候,Debug显示当前的指令mov [0000],cs因为这是一条访问内存的指令,Debug还显示出指令要访问的内存单元中的内容。

由于指令中的 \(CS\) 是一个 \(16\) 位寄存器,所以要访问(写入)的内存单元是一个字单元,它的偏移地址为 \(0\) ,段地址在 ds 中,Debug在屏幕右边显示出“\(DS:0000=0000\)",我们可以知道这个字单元中的内容为 \(0\)

mov [0000],cs执行后,CS中的数据(\(0B39H\) )被写入 \(1000:0\) 处,\(1000:1\) 单元存放 \(0BH, 1000:0\)​ 单元存放 \(39H\)

最后,用D命令从 \(1000:0\) 开始查看指令执行后内存中的情况,注意\(1000:0, 1000:1\)两个单元的内容。

  1. "mov段寄存器,内存单元”也应该可行,比如我们可以用1 0000H处存放的字型数据设置ds(即将1 0000H处存放的字型数据送入ds),指令如下。
mov ax,1000H
mov ds,ax
mov ds,[0]

可以自行在Debug中进行试验。

add和sub指令同mov一样,都有两个操作对象。它们也可以有以下几种形式。

它们可以对段寄存器进行操作吗?比如“add ds,ax"。请自行在Debug中试验。

汇编 | mov. add. sub指令的更多相关文章

  1. 汇编-MOV指令

    知识点:  MOV指令  基址  内联汇编  把OD附加到资源管理器右键菜单 一.MOV指令 aaa=0x889977;//MOV DWORD PTR DS:[0x403018],0x8899 ...

  2. (32位汇编 五)mov/add/sub/and/or/xor/not

    本文链接:https://blog.csdn.net/pl20140910/article/details/78227133说明符号 说明r 通用寄存器m 代表内存imm 代表立即数r8 代表8位通用 ...

  3. 汇编 STD和CLD指令

    一.用纯汇编封装函数strcmpW 1.用repnz scasw计算字串长度 2.用repz cmpsw比较字串内容 3.把比较的结果存放在EAX里边返回 __declspec(naked) int ...

  4. 汇编 MOV -2

    知识点:  MOV指令  基址  内联汇编  把OD附加到资源管理器右键菜单 一.MOV指令 aaa=0x889977;//MOV DWORD PTR DS:[0x403018],0x8899 ...

  5. 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    http://www.cnblogs.com/del/archive/2010/04/16/1713886.html 跳转指令分三类:一.无条件跳转: JMP;二.根据 CX.ECX 寄存器的值跳转: ...

  6. Ubuntu x86-64汇编(3) 数值操作指令

    指令标注 Operand Notation 指令instruction即运算operation, 操作的对象为一个或多个运算数operand, 使用不同的标记表示不同的约束 <reg>  ...

  7. ARM 汇编指 跳转指令 b , bl

    1. 跳转指令 [ b ] [ bl ]   指令格式:<opcode><cond> <address> 不带返回的跳转指令:b mov r0, #0x12 mov ...

  8. 【汇编】字符串处理指令 stosb、lodsb、movsw、scasb、rep

    一.字符串处理指令 (1) lodsb.lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据DF标志增减SI (2) stosb.stosw:把AL或AX中的数据装入ES:DI指向的 ...

  9. Debug和汇编编译器masm对指令的不同处理

    我们在Debug和源程序中写入同样形式的指令 : "mov al,[0]","mov bl,[1]","mov cl,[2]"," ...

  10. 汇编 (NOT)按位取反指令

    知识点:  (NOT)按位取反指令  逻辑取反(!)  按位取反(~)  SETZ(SETE) 取ZF位值保存  SETNZ(SETNE)将ZF位值取反后保存 一.逻辑取反(!) !111 ...

随机推荐

  1. CentOS 7替换默认软件源

    安装CentOS 7后,默认源在国外,可以替换为国内的源以提升访问速度 参考https://mirrors.ustc.edu.cn/help/centos.html sudo vi /etc/yum. ...

  2. 【外包杯】【无语的报错】意想不到的逗号Unexpected comma.(已解决)

    解决了,答案是没保存,看见那些文件是型号了吗,就是这个原因.

  3. JavaWeb项目练习(学生选课管理系统)二【新建数据库】

    思路 1.页面美化css这部分,挖个坑,我打算做好一点所以先空着.× 2.需要做四个数据表(学生.教师.管理员.课程) 关联: 学生有个人课表 教师有教授课程和个人课表 管理员有全部权限(关联所有数据 ...

  4. The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission,iphone手机video标签报错

    The request is not allowed by the user agent or the platform in the current context, possibly becaus ...

  5. 如何为项目配置opencv

    如何为项目配置opencv 13/100 发布文章 public669 未选择任何文件 new 配置: 包含目录: D:\OpenCV\opencv\build\include D:\OpenCV\o ...

  6. 华企盾DSC由于半透明软件设置了需要管理员权限打开导致半透明打不开加密文件

    解决方法: 1.右键该应用程序->属性->兼容性,去掉[以管理员权限运行此程序] 2.也可以打开控制面板->系统和安全->用户账户控制设置调至最低

  7. Java多线程学习(Day01)

    目录 线程简介 线程实现(重点) 线程状态 线程同步(重点) 线程通信问题 进程与线程概念 --来自百度百科的解释: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资 ...

  8. python在容器内克隆拉取git私有仓库

    前言 目前有个python应用需要在容器镜像内拉取git私有仓库的代码,一开始的想法是用GitPython,折腾一番ssh私钥和known_hosts问题后,发现还是在镜像中封装个git最省事,然后用 ...

  9. 劫持最新版 QQNT / QQ / TIM 客户端 ClientKeys

    针对 腾讯官网 最新发布的 QQNT 9.9.6 与 QQ 9.7.21 新版本客户端全面更新截取代码 大伙应该都知道自从 QQ 9.7.20 版本起就已经不能通过模拟网页快捷登录来截取 Uin 跟 ...

  10. C#开源的一款友好的.NET SDK管理器

    前言 今天推荐一款由C#开源的.友好的.NET SDK管理器:Dots. 工具介绍 Dots 是一款 .NET SDK 管理器,可让您轻松安装.卸载和切换 .NET SDK.它是一款跨平台工具,可在 ...