第四章8086指令
8086指令集机器码

8086指令集机器码
2. ADD指令(将两个数相加并将结果存储在目标位置): - 寄存器相加: 机器码:01 D1(例如,将ECX寄存器的值与EDX寄存器的值相加) - 立即数与寄存器相加: 机器码:83 C0 05(例如,将EAX寄存器的值与立即数05相加)
3. JMP指令(无条件跳转到指定的地址): - 相对短跳转: 机器码:EB rel8(例如,EB 05,跳转到相对偏移量为05的地址) - 相对长跳转: 机器码:E9 rel16(例如,E9 1234,跳转到相对偏移量为1234的地址)
8086指令集机器码
8086指令集是Intel 8086处理器的指令集架构,它定义了一系列的机器码(二进制代码 )来执行不同的操作。下面是一些常见的8086指令及其对应的机器码示例:
1. MOV指令(将数据从一个位置移动到另一个位置): - 传送立即数到寄存器: 机器码:B8 imm16(例如,B8 1234) - 传送寄存器到寄存器: 机器码:89 C1(例如,将EAX寄存器的值传送到ECX寄存器) - 传送内存到寄存器: 机器码:8B 45 08(例如,将偏移地址为08的内存单元的值传送到EAX寄存器)
8086指令集机器码
4. INT指令(触发中断): - 软中断: 机器码:CD int8(例如,CD 1,触发21号软中断)
这是8086指令集中的示例,每个指令都有特定的操作码和操作数,机器码的格式和长度 也会有所不同。如果需要查找特定指令的机器码,可以参考8086处理器的文档或相关资料。
8086算术、逻辑运算及移位指令

8086算术、逻辑运算及移位指令8086是一种基于x86架构的微处理器,具有广泛应用的能力。
它支持多种算术、逻辑运算和移位指令,这些指令为编程人员提供了强大的工具来处理数据和操纵位级操作。
算术指令是8086中非常重要的一部分。
它们允许我们对数据执行各种加减乘除运算。
例如,ADD指令用于对两个数进行加法运算,这通常用于求和操作。
而SUB指令则用于执行减法运算,可用于计算差值。
MUL和DIV指令则用于执行乘法和除法操作,它们对于处理需要大量数值计算的应用程序非常有用。
逻辑运算指令也是8086中的重要组成部分。
它们用于执行与、或、非和异或等逻辑运算。
AND指令用于执行位级与运算,可以对数据的每个位进行逻辑与操作。
OR指令执行逻辑或运算,可以通过将各个位进行逻辑或操作来组合数据。
NOT指令用于执行位级非运算,将数据的每个位取反。
XOR指令执行异或运算,可以对数据的位进行逻辑异或操作。
这些逻辑运算指令非常灵活,可用于编写各种数据处理和逻辑判断的算法。
移位指令允许我们在数据的二进制位级上进行操作。
8086提供了逻辑左移、逻辑右移、算术左移和算术右移指令。
逻辑左移指令将数据在二进制位级上向左移动,相当于乘以2。
逻辑右移指令将数据在二进制位级上向右移动,相当于除以2。
算术左移和算术右移指令与逻辑移位指令类似,但在进行移位时保留了最高位的符号位,以保持有符号整数的正负性。
这些运算和移位指令在编程中起着至关重要的作用。
通过巧妙地组合使用这些指令,我们可以实现各种复杂的计算和逻辑操作。
例如,我们可以使用算术和移位指令来实现高效的乘法和除法算法,减少计算时间和资源消耗。
我们还可以使用逻辑指令来处理数据的位级运算,例如检查某一位是否为1、设置某一位为1或将某一位清零。
为了更好地理解这些指令的功能和用法,编程人员需要深入学习和实践。
通过掌握8086的算术、逻辑和移位指令,我们可以编写更高效和功能强大的程序,提高计算机应用的性能和效率。
48086CPU指令系统

