ZKX's LAB

寄存器送立即数

2020-07-17知识10

为什么立即数不能直接送段寄存器? 由于立即数直接写入段寄存器这样的指令,被翻译成机器码之后将占用更多的字节,在事先规定的指令长度范围内无法存贮下这么多的内容,因此改由先写入通用寄存器,再由通用寄存器写入段寄存器的办法代替。立即数实际上是相当占地方的。立即数 寄存器操作数 存储器操作数 立即数是什么意思,最好举个例子?立即能从指令流中得到的数,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接受送到运算器等参与操作运算。内存操作数是什么意思,最好举个例子?没太听说,要有的话,也就和存储器操作数没有多大差别跪求大神解答51单片机汇编程序,不要那种把立即数送到寄存器这种解释,求根据题目具体解释!谢了! MOV R0,#40H;将8个字节存储的首地址存入R0中MOV R4,#08H;将连续存储的字节数目存入R4中MOV R2,#0;将R2清零,因为后面对其做加1操作MOV A,#0;将累加器A清零LOOP:ADD A,@R0;A和R0中地址所存的数值相加,即A+40H单元的内容,结果存入A中JNC NEXT;检查进位标志,有进位顺序执行,INC R2;有进位说明相加>256,则R2加1,R2存结果的高字节NEXT:DJNZ R4,LOOP;这8个字节有没有相加完,没有加完转去LOOP继续执行MOV R3,A;8个字节加完,将结果低字节存入R3中RET;子程序返回说明:本程序是要将8个字节数相加,结果高字节存入R2,低字节存入R3;根据要求写出一条汇编语言指令。 (1)数据宽度未知,姑且以字节为例:MOV Byte ptr[SI],0(2)XOR BX,0FFF0H汇编语言的问题,课本上说操作数可以是立即数寄存器等等以及上述形式的加减表达式,有没有人详细说一下加 51单片机的指令的第一操作数,一般是寄存器第二操作数范围就较宽,可以是数据(立即数),可以是寄存器,可以是地址,可以是含地址的单元等MOV A,#50HMOV A,R2MOV A,50HMOV A,@R0汇编语言 为什么不能用立即数给段地址赋值 用通过寄存器间接赋值呢(应该有特殊的原因,是为什么呢) 你问的这个问题,反正书上也没有说,我也不太肯定。只是猜想,猜想而已。反正立即数就不能给地址赋值,这个是肯定的。原因:我感觉和寄存器的结构有关吧,在我用汇编的1年,我感觉段寄存一般都是配合偏移地址使用的,要么就是保存地址,间接的寻址的。保存立即数会完全的污染段寄存器的,我个人感觉,因为那样设计也不好,要是乱给段寄存器赋值,比如:cs,ds,bp,sp,那岂不是CPU大乱啦。一般都是保存地址的。如何把立即数送往特殊功能寄存器? 直接赋值即可啊,P1=0x00;这样就好了!立即数能送到存储器吗?汇编语言 立即数可以直接送到存储器,但应指定存储器的类型。如:mov byte ptr[di],3mov word ptr[si],3000mov dword ptr[bx],0FFFFFFh8086中为什么不能将立即数直接传送到段寄存器 由于立即数直接写入段寄存器这样的指令,被翻译成机器码之后将占用更多的字节,在事先规定的指令长度范围内无法存贮下这么多的内容,因此改由先写入通用寄存器,再由通用寄存器写入段寄存器的办法代替。立即数实际上是相当占地方的

随机阅读

qrcode
访问手机版