![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
汇编
汇编
隐士低手
这个作者很懒,什么都没留下…
展开
-
汇编语言基础知识(五)
1.cpu中断是指cpu不再接着向下执行指令,而是转去处理这个特殊信息。cpu中断分为内中断和外中断。2.内中断包括除法错误,比如执行div指令产生的出发溢出 单步执行,比如Debug单步调试 执行into指令 执行int指令3.cpu收到中断信息后,需要对中断信心进行处理,如何处理中断信息,由我们编程决定。用来处理中断信息的程序被称为中断处理程序。3.每一个中断信息都由一个中断类型码,比如除法错误的内存码为0。4.要执行中断处理程序,我们首先要知道处理程序的内存地址。cpu通过中断原创 2020-06-13 12:45:58 · 290 阅读 · 0 评论 -
汇编语言基础知识(四)
1.ret指令用栈中的数据,修改IP内容,从而实现转移。retf指令也是根据栈中的内容,修改CS和IP的内容,进行控制转移。2.call指令将当前的IP或CS和IP压入栈中,然后进行跳转。3.call命令被送到cpu指令缓存的时候,IP已经指向了call命令下一条指令,cpu执行call令后,是将call命令的下一条指令存储到了栈中。4.我们可以通过call指令和ret指令配合,实现函数的跳转,也就是子程序的调用。5. call 标号比如call code(标号),call可以根据位移进行转原创 2020-06-09 18:34:35 · 665 阅读 · 0 评论 -
SSE指令集一
本来想着写一些SSE指令用来优化数学运算,但是又不知道从何入手,本着不造轮子的原则,查看了一下DX的数学库。DX的数学库都是内联函数,可以看到源代码。看了一下点乘法线,自己不写是对的,人家用了这么久的数学库,肯定是最好的。上一段代码。inline XMVECTOR XM_CALLCONV XMVector3Dot( FXMVECTOR V1, FXMVECTOR V2){#if defined(_XM_NO_INTRINSICS_) float fValue = V1.原创 2020-06-08 22:47:22 · 1096 阅读 · 0 评论 -
汇编语言基础知识(三)
1.and指令,可以设置操作对象的相应位为0(与操作)。2.or指令,可以设置操作对象的相应位位1(或操作)。3.si和di是8086CPU中和bx功能相近的寄存器,si和di不能够分成两个8位寄存器来使用。4.在编程的时候因为寄存器的数量有限,我们应该把临时变量放到内存中(栈),这和高级语言中的local变量都存储在栈中很类似。5.在8086CPU中,只有bx,si,di,bp这四个寄存器可以用来进行内存单元的寻址([...])。6.在[...]中,这四个寄存器可以单个出现或只能以4中原创 2020-06-07 19:36:50 · 946 阅读 · 0 评论 -
汇编语言基础知识(二)
1.汇编语言首先进行编译,生成目标文件(.obj),然后通过连接器进行连接生成(.exe)文件。2.段结束用ends,告知编译器程序结束用end,程序返回用mov ax,4c00H;int 213.masm是汇编语言的编译器4.每一个程序都需要通过壳程序将其加载到内存中,比如dos中的command(DOS的shell)就是一个壳程序,debug也是一个壳程序。5.将程序的入口地址传给cpu,程序就可以运行了。6.inc bx 代表bx中的内容加1。7.cx寄存器保存loop循环的次原创 2020-06-06 18:28:35 · 547 阅读 · 0 评论 -
汇编语言基础知识(一)
1.指令和数据都是应用上的概念,在内存或者磁盘上,指令和数据没有任何区别,都是二进制信息。2.cpu与内存交互,需要知道内存的地址,命令的控制(读or写),数据的传输,也就是对应三个总线,地址总线,控制总线,数据总线。3.一个cpu如果有n根地址线,那么它可以访问的内存大小为2的n次方,比如8086PC具有20根地址总线,所以可以访问的内存空间为1M。4.数据总线决定了cpu和内存之间交互的速度,比如总线的宽度为8位,如果传输的数据为16位,那么要传输两次。8086PC的数据总线为16位,所以只原创 2020-06-05 19:10:13 · 494 阅读 · 0 评论