XCHG DS,ES XCHG AX,DS XCHG DS,[ BX ] • 不能使用双存储器 XCHG [ BX ],[ SI ] • 不能使用立即数 XCHG AX,2000H XCHG 20H,BL
《例》用 MOV、PUSH,POP、XCHG 指令 完成两寄存器AX、BX 中数据的交换
• 指令格式
•
指令功能
OPR1、OPR2 两个操作数间交换数据
数据传送类指令
XCHG指令的应用范围
• 通用寄存器与通用寄存器间交换数据
XCHG AX,BX XCHG DL,CH • 通用寄存器与存储器间交换数据 XCHG AX,[ BX ] XCHG [ SI ],AL
数据传送类指令
XCHG指令的 禁用情况
通用传送指令 PUSH、POP 中 src、dst 操作数的使用
• 为通用寄存器、段寄存器操作数
PUSH AX、PUSH ES POP DS、 POP BX • 为存储器操作数 PUSH [ 2000H ]、PUSH [ BX ] POP [ BX ]、 POP [ 1000H ]
通用传送指令PUSH、POP中 src、dst 操作数的禁用
数据传送类指令
指令 LEA 与 LDS,LES 的区别
• LEA src
scr 表示存储器地址本身
• LDS r,src
LES r,src src 表示存储器地址中的值
地址传送指令的比较
已知:DS=09A0H,BX= 0048H
LEA DI,[BX] → 执行后:DI=0048H 等价于 MOV DI,OFFSET [BX] LDS DI,[BX] → 执行后:DI=003EH DS=0816H LES DI,[BX] → 执行后:DI=003EH ES=0816H Memory
第4章指令系统层习题参考解答-汇编语言与计算机组成原理 答案

1.什么是“程序可见”的寄存器?程序可见寄存器是指在用户程序中用到的寄存器,它们由指令来指定。
2. 80x86微处理器的基本结构寄存器组包括那些寄存器?各有何用途?基本结构寄存器组按用途分为通用寄存器、专用寄存器和段寄存器3类。
通用寄存器存放操作数或用作地址指针;专用寄存器有EIP和EFLAGS,分别存放将要执行的下一条指令的偏移地址和条件码标志、控制标志和系统标志;段寄存器存放段基址或段选择子。
3.80x86微处理器标志寄存器中各标志位有什么意义?常用的7位:CF进位标志: 在进行算术运算时,如最高位(对字操作是第15位,对字节操作是第7位)产生进位或借位时,则CF置1;否则置0。
在移位类指令中,CF用来存放移出的代码(0或1)。
PF奇偶标志: 为机器中传送信息时可能产生的代码出错情况提供检验条件。
当操作结果的最低位字节中1的个数为偶数时置1,否则置0。
AF辅助进位标志: 在进行算术运算时,如低字节中低4位(第3位向第4位)产生进位或借位时,则AF置1;否则AF置0。
ZF零标志:如指令执行结果各位全为0时,则ZF置1;否则ZF置0。
SF符号标志:其值等于运算结果的最高位。
如果把指令执行结果看作带符号数,就是结果为负,SF置1;结果为正,SF置0。
OF溢出标志: 将参加算术运算的数看作带符号数,如运算结果超出补码表示数的范围N,即溢出时,则OF置1;否则OF置0。
DF方向标志: 用于串处理指令中控制处理信息的方向。
当DF位为1时,每次操作后使变址寄存器SI和DI减小;当DF位为0时,则使SI和DI增大,使串处理从低地址向高地址方向处理。
4.画出示意图,简述实模式下存储器寻址的过程。
20位物理地址如下计算(CPU中自动完成):10H×段基址+偏移地址=物理地址5. 画出示意图,简述保护模式下(无分页机制)存储器寻址的过程。
采用对用户程序透明的机制由选择子从描述子表中选择相应的描述子,得到欲访问段的段基址、段限等有关信息,再根据偏移地址访问目标存储单元。
8086指令系统总结

8086指令系统总结8086是一种x86架构的微处理器,由Intel公司于1978年推出。
它是16位的,拥有20位的物理寻址能力,可以访问1MB的内存空间。
8086指令系统是其所支持的一系列指令集合,下面将对8086指令系统进行详细总结。
数据传输指令是8086指令系统中的基础指令之一,用于将数据从一个位置传输到另一个位置。
其中包括mov指令、xchg指令、push指令和pop指令等。
mov指令用于将数据从一个存储位置复制到另一个存储位置;xchg指令用于交换两个存储位置中的数据;push指令用于将数据压入栈顶;pop指令用于将栈顶的数据弹出。
算术运算指令是用于进行各种算术运算的指令。
8086支持包括加法、减法、乘法和除法等多种算术运算指令。
例如,add指令用于将两个操作数相加,sub指令用于将第二个操作数从第一个操作数中减去,mul指令用于将两个操作数相乘,div指令用于将第一个操作数除以第一个操作数,并将结果保存在指定的寄存器中。
逻辑运算指令用于进行逻辑运算,包括与、或、非、异或等运算。
例如,and指令用于对两个操作数进行按位与运算,or指令用于对两个操作数进行按位或运算,not指令用于对一个操作数进行按位非运算,xor指令用于对两个操作数进行按位异或运算。
控制转移指令用于控制程序的执行流程。
包括无条件转移指令、条件转移指令和循环指令。
无条件转移指令用于无条件地跳转到指定的地址,例如jmp指令;条件转移指令用于根据一些条件是否成立来进行跳转,例如je指令(跳转到指定地址,如果上一次比较操作相等);循环指令用于循环执行指定的指令块,例如loop指令。
I/O指令用于进行输入输出操作,包括从外部设备读取数据和将数据写入外部设备。
例如,in指令用于将输入端口的数据读取到指定的寄存器中,out指令用于将指定的寄存器中的数据写入到输出端口。
此外,8086还支持一些特殊的指令,如访问标志寄存器的指令,控制指令(如hlt指令、nop指令)和字符串指令(如movsb指令、cmpsb指令)等。
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
汇编第四章 习题及参考答案

