-
8086寻址方式及指令系统
2013-01-14 15:52:17第三章 8086/8088的寻址方式和指令系统 练习题 一.单项选择题 1.设BX=2000H,SI=3000H,指令MOV AX,[BX+SI+8]的源操作有效地址为( )。 A.5000H B.5008H C.23008H D.32008H 2.设DS=1000H,ES=2000H,BX=... -
汇编语言学习笔记 - 杂记(寄存器,寻址方式,指令操作合法性)
2020-10-16 18:35:57寻址方式 这里统一说四种: 立即数寻址 寄存器寻址 直接寻址 寄存器间接寻址 判断技巧: 只要是数字(地址)或者等效符指定(类似 a equ 0h)都是立即数寻址 只要是只有寄存器,都是寄存器寻址 如果是寄存器外面加...寄存器
- eax:32位长==4字节(0~31)
- ax:16位长==2字节(0~15)
- al:8位长==1字节 (0~7)
- ah:8位长==1字节(8~15)
寄存器符号汇总
寻址方式
这里统一说四种:
- 立即数寻址
- 寄存器寻址
- 直接寻址
- 寄存器间接寻址
判断技巧:
只要是数字(地址)或者等效符指定(类似 a equ 0h)都是立即数寻址
只要是只有寄存器,都是寄存器寻址
如果是寄存器外面加了‘[ ]’,则就是寄存器间接寻址
如果是变量名,那就是直接寻址指令操作合法性
以mov指令,为例子(其余大概都相同),箭头表示可寻址到。
技巧:- 首先判断转换位数(位数不同,直接pass)
- 之后判断目标
以下都默认位数正确
只要目标操作数是立即数,都不合法
只要源操作数是内存(寄存器间接寻址是访问内存,同时每条指令指令只能访问一次内存,即:如果一条语句中,源操作数与目的操作数都是访问内存,则不合法),都不合法
只要源操作数是寄存器(不包括自反),都不合法例题:
外设操作
汇编语言中,CPU对外设的操作通过专门的端口读写指令来完成;
读端口用IN指令,写端口用OUT指令。
例子如下:IN AL,21H;表示从21H端口读取一字节数据到AL IN AX,21H;表示从端口地址21H读取1字节数据到AL,从端口地址22H读取1字节到AH MOV DX,379H IN AL,DX ;从端口379H读取1字节到AL OUT 21H,AL;将AL的值写入21H端口 OUT 21H,AX;将AX的值写入端口地址21H开始的连续两个字节。(port[21H]=AL,port[22h]=AH) MOV DX,378H OUT DX,AX ;将AH和AL分别写入端口379H和378H
-
微机原理汇编之部分重要知识整合包括:判断解释程序运行(新手有利)并画存储结构,字节变量,寻址方式
2020-03-24 19:44:48一、判断解释程序运行 (建议先看完第二大点–画存储结构) 给出前提代码: 数据段 DATA SEGMENT S DB 1,2,3,4 W DW 1921H,4567H S2 DB ‘ABCD’ S3 DW ‘12’,’34’ DATA ENDS 代码段 code segment start: MOV S+...基本是想到什么说什么,归纳自己遇到的问题
但总的 方向依旧如标题。
一、判断解释程序运行
(建议先看完第二大点–画存储结构)
给出前提代码:
数据段DATA SEGMENT S DB 1,2,3,4 W DW 1921H,4567H S2 DB ‘ABCD’ S3 DW ‘12’,’34’ DATA ENDS
代码段
code segment start: MOV S+1, 45H MOV AX, WORD PTR S MOV W, AX MOV BX, 2 MOV CX, W[BX] MOV S3+2, CX MOV DL, byte ptr W[BX+1] MOV S2, DL code ends
解释程序运行过程
MOV S+1, 45H (s+1变为45) MOV AX, WORD PTR S (AX变为S无偏移的变量(字类型),即4501)字类型 MOV W, AX (W无偏移变为4501) MOV BX, 2 (BX变为0002) MOV CX, W[BX] (CX变W[2],即4567) MOV S3+2, CX (S3[2]变为CX,即4567) MOV DL, byte ptr W[BX+1] (DL变W[3],即45) MOV S2, DL (S2无偏移变DL,即45)
结果图,被改变的数据均被改色:
二、画存储结构
首先是对存储的一些理解,
1.一定要注意操作数之间的类型,字变量一定要对应字变量,
2.AX等是大小是字,分高低8位字节
3.存储遵循“高对高,低对低”字节变量DW “AB”,遵循第三点,存储结构
反之字变量DB “AB”
如果要根据图得到偏移地址和变量值,则又不一样
注意:
1.偏移地址是从0000开始,
2.取变量值时,一定要注意该数据段的数据类型,要严格按变量类型取值如此图,上往下看
是DB变量时就是取41H,
DW则就是4241H,三、寻址方式
-
ARM 立即寻址之立即数的形成 —— 如何判断有效立即数
2018-10-16 21:02:05依据指令中给出的操作数的不同格式,ARM 指令系统具有 8 种常见的寻址方式。我们这次就来讨论一下立即寻址。 在立即寻址,操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也称为立即数。例子...依据指令中给出的操作数的不同格式,ARM 指令系统具有 8 种常见的寻址方式。我们这次就来讨论一下立即寻址。
立即寻址的特点
在立即寻址,操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也称为立即数。例子如下:
ADD R0, R1, #5 ;R0=R1+5 MOV R0, #0x55 ;R0=0x55
在这两个例子中,操作数 5 和 0x55 就是立即数。
注意:立即数在指令中要以 “#”为前缀,后面跟实际数值。
立即数形式
我们看到上面两个立即数一个是十进制一个是十六进制,那么这个立即数有哪些形式呢?
#后的立即数形式:
- 0x 或 & 表示十六进制数
- 0b 表示二进制数
- 0d 或缺省表示十进制数
合法立即数
现在又有一个问题,我们怎么判断这个立即数是不是合法的,也就是计算机能够准确表示出来的呢?
立即寻址机器指令格式
这里首先涉及到数据编码的知识。我们知道我们写出的是汇编指令,而汇编指令不是计算机能够理解的,计算机所能理解的只是 0 1 这两种数字。所以,我们写出的汇编指令还要经过译码器译码成机器指令才能被计算机所理解。
在 ARM 中,机器指令的格式大致有如下这么多种,还有一些更具体的这里不提(图片来自
ARM Architecture reference Manual
):我们此次讨论的立即数寻址的指令格式应该是:
指令解析
我们可以从图片中看出:一条指令的后 12 位(bit 11~0),是指令中立即数占用的位数。其中这 12 位又分为两部分:前 7~0 位是数值部分;后 11~8 位是前 7~0 位要进行移位操作的移位数。
我们注意到其中 immed_8 有 8 位,也就是我们的立即数部分占 8 位,因此有如下结论:
- 如果一个立即数小于 0xFF(255)那么直接用前 7~0 位表示即可,此时不用移位,11~8 位的 Rotate_imm 等于 0。
- 如果前八位 immed_8 的数值大于 255,那么就看这个数是否能有 immed_8 中的某个数移位 2*Rotate_imm 位形成的。如果能,那么就是合法立即数;否则非法。
判断方法
一个 32 位数用 12 位编码表示,符合以下规则才是合法立即数。
立即数 = immed_8 循环右移 (2 * Rotate_imm)
解读:如果存在一个 Rotate_imm 能够让该立即数由 immed_8 循环右移 2*Rotate_imm 位(偶数位)表示,那么这个立即数就是合法的。
PS. 这个为什么是 32 位我姑且不知道,抄 PPT 的。12 位编码就是
指令解析
这一小节里面说的那 12 位。例子 #0x0000f200
我们来举个例子看看
汇编指令:mov R0, #0x0000f200
经过译码器转化为汇编后的机器指令如下:
机器指令:0xe3a00
cf2
,其中0xcf2
就是我们的立即数。下面我们讨论译码器是如何计算出这个
cf2
的:我们先来解剖一下转换后的
cf2
。其中的c
就是 Rotate_imm 部分,而f2
则是 Immed_8 部分。译码器看到
#0x0000f200
也就是二进制的0000 | 0000 | 0000 | 0000 | 1111 | 0010 | 0000 | 0000 |
。然后计算出将其中的1111 | 0010
部分循环右移 24 位刚好就是那个二进制。(看下面的图会更清楚)即 0x0000f200=0xf2 循环右移 (2×0x0c)
因此我们可以得出此时的 Rotate_imm 的值就是 12,十六进制就是 c; Immed_8 的值则是 1111 | 0010 即 f2。
到此为止
cf2
的计算已经完毕。PS. 这里的 | 并没有实际的含义,我这样做只是为了看得清楚。
最后有一个译码器寻找的伪代码,感兴趣的可以看看。
例子 0x234
0x234 是不是一个合法的立即数?
我们把 0x234 表示成
0000 | 0000 | 0000 | 0000 | 0000 | 0010 | 0011 | 0100
,发现将其中的1000 | 1101
部分循环右移 30 位可以和这个二进制数相同。因此 Rotate_imm 的值是 15,而 Immed_8 的值是 1000 | 1101 即 8D。例子 0x132
0x132 是不是一个合法的立即数?
我们把 0x132 表示成
0000 | 0000 | 0000 | 0000 | 0000 | 0001 | 0011 | 0010
,发现没有任何部分循环右移偶数次可以成为该数本身,因此它不是一个合法的立即数。判断小技巧
快速判断一个数是不是有效立即数的方法是看最低几位为 0 的个数是不是偶数个(表述的有点问题)。
我来解释一下:比如上面那个
#0x0000f200
,其中我们猜测 Immed_8 为1111 | 0010
,这个数右边还有0000 | 0000 |
,是偶数个 0,因此是有效立即数。而我们看0x132
,我们猜测 Immed_8 为1001 | 1001
,右边只有一个 0,因此不是有效立即数。加载不合法立即数
如果我们想要加载一个不合法的立即数该怎么办呢?
此时我们可以使用 LDR 伪指令代替,比如下面代码中的 0x20026 就不是有效立即数,因此我们不能使用 MOV R1, #0x20026
MOV R0, #0x18 ; 传送到软件中断的参数 LDR R1, =0x20026 ; 传送到软件中断的参数 SWI 0x123456 ; 通过软件中断指令返回
相关资料
下面是 ARM Architecture reference Manual 这本书上的相关章节
-
ppp帧通过什么来寻址_档案密集柜的承重能力好坏可以通过什么来判断
2021-01-20 17:37:35主要是以柜体的方式进行储存,比较安全高效,所以很多档案馆储存资料的时候都采购档案密集柜这种档案装具。那么,什么样的档案密集柜是好的密集柜呢?好的档案密集柜的承重由什么来判断呢。一般市场上的档案密集架都...档案密集柜是一种可以移动的文件柜,主要适用于各种档案馆、院校等等,用来储存比较有价值的档案资料等物品。主要是以柜体的方式进行储存,比较安全高效,所以很多档案馆储存资料的时候都采购档案密集柜这种档案装具。那么,什么样的档案密集柜是好的密集柜呢?好的档案密集柜的承重由什么来判断呢。
一般市场上的档案密集架都是依照国家标准和实际使用的情况进行生产的,密集柜的承重问题和材料的厚度、密集柜的工艺有关,材料的厚度越厚,密集柜的单层承重能力越强。不过,考虑到很多厂家的生产工艺技术,材料的厚度很难超过1.0mm,太厚的话就不能进行折弯工艺,找到专业的厂家,就不用太担心档案密集柜的承重问题了,厂家从三方面进行生产,客户也只需要通过这三个方面就可以进行判断了。
第一、从生产的原料冷轧钢材进行判断
注重产品承重质量的厂家在进行生产档案密集柜的时候,所采用的生产原材料就是国家标准的一级冷轧钢板。整个密集柜的结构都是达到标准的,组装后非常的坚固耐用。
第二、从厂家生产工艺进行判断
好的密集架厂家,是有实力的,生产使用的设备和工艺是比较先进的,这个从产品的一些细节就可以体现出来,例如档案密集柜的外表光滑,无毛刺,粗细一致,这就是一个好产品的体现
第三、从档案密集柜的配件和机械结构进行判断
好产品才能带来好体验,质量好的密集柜传动结构非常的灵活轻便,轨道上有防倾倒装置,使用起来安全有保障。密集柜的手柄有折叠式和轮盘式的摇把,不占用通道空间,并且每组密集柜的都配置有制动装置,从很多配件处来判断密集柜的质量是一个很简单的方法。
档案密集柜是长久使用并且大量储存档案的设备,所以在承重质量上一定要过关。不然后期麻烦的还是使用者,所以客户要找专业厂家进行采购。
我们全体瑞好人员将在探索奋进中走出企业创新之路,勇敢拼搏,谱写出企业发展的崭新篇章。同时热烈欢迎客户来我厂考察、参观、技术交流,与您共建良好紧密的合作伙伴关系。
往期回顾
档案室的档案调阅管理制度
企事业单位采购档案密集架的标准有三个
-
【转】第一课寄存器与寻址
2019-09-27 12:36:24寻址方式判断 2.汇编语言-8086指令、典型函数调用约定 @1 8086常用运算指令 @2 8086跳转指令 @3 常见函数调用约定 3.汇编语言-识别高级语言中的汇编代码 @1 常量/变量/指针 @1-1.常量 @1-2-1.... -
如何快速判断立即数
2020-02-17 17:51:11目录一、什么是立即数二、什么是立即寻址三、如何判断立即数 一、什么是立即数 要想判断立即数,首先要了解什么是立即数。... 立即寻址方式的目的就是将操作数紧跟在操作码后面,与操作码一起放在指令代... -
ARM汇编指令立即数规范和判断
2020-09-28 19:36:13在ARM汇编的数据处理指令中经常会使用到常数,而ARM汇编中规定使用的常数必须是立即数。 在讨论什么是立即数,为什么有立即数,如何快速...ARM有九种寻址方式:1.寄存器寻址2.立即寻址3.寄存器移位寻址4.寄存器间接寻 -
汇编指令长度的判断
2018-11-04 11:50:00汇编指令长度与寻址方式有关,规律或原则如下: 一、没有操作数的指令,指令长度为1个字节 二、操作数只涉及寄存器的的指令,指令长度为2个字节 如:mov bx,ax 三、操作数涉及内存地址的指令,指令长度为3个字节... -
汇编语言——汇编指令长度的判断
2018-11-04 07:57:56汇编指令长度与寻址方式有关,规律或原则如下: 一、没有操作数的指令,指令长度为1个字节 二、操作数只涉及寄存器的的指令,指令长度为2个字节 如... -
C++判断操作系统是16位还是32位
2013-08-15 22:13:451.操作系统是16位还是32位是跟它的地址寻址方式相关的(需要CPU支持,但与CPU字长没有必然联系),因此可以直接通过指针(地址)的长度来判断: cout 2.如果不允许用sizeof,则通过整数的表示范围来判断,16... -
判断操作系统是16位还是32位
2011-03-06 15:13:00操作系统是16位还是32位是跟它的地址寻址方式相关的(需要CPU支持,但与CPU字长没有必然联系),因此可以直接通过指针(地址)的长度 来判断: cout (sizeof(int *)==4 ? "32 bit" : "16 bit") ; 2.如果不... -
判断出入栈的顺序序列是否合法(向函数传递一维数组)
2020-05-12 15:50:08判断出入栈的顺序序列是否合法(向函数传递一维数组)向函数传递数组问题判断出入栈的顺序序列是否合法代码实现 向函数传递数组问题 ...也就是被调函数是通过间接寻址方式访问主调函数中的数组元素值。 -
判断大端模式和小端模式
2020-11-04 10:32:11但是内存不是按bit位来存储信息的,按字节编号(地址)来寻址。 如果我们要把寄存器的数据保存到内存中去,那么怎么做呢? 计算机中有两种内存存储模式: 大端模式:(Big_Endian) 是指数据的高字节(高位)保存在... -
[原创]C++判断操作系统是16位还是32位
2009-10-27 17:29:001.操作系统是16位还是32位是跟它的地址寻址方式相关的(需要CPU支持,但与CPU字长没有必然联系),因此可以直接通过指针(地址)的长度来判断: cout << (sizeof(int *)==4 ? "32 bit" : "16 bit") << ... -
计算机组成原理——指令体系
2020-11-03 12:03:52六种普通寻址方式 直接寻址 有效地址就是真实地址 间接寻址方式 存储的是数据地址的地址 寄存器寻址 操作数在寄存器里面 寄存器间接寻址 寄存器里面存放的是操作数的地址 隐含寻址 地址不是明显的给出 立即寻址... -
解决哈希冲突的三种方式
2020-08-20 12:12:55它的实现是在插入一个元素的时候,先通过哈希函数进行判断,若是发生哈希冲突,就以当前地址为基准,根据再寻址的方法(探查序列),去寻找下一个地址,若发生冲突再去寻找,直至找到一个为空的地址为止。... -
【通用】微机原理与接口技术习题3.doc
2020-11-26 23:03:15精.选 3.1访问内存单元的寻址方式有几种它们具体是哪些 3.2指出下列各种操作数的寻址方式 1)[BX] 2)SI 3)435H 4)[BP+DI+123] 5)[23] 6)data(data是一个内存变量名...3.4判断下列操作数的寻址方式的正确性对正确的指出其 -
Ethercat 从站开发总结二:通讯地址
2020-07-17 17:22:29一、EtherCAT 寻址方式 1.网段寻址 EtherCAT 主站与网段之间存在着不同的寻址方式,利用以太网数据帧头的 MAC 地址来寻址就是EtherCAT 网段寻址。 具体的方式有以下两种。 开发模式:主站设备通过以太网交换机与... -
2020-01-03
2020-01-03 07:45:40掌握各种数据寻址方式,能够判断属于哪种寻址方式 掌握传送指令的用法,格式要正确 掌握堆栈的出栈入栈指令,SP寄存器的变化 注意指令暗含使用的寄存器,例如MUL CBW XLAT 等的用法, 掌握所有加... -
单片机原理与应用设计答案
2009-10-27 23:18:07判断下列说法是否正确。 A、 立即寻址方式是被操作的数据本身在指令中,而不是它的地址在指令中。 B、 指令周期是执行一条指令的时间。 C、 指令中直接给出的操作数称为直接寻址。 -
计算机组成原理中指令的四个工作周期
2020-07-13 14:42:52执行过程:在取址周期后,需要判断是否有间址周期,如果没有就进入到了执行周期,在执行周期...因为寻址方式的不同,所以有可能是间址寻址,所以在执行周期中要取出操作数,需要进行两次访存,间址周期执行的是将操作 -
《计算机组成原理》总结
2020-07-14 11:50:16前言 即将参加今年的秋招,校招比较考核学生的底层知识,开始撸操作系统、计算机组成原理、计算机网络以及Java的知识了。希望能在2020年本就不怎么...寻址方式(百度)3.1.指令寻址3.2.数据寻址四、多层次的存储器1. -
计算机组成原理期中总结(甘琳凤)
2020-05-06 15:43:531:算术 / 逻辑运算单元74181ALU可完成:16种算术运算功能和16种逻辑运算功能。 2:存储单元是指:存放一个机器字的所有存贮元集合。...5:用某个寄存器中操作数的寻址方式称: 寄存器直接寻址 ... -
python两次调用write方法的原因_两次调用文件的write方法,以下选项中描述正确的是...
2021-01-29 03:31:33【判断题】电缆对地绝缘测试时拔出防雷元件,主要原因是防雷...【单选题】下列有关人们对未来的向往和追求中,属于社会理想的是( )【单选题】精密量距的倾斜改正为()【单选题】S7 有四种寻址方式:立即寻址、存储器直... -
sudo 允许某一用户_sudo允许某些用户以root身份运行部分/全部系统命令的程序。...
2021-01-14 08:00:43【单选题】PLC通讯中传输速录是指单位时间内传输的信息量,常用波特碌来表示,波特率的单位是()【单选题】指令“MOVB ACO,VBO”中操作数的寻址方式是()【判断题】EFS加密是基于公钥策略的, 对用户是透明的。... -
汇编语言程序设计——分支结构例1
2019-07-31 21:08:01汇编语言程序设计——分支结构例1 设计目标 设计分支程序,实现下列公式计算。X、Y 为字型。假设 X 单元中保存三个数:9,-6,34,分别作判断...(3)采用寄存器相对寻址方式(MOV AX,X[SI])取出 X 的三个值; ...
-
37-基于51单片机的打地鼠游戏设计.zip
-
MySQL 设计基础(数据库概论、初探)
-
朱老师鸿蒙系列课程第1期-3.鸿蒙系统Harmonyos源码配置和管理
-
MySQL 事务和锁
-
MySQL 查询与高级查询(多表、嵌套和正则表达式)
-
搭建LAMP相关文件.rar
-
C/C++反汇编解密
-
海南_GCL2013_10.8.0.1385_(1805081600).exe
-
MySQL 主从复制 Replication 详解(Linux 和 W
-
Java Math常用方法
-
Spring3.2中文版.docx
-
线程通讯两个Demo,wait()notify()与park()unpark()
-
MySQL 高可用工具 heartbeat 实战部署详解
-
linux学习之用户与用户组(6)
-
翻车了,记一次线上事故
-
python GUI编程
-
可用于反查贷款利率的贷款计算器
-
MySQL 索引
-
Python函数库深度详解(1)
-
CSS文本样式