8086汇编指令表
8086汇编中jmp指令详解

8086汇编中jmp指令详解jmp指令解释:⏹jmp为无条件转移,可以只修改IP,也可以同时修改CS和IP;⏹jmp指令要给出两种信息:⏹转移的目的地址⏹转移的距离(段间转移、段内短转移,段内近转移)格式:一.Jump short 标号这种格式的 jmp 指令实现的是段内短转移,它对IP的修改范围为 -128~127,也就是说,它向前转移时可以最多越过128个字节,向后转移可以最多越过127个字节。
示例:assume cs:codesgcodesg segmentstart:mov ax,0jmp short sadd ax,1s:inc axcodesg endsend start说明:上面的程序执行后, ax中的值为 1 ,因为执行 jmp short s 后,越过了add ax,1 ,IP 指向了标号 s处的 inc ax。
也就是说,程序只进行了一次ax加1操作。
注意:⏹汇编指令jmp short s 对应的机器指令应该是什么样的呢?⏹我们先看一下别的汇编指令和其对应的机器指令可以看到,在一般的汇编指令中,汇编指令中的idata(立即数),不论它是表示一个数据还是内存单元的偏移地址,都会在对应的机器指令中出现,因为CPU执行的是机器指令,它必须要处理这些数据或地址。
⏹但是:当我们查看jmp short s或jmp 0008所对应的机器码,却发现了问题。
看到了吗?机器码中并不含有立即数。
为什么呢,解释如下⏹在“jmp short 标号”指令所对应的机器码中,并不包含转移的目的地址,而包含的是转移的位移。
⏹这个位移,使编译器根据汇编指令中的“标号”计算出来的。
如果我们在第一行程序后加上Mov bx,0000,你会发器机器码没变,还是EB03,为什么呢?jm p 0008对应的偏移就是0003大家可以回忆一下cpu中指令的执行流程,就会发现当执行完EB03后,ip=ip+2=0005,大家注意看EB03后面有个03,表示再向后三个单位,这样就到了0008这个偏移处了。
汇编语言上机实验一DEBUG常用命令及8086指令使用

汇编语⾔上机实验⼀DEBUG常⽤命令及8086指令使⽤实验⼀DEBUG常⽤命令及8086指令使⽤实验⽬的:通过实验掌握下列知识:1、8086指令: M OV,ADD,SUB,XCHG等2、DEBUG命令: A,D,E,F,H,R,T,U。
3、ASCII码及⽤16进制数表⽰⼆进制码的⽅法。
内容及步骤:⼀、DEBUG 命令使⽤:1、打 DEBUG 进⼊ DEBUG 控制,显⽰提⽰符 '_ '。
2、⽤命令 F100 10F 'A' 将'A'的ASCII码填⼊内存。
3、⽤命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。
4、⽤命令F110 11F 41 重复上⼆项实验,观察结果并⽐较。
5、⽤命令 E100 30 31 32 …… 3F将30H-3FH写⼊地址为100开始的内存单元中,再⽤D命令观察结果,看键⼊的16进制数是什么字符的ASCII码?6、⽤H命令检查下列各组16进制数加减结果并和你的⼿算结果⽐较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH7、⽤R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
8、⽤R命令将AX,BX内容改写为1050H及23A8H。
⼆、8086常⽤指令练习1、传送指令1)⽤A命令在内存100H处键⼊下列内容: MOV AX,1234MOV BX,5678XCHG A X,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG A X,DX2)⽤U命令检查键⼊的程序并记录,特别注意左边的机器码。
3)⽤T命令逐条运⾏这些指令,每运⾏⼀⾏检查并记录有关寄存器及IP的变化情况。
并注意标志位有⽆变化。
2、加减法指令:1)⽤A命令在内存100H处键⼊下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX图略。
8086汇编指令大全.