第四章习题及参考答案1. 在8086CPU中,如果SS的内容设置为1A4BH,堆栈的长度为100H字节,问:SP寄存器的初始化值为多少?SP初始指向哪个主存物理地址?参考答案:SP寄存器的初始化值为:100HSP初始指向的主存物理地址是:1A5B0H2.分别指出下列指令源操作数与目的操作数的寻址方式:(1)MOV ES, AX(2)ADD DS:[12H],AL(3)SUB BX,1200H(4)SHR AX,1(5)AND -28H[BP][DI], AX(6)MOV CX,LAB1[BX](7)SBB AX, [BX](8) OR DX,-360H[SI](9) ADC VAR1,CX(10) XOR [DI],AX参考答案:(1)寄存器,寄存器(2)直接, 寄存器(3)寄存器,立即(4)寄存器,立即(5)基址变址,寄存器(6)寄存器,相对(7)寄存器,寄存器间接(8)寄存器,相对(9)直接,寄存器(10)寄存器间接,寄存器3.指出下列指令的语法是否错误,若错误请改正。
(1)MOV DS, 1234H(2)ADD AH,AL(3)SUB CS,AX(4)MOV BX,[BX][SI](5)ADC VAR1,[BP][DI](6) SBB [BX][BP],AX(7)PUSH 5678H(8)SHL [BP][SI],CL(9)ROR AX,2(10)NEG AX,BX(11)LEA CS,AX(12)MOV AL,BX(13)ADD DS:200H,AX(14)AND [BX][BP],AH(15)OR BH,-16H[BP](16)CLC AX(17)MUL AX,BX(18)DIV 12H参考答案:(1) 错误,立即数不能直接传送到段寄存器中(2) 正确(3) 错误,不能对CS直接操作(4) 正确(5) 错误,两个操作数不能同时都在存储器中(6) 错误, 基址变址寻址方式中不能两个寄存器都是基址寄存器(7) 错误,立即数不能作为源操作数直接压入堆栈(8) 错误,目的操作数没有明确指明是字还是字节(9) 错误,移位次数大于1时,需将其提前存入CL中(10) 错误,操作数个数错误(11) 错误,目的操作数只能是16位通用寄存器(12) 错误, 操作数位数不一致(13) 正确(14) 错误, 基址变址寻址方式中不能两个寄存器都是基址寄存器(15) 正确(16) 错误,操作数个数错误(17) 错误,操作数个数错误(18) 错误,源操作数不能是立即数4. MOV BX, 2345HMOV CX, 2HCLROL BX,0FFHAND BX,CMP BX,045H执行上述程序段后,(BX)= 14H , ZF= 0 . 5. XOR AX, AX5HMOV AL,9HMOV BL,BLADD AL,AAA执行上述程序段后,(AX)= 104H , CF= 1 .6. 假设(DS)=1234H,(SI)=124H,(12464)=30ABH,(12484H)=464H,有以下程序段:[SI]LEA SI,[SI]MOV AX,1200HMOV [SI+22H],[SI+20H]LDS SI,[SI]ADD AX,执行上述程序段后,(AX)= 6156H , (SI)= 464H .7. MOV AX, 0EF23H0B5A7HMOV BX,INC AXNEG AXDEC BXNEG BX执行上述程序段后,(AX)= 10DCH ,(BX)= 4A5AH .。
8086CPU指令和伪指令(中英文全解)

