机器指令:CPU能直接识别并执行的二进制编码
汇编指令:汇编指令是机器指令的助记符,同机器指令一一对应。
指令:指令通常由操作码和地址码(操作数)两部分组成
指令集:每种CPU都有自己的汇编指令集
参考资料:<<汇编语言>> 王爽
...
原创
2021-06-01 13:35:32
593阅读
比如你用local在栈上定义了一个局部变量LocalVar,你知道实际的指令是什么么?一般都差不多像下面的样子: push ebp mov esp, ebp sub esp, 4
转载
2024-05-29 11:32:20
150阅读
loop指令为循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。 对IP的修改范围都为-128~127。 指令格式:loop 标号 ((cx) = (cx) - 1,如果(cx) ≠ 0,转移到标号处执行)。 (cx) = (cx) - 1;如果 (cx) != 0,(IP) = (IP) + 8位位移。 8位位移 = 标号处的地址 - loop指令后的第一个字节的地址; 8位位移的范围为-128~127...
原创
2021-06-01 13:35:17
1257阅读
int指令的格式为:int n ,n为中断类型码,它的功能是引发中断过程。 CPU执行int n指令,相当于引发一个n号中断的中断过程 在程序中使用int指令调用任何一个中断的中断处理程序(中断例程) 编写供应用程序调用的中断例程...
原创
2021-06-01 13:35:47
795阅读
8086CPU逻辑指令and、or、not、xor、test、shl、shr、sal、sar、rol、ror、rcl、rcr等都是逻辑指令。除了not指外,它们的执行结果都影响标志寄存器的相关标志位。
原创
2021-06-01 13:35:54
334阅读
jmp为无条件转移,转到标号处执行指令可以只修改IP,也可以同时修改CS和IP; jmp指令要给出两种信息: 转移的目的地址 转移的距离(段间转移、段内短转移,段内近转移) jmp short 标号 jmp near ptr 标号 jcxz 标号 loop 标号 等几种汇编指令,它们对 IP的修改是根据转移目的地址和转移起始地址之间的位移来进行的。在它们对应的机器码中不包含转移的目的地址,而包含的是到目的地址的位移距离。...
原创
2021-06-01 13:35:19
1234阅读
div是除法指令 除数:有8位和16位两种,在一个寄存器或内存单元中。 被除数:默认放在AX或DX和AX中, 如果除数为8位,被除数则为16位,默认在AX中存放; 如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。 结果: 如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数; 如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数...
原创
2021-06-01 13:35:22
1358阅读
sbb是带借位减法指令,它利用了CF位上记录的借位值。 指令格式:sbb 操作对象1, 操作对象2 功能:操作对象1 = 操作对象1 - 操作对象2 - CF
原创
2021-06-01 13:35:45
1276阅读
call指令经常跟ret指令配合使用,因此CPU执行call指令,进行两步操作: 将当前的 IP 或 CS和IP 压入栈中; 转移(jmp)。 call指令不能实现短转移,除此之外,call指令实现转移的方法和 jmp 指令的原理相同。 call 标号(近转移) CPU执行此种格式的call指令时,相当于进行 push IP jmp near ptr 标号 call far ptr 标号(段间转移)...
原创
2021-06-01 13:35:16
1074阅读
jcxz指令 jcxz指令为有条件转移指令,所有的有条件转移指令都是短转移, 在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围都为-128~127。 指令格式:jcxz 标号(如果(cx)=0,则转移到标号处执行。) 当(cx) = 0时,(IP) = (IP) + 8位位移 8位位移 = “标号”处的地址 - jcxz指令后的第一个字节的地址; 8位位移的范围为-128~127,用补码表示; 8位...
原创
2021-06-01 13:35:18
1216阅读
8086CPU的转移行为有以下几类。 只修改IP时,称为段内转移,比如:jmp ax。 同时修改CS和IP时,称为段间转移,比如:jmp 1000:0。由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移。 短转移IP的修改范围为-128 ~ 127。 近转移IP的修改范围为-32768 ~ 32767。8086CPU的转移指令分为以下几类。 无条件转移指令(如:jmp) 条件转移指令 ...
原创
2021-06-01 13:35:20
229阅读
mul是乘法指令,使用 mul 做乘法的时候:相乘的两个数:要么都是8位,要么都是16位。 8 位: AL中和 8位寄存器或内存字节单元中; 16 位: AX中和 16 位寄存器或内存字单元中。 结果 8位:AX中; 16位:DX(高位)和 AX(低位)中。 格式:mul 寄存器 或 mul 内存单元参考资料:<<汇编语言>> 王爽...
原创
2021-06-01 13:35:21
2312阅读
CPU随时都可能执行中断处理程序,中断处理程序必须一直存储在内存某段空间之中而中断处理程序的入口地址,即中断向量,必须存储在对应的中断向量表表项中。中断处理程序的常规编写步骤:保存用到的寄存器; 处理中断; 恢复用到的寄存器; 用iret指令返回。iret 指令描述为:pop IP pop CS popfiret指令执行后,CPU回到执行中断处理程序前的执行点继续执行程序...
原创
2021-06-01 13:35:46
1071阅读
cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。cmp指令格式:cmp 操作对象1,操作对象2例如:指令cmp ax, ax,做(ax)-(ax)的运算,结果为0,但并不在ax中保存,仅影响flag的相关各位。指令执行后:zf=1,pf=1,sf=0,cf=0,of=0。CPU在执行cmp指令的时候,也包含两种含义:进行无符号数运算和进行有符号数运算。...
原创
2021-06-01 13:36:00
1506阅读
adc是带进位加法指令,它利用了CF位上记录的进位值。 指令格式:adc 操作对象1, 操作对象2 功能:操作对象1 = 操作对象1 + 操作对象2 + CF
原创
2021-06-01 13:36:01
1428阅读
记得前面提到过这个问题,几句话就给带过了。为什么还要啰里啰嗦的再说一下呢? 呵呵,是这样的,我在看一本汇编的资料时,怀疑上面的一个语句弄错了。想知道是不是他的汇编指令代码里包含“印刷错误”。我想如果是印刷错误的话,很可能他的二进制代码跟看得懂的指令码对不上。那么我如何自己将那个二进制代码转换成汇编指令码呢? 语句如下:00401046 51 push ecx ; make ro...
转载
2009-11-02 08:24:00
226阅读
2评论
CMP(比较)指令执行从目的操作数中减去源操作数的隐含减法操作,并且不修改任何操作数。指令格式:
原创
2022-06-01 17:53:16
3968阅读
算术运算指令add、sub、adc、sbb、inc、dec、cmp、imul、idiv、aaa等都是算术运算指令,这些指令实现存器和内存中的数据的算数运算。它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位...
原创
2021-06-01 13:35:55
273阅读
串处理指令 对内存中的批量数据进行处理,movsb、movsw、cmps、scas、lods、stos等。若要使用这些指令方便地进行批量数据的处理,则需要和rep、repe、repne 等前缀指令配合使用
原创
2021-06-01 13:35:52
232阅读
汇编语言跳转指令总结汇编语言跳转指令总结整数的无符号变量类型 ( Unsigned Variable Type of Integer )无符号的字符 ( Unsigned Char )汇编语言跳转指令总结JE ;等于则跳转JNE ;不等于则跳转JZ ;为 0 则跳转JNZ ;不为 0 则跳转JS ;为负则跳转JNS ;不为负则跳转JC ;进位则跳转JNC ;不进位则跳转JO ;溢出则跳转JNO ;不溢出则跳转JA ;无符号大于则跳转JNA
原创
2021-08-31 13:46:29
2206阅读