ZKX's LAB

十六位立即数送八位寄存器

2020-07-17知识18

微机原理与接口技术 立即数寻址 通过寄存器的名称就可以知道,AL是8位寄存器,AX是16位寄存器.汇编语言寄存器存储器问题 寄存器有通用寄存器,段寄存器,标志寄存器 其中通用寄存器:EAX:累加寄存器,是32位的 可以取低16位单独使用,叫AX,其中AX,又可以分成一半一半 8高位的叫AH 底8位的叫AL怎样使用汇编指令对8位、16位、32位寄存器数据进行存储? 回答这个问题前需要先介绍一款调试工具DTdebug.EXE以便我们通过实验来验证。在电脑旁的同学可以自己亲自动手实验一下,实践出真知,掌握本质对于学习计算机的同学来说还是很有意思的。如果要真正明白,必须要掌握以下的知识点:掌握DTDebug界面、并熟练使用1、熟记汇编窗口的组成及寄存器窗口的组成2、MOV指令的熟练使用3、掌握字节、字、双字的知识4、使用汇编指令对8位、16位、32位寄存器数据的存储寄存器是处理器(CPU)中用来存储数据的地方。接下来我们借用【DTDebug软件】来分析。DTDebug.exe是供程序员使用的程序调试工具。【本节只简单介绍DTDebug的使用,详细说明书请到编程达人官网去下载相关文档】双击DTDebug.exe软件图标如图2-4-1所示,打开界面如图2-4-2所示。图2-4-2是软件的原始界面,没有任何记录。那该怎么把将要被调试的程序打开哪?有四种方式:1、在如图2-4-2程序窗口中找到File->Open->找到调试程序;2、直接将要被调试的程序拖拽到如图2-4-2程序窗口中。3、关闭如图2-4-2窗口,把将要被调试的程序拖到如图2-4-1DTDebug图标上。4、在如图2-4-2程序窗口中找到File->Attach->找到将要被调试的程序(正在运行的软件)。以IPMGS.exe为例,介绍DTDebug微机原理与接口技术 立即数寻址 很简单啊,AL寄存器是8位的,而BX是16位的寄存器,从这个看出的,也可以从后面看:68H是十六进制,两个数字,一个代表四位,两个就是八位的,而B8A0H是四位,就是十六进制为什么前面说8位数据不能直接加到16位寄存器中,后面张图直接将[bx+di]的数据加cx中 8位的立即数可以直接传送到8位、16位、32位、.寄存器中8位的内存数据不能直接传送到16位寄存器中,否则传送的不只是8位的“字节”数据,而是传送的16位“字”数据。怎么分辨立即数 寄存器操作数 存储器操作数 1.操作数称为立即数,这种寻址方式也就称为立即数寻址方式。2.指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。3.把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。指令中可以引用的寄存器及其符号名称如下:8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。立即数 寄存器操作数 存储器操作数 立即数是什么意思,最好举个例子?立即能从指令流中得到的数,MOV AX,0FFFFH;对应机器指令为:B8 FF FF,其中的0FFFFH即为立即数,它存在于指令中,可立即获得寄存器操作数是什么意思,最好举个例子?上例中的 AX 即为寄存器操作数,操作数本身存放于寄存器中,在指令中只是给出了几个位的代码来表示它具体存放在那个寄存器中。以下是一些指令的机器码和对应的汇编指令B80000 MOV AX,0000BAFFFF MOV DX,FFFFB9FFFF MOV CX,FFFFBBFFFF MOV BX,FFFF存储器操作数是什么意思,最好举个例子?那就是存放在内存器中的操作数,如:MOV SI,[2000H]中的[2000H]MOV[BX+SI+02],AX中的[BX+SI+02]这些操作数实际被存放于内存储器中,被操作或运算时需要从存贮器中取出并被CPU接受送到运算器等参与操作运算。内存操作数是什么意思,最好举个例子?没太听说,要有的话,也就和存储器操作数没有多大差别汇编用push指令时怎么说明存储器操作数是16位还是32位 如若楼主问的是PC下的汇编,那么麻烦不要被楼下误解。囧X86汇编中push指令是不支持8位操作数的(请自行在debug下试试push al 是不是合法指令)8086中push指令不需要任何说明,传送的一律是字单元push指令的操作数可以是立即数,寄存器,内存单元,只要给出即可,不许任何说你,因为8086 的push/pop指令操作的操作数一律是字单元386以后的CPUpush指令支持了双字操作如果是寄存器操作数,毫无疑问,汇编程序(or称之为编译器?会自动判断操作数是字单元还是双字单元,比如 push ax;push eax;都可以很清晰明了的看出来目的操作数是几位的对于立即数如果在编程的时候 前面指定了伪指令.386那么程序中出现的立即数入栈 都将被认为是双字立即数对于要把一个内存单元的内容入栈这个时候是需要用 word ptr 和dword ptr来指出操作数是16位的还是32位的汇编语言如何知道寄存器内的值按照8位16位32位表示,并在做算术运算判是否断溢或表记进退位? 1、立即数可以直接赋值到不同长度的寄存器中,这个赋值过程由编译器处理。2、8位数不能和16位数直接相加,需要在相加之前将8位转(cbw)为16位,再相加。特别是有负数参与运算时。这些相加过程由程序员所编制的指令控制,编译器只负责翻译!

#计算机指令#汇编语言#操作数#通用寄存器#立即数

随机阅读

qrcode
访问手机版