Excel表格网

80x86汇编是什么语言?

240 2024-02-28 13:50 admin   手机版

一、80x86汇编是什么语言?

汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。

在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。

普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

二、汇编指令STA?

●STA 既然有把内存单元读入寄存器的指令,那当然也要有把寄存器内容写回内存的指令。STA指令就是把A寄存器的内容写入指定的内存单元,具体要写入哪个内存单元依据寻址方式的不同而不同。 例:A寄存器现在的值为$000F,执行STA指令后,这个值被写入内存单元$2100。

三、汇编SUB指令?

是减法运算。 比如 mov ax,2 mov bx,1 sub ax,bx 其中sub ax,bx就是ax中的值减bx中的值,等于1,然后把结果,也就是1,放入ax中。

四、汇编add指令用法?

加法指令 ADD(Addition) 格式

格式: ADD A,B //A=A+B;

功能: 两数相加

1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数B.

2. A和B均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的, 但不允许两个都是存储器操作数.

五、clr汇编指令意思?

汇编指令CLR:CLR A//累加器A被赋予一个零值,这是逻辑运算指令。CLR C//清除程序状态寄存器PSW中的CY位状态,这是一条位操作指令。

C语言的扩展数据功能:1。C语言设计的目标是提供一种编程语言,它能够以简单的方式编译和处理低级内存,生成少量的机器代码,并且在没有任何运行环境支持的情况下运行。2C语言可以直接读写硬件存储地址,实现汇编语言的主要功能,直接操作硬件。

六、汇编jnz指令详解?

jnz指令是什么?

JNZ不为零时再次跳转,即判断ZF标志位是否为1。如果为1,则表示运算结果为0,然后再次跳转到标记为:的指令。

汇编语言jz与jnz的区别是什么?

如果JNZ的结果不为零(或不相等),则将传输该结果。

JZ为零,标志为1。JNZ(或jne)(不为零或不等于时跳转),汇编语言中的一种条件转移指令。

如果结果不为零(或不相等),则将进行传输。

在ZF汇编语言中,PSW标志是寄存器中的一个位,JZ根据ZF决定是否跳转。如果ZF=1(意味着这个操作的结果是0,否则ZF=0),它将跳转。

否则,它不会跳。ZF的状态是根据其他指令的执行结果来设置的。JZ=零时跳转,即零标志为1时跳转。

它通常与CMP一起用来判断两个数是否相等。另一种写JZ的方法是JE,JE=jump if equal。JZ和JE的功能完全相同。

七、汇编中inc指令?

N1难道不是数据段中的一个地址吗

--对。

为什么inc命令不是将N1点地址加一(就是说N1将指向下一字节的地址),程序的意思好像是将N1的内容加一

--的确,就是把内容加一。

--你看看:INC N1+1

--这是把 N1 下一字节的内容加一

能解释一下原理吗

--这是汇编语言的规则,没有原理。

-----------------------

C语言:

int i, j, k;

j = j + 1;

是雷同的。

八、80x86调用函数指令是什么?

CALL - 调用过程 操作码 指令 说明 E8 cw CALL rel16 相对近调用,位移量相对于下一条指令 E8 cd CALL rel32 相对近调用,位移量相对于下一条指令 FF /2 CALL r/m16 绝对间接近调用,地址由 r/m16 给出 FF /2 CALL r/m32 绝对间接近调用,地址由 r/m32 给出 9A cd CALL ptr16:16 绝对远调用,地址由操作数给出 9A cp CALL ptr16:32 绝对远调用,地址由操作数给出 FF /3 CALL m16:16 绝对间接远调用,地址由 m16:16 给出 FF /3 CALL m16:32 绝对间接远调用,地址由 m16:32 给出 说明 将过程链接信息保存到堆栈上,并分支到目标(调用目标)操作数指定的过程(被调用过程)。