8086CPU指令和寄存器英文全称。
一、数据传送指令比如,mov(move)、push、pop、pushf(push flags)、popf(pop flags)、xchg(exchange)等都是数据传送指令,这些指令实现寄存器和内存、寄存器和寄存器之间的单个数据传送。
二、算术运算指令比如,add、sub(substract)、adc(add with carry)、sbb(substract with borrow)、inc (increase)、dec(decrease)、cmp(compare)、imul(integer multiplication)、idiv (integer divide)、aaa(ASCII add with adjust)等都是算术运算指令,这些指令实现寄存器和内存中的数据运算。
它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位。
三、逻辑指令比如,and、or、not、xor(exclusive or)、test、shl(shift logic left)、shr(shift logic right)、sal(shift arithmetic left)、sar(shift arithmetic right)、rol(rotate left)、ror(rotate right)、rcl(rotate left through carry)、rcr(rotate right through carry)等都是逻辑指令。
除了not 指令外,它们的执行结果都影响标志寄存器的相关标志位。
四、转移指令可以修改IP,或同时修改CS和IP的指令统称为转移指令。
转移指令分为一下几类。
(1)无条件转移指令,比如,jmp(jump);(2)条件转移指令,比如,jcxz(jump if CX is zero)、je(jump if equal)、jb(jump if below)、ja(jump if above)、jnb(jump if not below)、jna(jump if not above)等;(3)循环指令,比如,loop;(4)过程,比如,call、ret(return)、retf(return far);(5)中断,比如,int(interrupt)、iret(interrupt return)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1) PUSH 5588H
2) MOV 数;
错误,操作数不能用立即数;
错误,MOV指令不能对段寄存器直接传送立即
DS, 1720H
3) ADD AX, CL 错误,寄存器长度不匹配;
4) AND AX,[DX] 错误,DX不用于存储器寻址。
3.解:AX*5 = AX*4+AX MOV BX, AX MOV CL, 2 SAL AX, CL ADD AX, BX ADD AX, 14 SAR AX, 1
答 : 8086 CPU包含AX、BX、CX、DX、SI、DI、SP、BP共8个通用寄 存器。其中AX主要用在字的乘、除法,输入/输出指令中;BX主要在寄 存器间接寻址和XLAT指令中作基址寄存器使用;CX主要在串操作指令和 LOOP指令中作计数器使用;DX主要在字的乘除法指令和输入/输出指令 中使用;SI主要在字符串操作指令中作源变址寄存器使用;DI主要在字 符串操作指令中作目的变址寄存器使用;SP主要在堆栈操作中作堆栈指 针使用;BP主要在寄存器间接寻址中作基址指针使用 。
3.8086 CPU的标志寄存器有几个状态标志位?几个控制标志位?它们各 自的含义和作用是什么? 答:8086 CPU的标志寄存器有6个状态标志位,有3个控制标志位。 其中CF进位标志位主要用来反映运算结果是否产生进位或借位,如果运 算结果的最高位向前产生了一个进位(加法)或借位(减法),则其值 为1,否则其值为0;PF奇偶标志位用于反映运算结果中低8位含有―1‖的 个数的奇偶性,如果―1‖的个数为偶数,则PF的值为1,否则为0;AF辅助 进位标志位表示加法或减法运算结果中D3位向D4位产生进位或借位的情 况,有进位(借位)时AF=1;无进位(借位)时AF=0;ZF零标志位用 来反映运算结果是否为0,如果运算结果为0,则其值为1,否则其值为0; SF用来反映运算结果的符号位,当运算结果为负数时,SF的值为1,否 则其值为0;OF溢出标志位用于反映带符号数运算所得结果是否溢出, 如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值 被置为是否响应CPU外部的可屏蔽中断发出的 中断请求,当IF=1时,CPU响应;当IF=0时,CPU不响应。DF方向标志 位用来控制串操作指令中地址指针的变化方向。在串操作指令中,当DF =0时,地址指针为自动增量,即由低地址向高地址变化;当DF=1时, 地址指针自动减量,即由高地址向低地址变化。TF追踪标志位被置为1时, CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。
PF——奇偶标志位,PF=1(低八位中含有偶数个1时),PF=0(奇数个)
(AL)=0D2H,(BL)= 86H,CF= 0,OF=0,PF= 1。
2. 解 : 存储器某单元的地址表示为2314H:4132H,则它的偏移地址= (4132),物理地址=(27272H)。 三、解答题 1. 解:(SP)=0060H – 5*2 =0060H -000AH = 0056H 2.解:
6.下列哪个寄存器是属于指针寄存器()
A.SI B.DX C.SP D.ES
7.指令JMP FAR PTR DONE属于( ) A.段内转移直接寻址 C.段间转移直接寻址 8.下列叙述正确的是( ) A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用 CMPS指令 B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用 CMP指令 B.段内转移间接寻址 D.段
3) ADD AX, CL
4) AND AX,[DX] 3.试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/ 2的功 能。
4.假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H, (BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址为0050H, 试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?
THANKS
第六组:杨欣悦 赵敏敏 张悦彬
3.8086/8088系统执行传送指令MOV时()
A.不影响标志位
C.影响SF符号标志
B.影响DF方向标志
D.影响CF进位标志
4.关于8086/8088微机系列,下列说法哪个是正确的() A.一个存储单元由16个二进制位组成,简称字 B.当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C.在内存空间中,可以无限分配段,且段的大小不受限制。 D.段与段之间可以邻接,也可以重叠。 5.下列标志位中,可以用来判断计算结果正负的是() A.PF B.SF C.DF D.OF
PA=20110H PA=20150H
(11)MOV AX, [BX][SI] BX和SI寄存器基址变址寻址方式; PA=201A0H (12)MOV AX, 式; PA=201F0H VAL[BX][SI] BX和SI寄存器相对基址变址寻址方
1. 8086 CPU共有哪些16位寄存器?其中哪些16位寄存器可分为二个8位 寄存器来使用? 答 : 8086 CPU共有AX、BX、CX、DX、SI、DI、SP、BP、IP、 FLAGS、CS、DS、ES、SS共14个16位的寄存器。其中AX、BX、CX、 DX可分为二个8位寄存器来使用。 2. 简述8086 CPU各通用寄存器的主要功能?
10.条件转移指令JNE的测试条件为( ) A.ZF=0 B.CF=0 C.ZF=1 D.CF=1
11.某存储单元的物理地址是12345H,可以作为它的段地址有() A.2345H B.12345H
C.12340H
D.1234H
1.MOV AL,4CH MOV BL,86H ADD AL,BL 执行上述程序片段后,(AL)=?,(BL)= ?,CF= ?,OF=?,PF= ?。
2.存储器某单元的地址表示为2314H:4132H,则它的偏移地址= ? ,物 理地址=?。
1. 假设当前(SP)=0060H,连续执行5条PUSH指令后,(SP)=? 2.每小题列出了一条指令,判断该指令有无语法错误,如果存在语法错误, 请指出具体的错误原因。 1) PUSH 5588H 2) MOV DS, 1720H
C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用 JGE/JNL指令
D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用 JAE/JNB指令
9.在下列指令的表示中,不正确的是( ) A.MOV AL,[BX+SI] C.DEC [BX] B.JMP SHORT DONI D.MUL CL
1) MOV AX, 0ABH
(3) MOV AX, [100H] (5) MOV AX, [BX] (7) MOV AX, [BP]
(2) MOV AX, BX
(4) MOV AX, VAL (6) MOV AX, ES:[BX] (8) MOV AX, [SI] (10) MOV AX, VAL[BX]
(9) MOV AX, [BX+10]
(11) MOV AX, [BX][SI]
(12) MOV AX, VAL[BX][SI]
一、选择题 1.B 10.A 2.A 11.D 3.A 4.D 5.B 6.C 7.C 8.C 9.C
二、填空题 1.解: 可以参考书上P40: CF——进位标志位,CF=1(最高位发生进位或借位) OF——溢出标志位,OF=1(溢出),OF=0(未溢出)
4.答: (1)MOV AX, 0ABH 立即方式; (2)MOV AX, BX 寄存器寻址方式; (3)MOV AX, [100H] 直接寻址方式; (4)MOV AX, VAL 直接寻址方式; 操作数在本条指令中 操作数为 (BX)=0100H PA=20100H PA=20050H PA=20100H
(5)MOV AX, [BX] BX寄存器间接寻址方式;
(6)MOV AX, ES:[BX] 附加段BX寄存器间接寻址方式; PA=21100H
(7)MOV AX, [BP] BP寄存器间接寻址方式;
(8)MOV AX, [SI] SI寄存器间接寻址方式;
PA=15010H
PA=200A0H
(9)MOV AX, [BX+10] BX寄存器相对寻址方式; (10)MOV AX, VAL[BX] BX寄存器相对寻址方式;
-------复习题
1.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式() A.寄存器寻址 C.变址寻址 B.相对基址变址寻址 D.基址变址寻址
2.若AX= - 15要得到AX=15应执行的指令是() A.NEG AX C.INC AX B.NOT AX D.DEC AX