80x86中下列指令中操作数存放在代码段中的是
1个回答
关注
展开全部
31、JMP(无条件转移指令)
执行代码的跳转,分为两种,一:段内转移,即要跳过去的代码地址和当前地址在同一段,这时只要修改IP(专用寄存器--指令指针)即可;二:段间转移:即要跳过去的代码地址和当前代码地址不在同一段内,需要同时修改CS和IP的值。
写法:
1、JMP label;若label与该指令位于同一代码段内,IP=label的偏移地址,否则CS:IP=label的分段地址,简单的说,就是跳到label的地址去。
2、JMP reg16/mem16;段内转移,偏移地址=reg16/[mem16]
3、JMP mem32;段间间接转移,段地址CS=mem32高字,偏移地址IP=mem32低字。
说明:当操作数是内存操作数时,若内存操作数是双字类型,则产生段间转移,若内存操作数是字类型,则产生段内间接转移。当不能确定类型时,编译器将报错。
32、Jcc(条件转移指令)
写法:Jcc label;
作用:若条件成立,则IP=label的偏移地址,否则,CPU将忽略该条件转移,继续执行下一条指令。
33、JCXZ/JECXZ(Jump if CX/ECX is zero)
写法:JCXZ label;(若CX=0,则转移到label)
JECXZ label;(若ECX=0,则转移到label)
说明:label相对位移量必须在-126~127之间
34、循环指令
LOOP label;
作用:CX=CX-1;若CX>0,则转移到label;
LOOPZ/LOOPE label;
作用:CX=CX-1;若CX>0且 ZF=1,则转移到label;
LOOPNZ/LOOPNE label;
作用:CX=CX-1;若CX>0且ZF=0,则转移到label;
说明:label相对位移量必须在-128~127之间
35、过程调用和返回指令
CALL(过程调用)
写法:CALL label;
作用:若label与该指令在同一代码段,则为段内直接调用,IP进栈,IP=label的偏移地址,如果是不在同一代码段,则为段间间接调用,CS:IP进栈,CS:IP=label的分段地址
写法:CALL reg16/mem16;
作用:段内间接调用,IP进栈,IP=reg16/【mem16】
写法:CALL mem32;
咨询记录 · 回答于2021-10-30
80x86中下列指令中操作数存放在代码段中的是
您好,您的问题我已经看到了,正在整理答案,请稍等一会儿哦~
80X86常用汇编指令集
学习汇编语言,最关键的就在于汇编指令集的掌握以及计算机工作方式的理解,以下是80X86汇编过程中经常用到的一些汇编指令。
从功能分类上来说,一共可分为
一、 数据传送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF、POPF、CBW、CWD、CWDE。
二、 算术指令:ADD、ADC、INC、SUB、SBB、DEC、CMP、MUL、DIV、DAA、DAS、AAA、AAS。
三、 逻辑指令:AND、OR、XOR、NOT、TEST、SHL、SAL、SHR、SAR、RCL、RCR、ROL、ROR。
四、 控制转移指令:JMP、Jcc、JCXZ、LOOP、LOOPZ、LOOPNZ、LOOPNE、CALL、RET、INT。
五、 串操作指令:MOVS、LODS、STOS、CMPS、SCAS。
六、 标志处理指令:CLC、STC、CLD、STD。
七、 32位CPU新增指令(后续补充并完善)
除上述的一些指令外,还有许多32位80X86CPU新增指令,这些指令有时会简化程序设计,不过由于我也是刚刚学习汇编,这些都是从书上看到的,所以很多还不是十分了解,我写这些的目的仅仅是想让自己能更好的去记住这些指令的作用和用法,同事也希望和我一样刚入门的朋友能够多了解一些,并没有其他目的,所有的示例也并没有经过实际的代码测试,所以希望各位朋友,不管你喜欢不喜欢,反对不反对,请文明发言,谢谢!
------------------------------------------------数据传送指令开始-------------------------------------------------------
1、 MOV(传送)
指令写法:MOV target,source
功能描述:将源操作数source的值复制到target中去,source值不变
注意事项:1)target不能是CS(代码段寄存器),我的理解是代码段不可写,只可读,所以相应这地方也不能对CS执行复制操作。2)target和source不能同时为内存数、段寄存器(CS\DS\ES\SS\FS\GS)3)不能将立即数传送给段寄存器4)target和source必须类型匹配,比如,要么都是字节,要么都是
31、JMP(无条件转移指令)
执行代码的跳转,分为两种,一:段内转移,即要跳过去的代码地址和当前地址在同一段,这时只要修改IP(专用寄存器--指令指针)即可;二:段间转移:即要跳过去的代码地址和当前代码地址不在同一段内,需要同时修改CS和IP的值。
写法:
1、JMP label;若label与该指令位于同一代码段内,IP=label的偏移地址,否则CS:IP=label的分段地址,简单的说,就是跳到label的地址去。
2、JMP reg16/mem16;段内转移,偏移地址=reg16/[mem16]
3、JMP mem32;段间间接转移,段地址CS=mem32高字,偏移地址IP=mem32低字。
说明:当操作数是内存操作数时,若内存操作数是双字类型,则产生段间转移,若内存操作数是字类型,则产生段内间接转移。当不能确定类型时,编译器将报错。
32、Jcc(条件转移指令)
写法:Jcc label;
作用:若条件成立,则IP=label的偏移地址,否则,CPU将忽略该条件转移,继续执行下一条指令。
33、JCXZ/JECXZ(Jump if CX/ECX is zero)
写法:JCXZ label;(若CX=0,则转移到label)
JECXZ label;(若ECX=0,则转移到label)
说明:label相对位移量必须在-126~127之间
34、循环指令
LOOP label;
作用:CX=CX-1;若CX>0,则转移到label;
LOOPZ/LOOPE label;
作用:CX=CX-1;若CX>0且 ZF=1,则转移到label;
LOOPNZ/LOOPNE label;
作用:CX=CX-1;若CX>0且ZF=0,则转移到label;
说明:label相对位移量必须在-128~127之间
35、过程调用和返回指令
CALL(过程调用)
写法:CALL label;
作用:若label与该指令在同一代码段,则为段内直接调用,IP进栈,IP=label的偏移地址,如果是不在同一代码段,则为段间间接调用,CS:IP进栈,CS:IP=label的分段地址
写法:CALL reg16/mem16;
作用:段内间接调用,IP进栈,IP=reg16/【mem16】
写法:CALL mem32;