目标操作数指定被调用过程中第一条指令的地址。此操作数可以是立即数、通用寄存器或内存位置。此指令可用于执行四种不同类型的调用: 近调用 - 调用当前代码段(CS 寄存器当前指向的段)中的过程,有时称为段内调用。远调用 - 调用当前代码段之外的段中的过程,有时称为段间调用。特权级别间远调用 - 对特权级别与当前执行程序或过程不同的段中的过程进行的远调用。任务切换 - 调用不同任务中的过程。后两种调用类型(特权级别间调用与任务切换)只能在保护模式中执行。如需有关近调用、远调用及特权级别间调用的详细信息,请参阅“IA-32 英特尔(R) 体系结构软件开发人员手册”第 1 卷第 6 章中标题为“使用 Call 与 RET 调用过程”的部分。如需有关使用 CALL 指令执行任务切换的详细信息,请参阅“IA-32 英特尔(R) 体系结构软件开发人员手册”第 3 卷第 6 章“任务管理”。近调用。执行近调用时,处理器将 EIP 寄存器的值(包含 CALL 指令后面的指令的偏移量)压入堆栈(稍后用作返回指令指针)。然后,处理器分支到当前代码段中由目标操作数指定的地址。目标操作数指定代码段中的绝对偏移量(即相对于代码段基址的偏移量)或相对偏移量(相对于 EIP 寄存器中指令指针的当前值的有符号位移量,此指针指向 CALL 指令后面的指令)。执行近调用时,CS 寄存器保持不变。对于近调用,绝对偏移量在通用寄存器或内存位置(r/m16 或 r/m32)中间接指定。操作数大小属性确定目标操作数的大小(16 位或 32 位)。绝对偏移量直接加载到 EIP 寄存器。如果操作数大小属性是 16,则 EIP 寄存器的两个高位字节清除为零,得到大小最大为 16 位的指令指针。(使用堆栈指针 [ESP] 作为基址寄存器来间接访问绝对偏移量时,使用的基址值是 ESP 在指令执行之前的值)。在汇编代码中,相对偏移量(rel16 或 rel32)通常指定为标签,但是在机器代码级别,它的编码形式是有符号的 16 位或 32 位立即数。此值会加到 EIP 寄存器中的值上。对于绝对偏移量,操作数大小属性确定目标操作数的大小(16 位或 32 位)。实地址模式或虚 8086 模式中的远调用。在实地址模式或虚 8086 模式中执行远调用时,处理器将 CS 与 EIP 寄存器的当前值压入堆栈,作为返回指令指针使用。然后,处理器执行指向目标操作数指定的代码段与偏移量的“远分支”操作,以便调用被调用过程。这里,绝对远地址由目标操作数使用指针(ptr16:16 或 ptr16:32)直接指定,或是使用内存位置(m16:16 或 m16:32)间接指定。使用指针方法时,被调用过程的段与偏移量在指令中编码,编码时使用 4 字节(16 位操作数大小)或 6 字节(32 位操作数大小)远地址立即数。使用间接方法时,目标操作数指定内存位置,它包含 4 字节(16 位操作数大小)或 6 字节(32 位操作数大小)远地址。操作数大小属性确定远地址中偏移量的大小(16 位或 32 位)。远地址直接加载到 CS 与 EIP 寄存器。如果操作数大小属性为 16,则 EIP 寄存器的两个高位字节清除为零。保护模式中的远调用。处理器在保护模式中操作时,CALL 指令可用于执行以下三种类型的远调用: 相同特权级别远调用。不同特权级别远调用(特权级别间调用)。任务切换(远调用另一项任务)。在保护模式中,处理器总是使用远地址中的段选择器部分访问 GDT 或 LDT 中相应的描述符。描述符类型(代码段、调用门、任务门或 TSS)与访问权限确定要执行的调用操作类型。如果所选描述符是代码段的,则执行相同特权级别代码段远调用。(如果选择的代码段在另一个特权级别中,并且代码段为非相容代码段,则生成一般保护性异常)。在保护模式中执行的相同特权级别远调用与在实地址模式或虚 8086 模式中执行的远调用非常相似。绝对远地址由目标操作数使用指针(ptr16:16 或 ptr16:32)直接指定,或是使用内存位置(m16:16 或 m16:32)间接指定。操作数大小属性确定远地址中偏移量的大小(16 位或 32 位)。新的代码段选择器及其描述符加载到 CS 寄存器,相对于指令的偏移量加载到 EIP 寄存器。请注意,调用门(在下一段叙述)也可用于执行相同特权级别上代码段的远调用。此机制提供了另一层面的间接调用,进行 16 位与 32 位代码段之间的调用时,首选这种方法。执行特权级别间远调用时,被调用过程的代码段必须通过调用门访问。目标操作数指定的段选择器确定调用门。同样地,在这里,目标操作数可以使用指针(ptr16:16 或 ptr16:32)直接指定调用门的段选择器,或是使用内存位置(m16:16 或 m16:32)间接进行指定。处理器从调用门描述符中获取新代码段的段选择器与新的指令指针(偏移量)。(使用调用门时,忽略目标操作数的偏移量)。执行特权级别间调用时,处理器会切换到被调用过程的特权级别的堆栈。新堆栈段的段选择器在当前运行的任务的 TSS 中指定。执行堆栈切换之后,分支到新的代码段。(请注意,使用调用门对相同特权级别的段执行远调用时,不会发生堆栈切换)。在新堆栈中,处理器会压入以下值:调用过程堆栈的段选择器与堆栈指针、调用过程堆栈的一组参数(可选),以及调用过程代码段的段选择器与指令指针。(调用门描述符的值确定要将多少个参数复制到新的堆栈)。最后,处理器分支到新代码段中被调用过程的地址。使用 CALL 指令执行任务切换与通过调用门执行调用存在一定程度的相似。这里,目标操作数指定要切换到的任务的任务门段选择器(忽略目标操作数中的偏移量)。任务门则指向任务的 TSS,它包含任务代码与堆栈段的段选择器。TSS 还包含挂起任务之前要执行的下一条指令的 EIP 值。此指令指针值加载到 EIP 寄存器,以便任务从这个下一条指令再次执行。CALL 指令也可直接指定 TSS 的段选择器,这样就不用间接通过任务门。如需有关任务切换机制的详细信息,请参阅“IA-32 英特尔® 体系结构软件开发人员手册”第 3 卷第 6 章“任务管理”。请注意,使用 CALL 指令执行任务切换时,会将 EFLAGS 寄存器中的嵌套任务标志 (NT) 设置为 1,并且会同时加载新 TSS 的前一个任务链接字段与旧任务的 TSS 选择器。可以预见,代码会通过执行 IRET 指令暂停此嵌套任务,由于 NT 标志已设置为 1,此指令将自动使用前一个任务链接返回到调用任务。(如需有关嵌套任务的详细信息,请参阅“IA-32 英特尔® 体系结构软件开发人员手册”第 3 卷第 6 章“任务链接”)。使用 CALL 指令切换任务与 JMP 指令在这一点上是不同的,JMP 指令不会将 NT 标志设置为 1,因此 IRET 指令应该不会暂停任务。16 位与 32 位混合调用。在 16 位与 32 位代码段之间执行远调用时,应该通过调用门进行。如果是从 32 位代码段到 16 位代码段的远调用,则应该从 32 位代码段的头 64 KB 执行调用。这是因为指令的操作数大小属性设置为 16,所以只能保存 16 位返回地址偏移量。另外,应该使用 16 位调用门执行调用,以便将 16 位值压入堆栈。如需有关在 16 位与 32 位代码段之间执行调用的详细信息,请参阅“IA-32 英特尔(R) 体系结构软件开发人员手册”第 3 卷第 16 章“16 位与 32 位混合代码”。