不允许寄存器或存储单元到除CS外的段寄存器
2入栈(出栈指令PUSH (POP
注意:
PUSH操作数不能是“立即数” POP操作数不能是段寄存器
CS
不影响标志位
先进后出
单操作符
3交换指令XCHG
注意:
只允许寄存器与存储单元之间的交换
不影响标志位
4换码指令XLAT
5地址传送指令LEA :偏移地址
ZF=0
SF符号标志位
OF溢出标志位
DF方向标志位
IF中断允许位IF=1时响应外部中断
TF跟踪标志位
操作数:[目的操作数(OPD ,源操作数(OPS ] ;立即操作数,寄存器操作数,存储器操作数。寻址方式:
1寄存器寻址例:INC AX ; MOV AX , BX
2寄存器间接寻址(寄存器只能是BX , DI , SI , BP ; [PA=(BX、DI、SI +DS》4或BP+SS》4]
6数据段指针送寄存器LDS :低地址的字送指定的通用寄存器(SI、高地址的字
送DS
7附加段指针送寄存器指令LES :与LDS相似,低地址的字送通用寄存器(DI、高
地址送ES
上三指令不影响标志位
8标志寄存器传送指令
LAHF :标志寄存器低八位送
AH
SAHF :AH送标志寄存器低八位
PUSHF :标志寄存器压入堆栈
标志寄存器:9个有效位,分6个状态寄存器和3个控制寄存器
CF当执行一个加法(减法使最高位产生进位(借位时CF=1否则
CF=0
PF指令执行的结果低8位有偶数个一时, CF=1否则
CF=0
AF当执行一个加法(减法使运算结果低4位向高4位有进位(借位时AF=1否则
8086汇编rep指令

(di) = (di) + 2
如果DF = 1则: (si) = (si) - 2
(di) = (di) - 2
rep 指令使用
8086汇编 rep指令
任务:用串传送指令,将 F000H段中的最后
// F000H段的最后一个字符的位置:F000:FFFF
(2) 如果DF = 0则: (si) = (si) + 1
(di) = (di) + 1
如果DF = 1则: (si) = (si) - 1
(di) = (di) - 1
串传送指令 2: movsw
功能:(以字为单位传送)
(1) ((es)×16 + (di)) = ((ds) ×16 + (si))
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
8086汇编 rep 指令
rep指令常和串传送指令搭配使用 功能:根据cx的值,重复执行后面的指令
串传送指令 1: movsb
功能:(以字节为单位传送)
(1) ((es)×16 + (di)) = ((ds) ×16 + (si))
8086汇编指令

HLT 处理器暂停, 直到出现中断或复位信号才继续. O MN|ea.O
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. &ET PYf %#
ESC 转换到外处理器. Kl+4 A} Uo
LOCK 封锁总线. %'[ pucEF
NOP 空操作. bn"z&g
POPD 32位标志出栈. @A6 iY
二、算术运算指令 J 299 mgB
ADD 加法. (RI)<zaK ;
ADC 带进位加法. ~+ {*KPiD
INC 加 1. oO;L l? ~
AAA 加法的ASCII码调整. At@0G\^
DAA 加法的十进制调整. '| g sm O
STC 置进位标志位. y O?52YO
CLC 清进位标志位. *Ja,3Q q
CMC 进位标志取反. J~rjI 24
STD 置方向标志位. .2 ST Bh.;
CLD 清方向标志位. G X>T~i\f8
STI 置中断允许位. t M{U6 k
CLI 清中断允许位. z`rW2UO#a`
JO 溢出转移. PW -s F
JP/JPE 奇偶性为偶数时转移. ,,V uv n
JS 符号位为 "1" 时转移. E J Ta ~
3>循环控制指令(短转移) aDX 4 }`u
LOOP CX不为零时循环. I, ?!N zB
LOOPE/LOOPZ CX不为零且标志Z=1时循环. ; 5!8LmZ0#
XADD 先交换再累加.( 结果在第一个操作数里 ) PK +sGV
汇编语言指令集合 吐血整理

RET(return)
5.中断
INT(interrupt)指令
IRET(interrupt return)
INTO(interrupt if overflow)
六、处理机控制指令
1.标志处理指令
CLC(Clear carry)
CMC(Complement carry)
STC(Set carry)
CLD(Clear direction)
串比较指令
SCASB(Scan string of byte)
串搜索指令
SCASW(Scan string of word)
串搜索指令
STOSB(Store string of byte)
存串指令
STOSW(Store string of word)
存串指令
LODSB(Load string of byte)
ES(Extra Segment):附加段寄存器。
第一部分:指令助记符: 一、数据传送指令
1.通用数据传送指令 MOV(Move) PUSH(Push onto the stack) POP(Pop from the stack) XCHG(Exchange)
2.累加器专用传送指令 IN(Input) OUT(Output) XLAT(Translate)
REPE(Repeat when empty) 若(CX)=0,则退出,否则 CX=CX+1;
REPZ(Repeat when flag )
若 ZF=0,则退出,否则 CX=CX+1;
REPC(Repeat when carry flag)
REPNE(Repeat when not empty)
REPNZ(Repeat when not zero flag)
8086汇编指令表

8086汇编指令表Reg ←mem标志位 DS ←(SRC+2) LSS 同LDS 不影响 指针送寄存器和SS LES 同LDS 不影响 指针送寄存器和ES LFS 同LDS 不影响 指针送寄存器和FS LGS 同LDS 不影响 指针送寄存器和GSLEA LEA r16,m 不影响 标志位 将源操作数的有效地址送r16 LEA SI,[BX] LEA r32,m 将源操作数的有效地址送r32 LEA STRING LOCK LOCK 不影响 总线锁定LOCK LODS LODS mem LODSB/W 不影响 标志位 装入串:AL/AX ←(DS:SI) SI ←(SI)(+/-)1LOOPLOOP rel8不影响 CX ←(CX)-1---(CX)≠0,则循环 LOOPELOOPZLOOPE rel8不影响 标志位 CX ←(CX)-1(CX)≠0且ZF=1,则循环 LOOPNELOOPNZ LOOPNE rel8不影响 标志位 CX ←(CX)-1(CX)≠0且ZF=0,则循环MOVMOV DST ,SRCDST ≠CS 、IP 和imm不影响 标志位MOV[9AF0H],AL MOVSMOVS mem, mem MOVSB/W 不影响 标志位字符串传送 ES:DI ←(DS:SI) SI ←(SI)(+/-)1 DI ←(DI)(+/-)1MOVS ES:BYTE PTR[DI], DS:[SI] MUL MUL r/m8 设置CF OFS Z A P 无法预测 无符号乘法:AX ←AL*r/m8 MUL CL MUL r/m16 无符号乘法:DX:AX ←AX*r/m16 MUL CX NEG NEG reg/mem CF OF SF ZF AF PF 求补:取反加一 0-(DST) NEG CL NOP NOP不影响 空操作 NOP NOT NOT reg/mem 不影响 按位取反 NOT CL OR 同ANDPF SF ZF CF=OF=0 逻辑或OR AL,0FH (不变\置1)OUT OUT imm8,AL/AX/EAX 不影响 标志位 将AL/AX/EAX 输出到imm8指定端口 OUT 0FFH,AL OUT DX,AL/AX/EAX 将AL/AX/EAX 输出到DX 指定的端口 OUT DX,AL POP POP DSTDST!=imm & CS 不影响 标志位 DST ←((SP)+1,(SP)) SP ←(SP)+2POP WORD Ptr [87EAH] POPF POPF设置所有标志位 从堆栈中弹出16位标志寄存器POPF PUSHPUSH SRC8086 SRC!=imm不影响 标志位 SP<--(SP)-2((SP)+1,(SP))←(SRC) [SP 循环] PUSH WORD Ptr [87EAH] PUSHF PUSHF 不影响 压栈16位标志寄存器 PUSHF RCL 同SHL 同ROL 带进位循环左移 RCL AL ,1 RCR 同SHL 同ROL带进位循环右移RCR AL ,1 ROL同SHL移一位后符号位改变则OF=1 循环左移:ROL AL ,1ROR 同SHL 同ROL循环右移:ROR AL,1REP REP String operation 不影响标志位CX=0则终止---CX←(CX)-1---串操作---SI/DI增量REPZ REPE REPE String operationAF CF OFPF SF ZFCX=0||ZF=0则终止---CX←(CX)-1---串比较---SI/DI增量REPNZ REPNE REPNE String operationAF CF OFPF SF ZFCX=0||ZF=1则终止--- CX←(CX)-1---串比较---SI/DI增量RET RET 恢复压栈标志位POP IP[CS]子过程返回(Near)/(Far) RET RET imm16 子过程返回后SP←(SP)+imm16 RET 08SAHF SAHF SF ZF AF PF CF (SF:ZF:0:AF:0:PF:1:CF)←AH SAHFSAL 同SHL 移入CFOF PF SF ZF算术左移:[所有移位]如果操作数符号位改变,则OF=1(CL≠1则OF无定义)SAL AL,1SAR 同SHL 移入CFOF PF SF ZF 算术右移SAR AL,1SHL SHL reg/mem, 1SHL reg/mem, CL移入CFOF PF SF ZF 逻辑左移SHL AL,1SHL AL,CLSHR 同SHL 移入CFOF PF SF ZF 逻辑右移SHR AL,1SBB 同SUB AF CF OFSF PF ZF带借位减法(CF)DST←(DST)-(SRC)-(CF)SCAS SCAS memSCASB/WOF SF ZFAF PF CF扫描字符串(ES:DI)-(AL/AX)DI←(DI)(+/-)1STC STC CF=1 进位标志CF置1 STC STD Std DF=1 方向标志DF置1(地址减量) STD STI STI IF=1 中断标志IF置1(开中断) STISTOS STOS memSTOSB不影响标志位存入串(ES:DI)←(AL/AX)DI←(DI)(+/-)1SUB SUB reg/mem, imm/regSUB reg, memAF CF OFSF PF ZF减法SUB BYTE Ptr[87EAH], 39TEST 同AND PF SF ZFCF=OF=0逻辑与测试,但是不改变目的操作数,只设置相关标志位TEST AL, 1FHWAIT WAIT 不影响等待,检查非屏蔽浮点异常WAITXCHG XCHG OPR1,OPR2reg-reg\reg-mem不影响标志位目的操作数和源操作数的值交换操作数不允许为段寄存器XCHG AX,BXXLAT XLAT [TABLE] 不影响标志位LEA BX, TABLE;表首址给BXMOV AL, 4;待转换内容到ALAL←((BX)+(AL))XLATXOR 同AND PF SF ZFCF=OF=0逻辑异或XOR AL,0FH(不变\反)。
8086 8088 汇编 指令 手册

8086 8088 汇编指令手册一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令------------------------------------------计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。
可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。
它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。
在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8086汇编指令表
MOV MOV DST,SRC
DST≠CS、IP和imm
不影响
标志位
MOV
[9AF0H],AL
MOVS MOVS mem, mem
MOVSB/W
不影响
标志位
字符串传送ES:DI←(DS:SI)
SI←(SI)(+/-)1
DI←(DI)(+/-)1
MOVS
ES:BYTE
PTR[DI],
DS:[SI]
MUL MUL r/m8 设置CF OF
S Z A P无法预
测
无符号乘法:AX←AL*r/m8 MUL CL MUL r/m16 无符号乘法:DX:AX←AX*r/m16 MUL CX
NEG NEG reg/mem CF OF SF
ZF AF PF
求补:取反加一
0-(DST)
NEG CL
NOP NOP 不影响空操作NOP NOT NOT reg/mem 不影响按位取反NOT CL
OR 同AND PF SF ZF
CF=OF=0
逻辑或
OR AL,0FH
(不变\置1)
OUT OUT imm8,AL/AX/EAX 不影响
标志位
将AL/AX/EAX输出到imm8指定端
口
OUT 0FFH,AL OUT DX,AL/AX/EAX 将AL/AX/EAX输出到DX指定的端口OUT DX,AL
POP POP DST
DST!=imm & CS
不影响
标志位
DST←((SP)+1,(SP))
SP←(SP)+2
POP WORD
Ptr [87EAH]
POPF POPF 设置所有标志位从堆栈中弹出16位标志寄存器POPF
PUSH PUSH SRC
8086 SRC!=imm
不影响
标志位
SP<--(SP)-2
((SP)+1,(SP))←(SRC) [SP循
环]
PUSH WORD
Ptr [87EAH]
PUSHF PUSHF 不影响压栈16位标志寄存器PUSHF RCL 同SHL 同ROL
带进位循环左移
RCL AL,1
RCR 同SHL 同ROL
带进位循环右移
RCR AL,1
ROL 同SHL 移一位后符号位
改变则OF=1 循环左移:
ROL AL,1
ROR 同SHL 同ROL
循环右移:
ROR AL,1
REP REP String operation 不影响
标志位
CX=0则终止---CX←(CX)-1
---串操作---SI/DI增量
REPZ REPE REPE String operation
AF CF OF
PF SF ZF
CX=0||ZF=0则终止
---CX←(CX)-1
---串比较---SI/DI增量
REPNZ REPNE REPNE String operation
AF CF OF
PF SF ZF
CX=0||ZF=1则终止---
CX←(CX)-1
---串比较---SI/DI增量
RET RET 恢复压栈标志位
POP IP[CS]
子过程返回(Near)/(Far) RET RET imm16 子过程返回后SP←(SP)+imm16 RET 08
SAHF SAHF SF ZF AF PF
CF
(SF:ZF:0:AF:0:PF:1:CF)←AH SAHF
SAL 同SHL 移入CF
OF PF SF ZF
算术左移:[所有移位]如果操作数符号位
改变,则OF=1(CL≠1则OF无定义)
SAL AL,1
SAR 同SHL 移入CF
OF PF SF ZF 算术右移
SAR AL,1
SHL SHL reg/mem, 1
SHL reg/mem, CL
移入CF
OF PF SF ZF 逻辑左移
SHL AL,1
SHL AL,CL
SHR 同SHL 移入CF
OF PF SF ZF 逻辑右移
SHR AL,1
SBB 同SUB AF CF OF
SF PF ZF
带借位减法(CF)
DST←(DST)-(SRC)-(CF)
SCAS SCAS mem
SCASB/W
OF SF ZF
AF PF CF
扫描字符串(ES:DI)-(AL/AX)
DI←(DI)(+/-)1
STC STC CF=1 进位标志CF置1 STC STD Std DF=1 方向标志DF置1(地址减量) STD STI STI IF=1 中断标志IF置1(开中断) STI
STOS STOS mem
STOSB
不影响
标志位
存入串(ES:DI)←(AL/AX)
DI←(DI)(+/-)1
SUB SUB reg/mem, imm/reg
SUB reg, mem
AF CF OF
SF PF ZF
减法
SUB BYTE Ptr
[87EAH], 39
TEST 同AND PF SF ZF
CF=OF=0
逻辑与测试,但是不改变目的操作数,只
设置相关标志位
TEST AL, 1FH
WAIT WAIT 不影响等待,检查非屏蔽浮点异常WAIT
XCHG XCHG OPR1,OPR2
reg-reg\reg-mem
不影响
标志位
目的操作数和源操作数的值交换
操作数不允许为段寄存器
XCHG AX,BX
XLAT XLAT [TABLE] 不影响
标志位
LEA BX, TABLE;表首址给BX
MOV AL, 4;待转换内容到AL
AL←((BX)+(AL))
XLAT
XOR 同AND PF SF ZF
CF=OF=0
逻辑异或
XOR AL,0FH
(不变\反)。