九、汇编equ汇编equ什么意思汇编equ指令?

单片机中,EQU是一个伪指令,意思跟“=”差不多,相当于C语言中的sbit 和sfr两个指令。

十、gpu汇编指令代码

GPU汇编指令代码

GPU汇编指令代码是专门为GPU设计的汇编语言指令集,用于在GPU上执行高性能的计算任务。与传统的CPU汇编指令不同,GPU汇编指令代码是为GPU的硬件架构和计算模型量身定制的,因此它们在GPU上具有更高的执行效率。本文将介绍一些常见的GPU汇编指令代码,并分析它们在GPU计算中的用途和性能。

简单的算术运算指令

GPU汇编中最基本的指令之一是算术运算指令,例如加法、减法、乘法和除法。这些指令可以在GPU上快速执行,并且能够处理大量的数据,从而实现高性能的计算。例如,一个简单的加法指令可以用于将两个向量相加,这对于计算机视觉和图形处理任务来说是非常常见的操作。

矩阵乘法指令

矩阵乘法是计算机图形学和人工智能中常见的操作。在GPU上,可以使用特殊的指令来加速矩阵乘法。这些指令可以将两个矩阵相乘,并将结果存储在一个新的矩阵中。这些指令通常用于大规模的数据处理和计算,例如在深度学习中。

位操作指令

位操作是计算机中基本的操作之一,它们可以在GPU上以高效的方式执行。例如,位与操作可以用于将两个二进制数相与,位或操作可以用于将两个数进行或运算。这些操作在图像处理和计算机视觉任务中非常常见。

内存访问指令

在GPU中,内存访问是执行计算任务的关键步骤之一。GPU提供了专门的内存访问指令,例如加载和存储指令,可以高效地从内存中读取和写入数据。这些指令通常用于处理大量的数据,例如在深度学习中。

总结

GPU汇编指令代码是一种专门为GPU设计的汇编语言指令集,用于执行高性能的计算任务。本文介绍了几个常见的GPU汇编指令代码,并分析了它们在GPU计算中的用途和性能。通过使用这些指令,可以加速大规模的数据处理和计算任务,提高计算效率和性能。

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片