022数据传送与算术运算指令
04 8088(8086)的指令系统

INC OPRD
操作数:通用寄存器、存储器 (不能是段寄存器或立即数) 执行的操作:OPRD OPRD + 1
功能: 用于在循环中修改地址指针及循环次数等。
注:该指令影响标志位
例: INC BX INC byte ptr [SI]
1. 先将SP所指单元内容 送至AL, 然后 SP+1SP ;
2. 再SP所指单元内容送 至AH, 然后 SP+1 SP
例:MOV AX,5678H POP AX
(3) 交换指令 XCHG OPRD1, OPRD2
在寄存器间或寄存器与存储器间交换信息(不允许使用段寄存器)。
源操作数: 寄存器、存储器 目的操作数:寄存器、存储器 执行的操作:( OPRD1) (OPRD2 )
DS=1000h
buffer 10100h 00 02 00 20
0100h BX
(2) LDS 把源操作数指定的内存的4个相继字节的内容送至指定寄存器及DS中
LDS REG, SRC
(REG) (SRC)
(DS) (SRC+2)
目的操作数
源操作数
(16位通用寄存器) (内存操作数)
• 该指令完成一个32位地址指针的传送; • 该指令通常指定 SI 作寄存器 REG。
• CPU内部寄存器之间的数据传送(除CS,IP外) MOV AL,BL MOV DX, DI MOV SI, BP MOV DS, BX MOV AX,DX
• 立即数传送到CPU内部通用寄存器组(AX,BX,CX,DX,BP,SP,DI,SI)
MOV CL, 4 MOV DX, 03FFH MOV DI, 04BFH
DST+SRC+C
课件11-数据传送指令与算术运算指令

SP← (SP) –1
例 :设(SP)=62H,(62H)=70H,(61H)=30H,执行下述指 令:
POP DPH
;((SP))→DPH,(SP)-1→SP
POP DPL
;((SP))→DPL,(SP)-1→SP
结果:(DPTR)=7030H,(SP)=60H
退栈指令用于恢复CPU现场。 进栈指令用于保护CPU现场。
两 个 重 度 烧 伤的病 人,一 男一女 。后来 才知道 他们是 一对恋 人,正 确地说 是新婚 夫 妇 。 他 们 相好了 许多年 ,吃了 很多苦 ,好不 容易才 盼到大 喜的日 子。没 想到婚ห้องสมุดไป่ตู้礼 的 当 夜 , 一个恶 人点燃 了他家 的房檐 。火光 熊熊啊 ,把他 们俩都 烧得像 焦炭一
样 , 我 被 派 去护
➢ 直接地址指出的存储单元内部RAM的00~7FH和特殊功能 寄存器。
➢ 在间接寻址中,用R0或R1作地址指针,访问内部RAM的 00~0FFH这256个单元。
一般传送类指令
例:设内部RAM的30H单元内容为40H,40H单元内 容为10H,P1口作输入口,其输入的数据为 0CAH(11001010B),经下列程序执行后的结果是什 么?
MOVX MOVX MOVX MOVX
A,@Ri @Ri,A A,@DPTR @DPTR,A
在51系列单片机中能与外部存储器RAM进行数据传输 的只有累加器A。所有需要送入外部RAM的数据必需要通 过A送去,而所有要读入的外部RAM中的数据也必需通过 A读入。内部RAM间可以直接进行数据的传递,而外部则 不行,例如,要将外部RAM中某一单元(设为1000H单元 的数据)送入另一个单元(设为1001H单元),也必须先 将1000H单元中的内容读入A,然后再送到1001H单元中去 。在后两条指令中,地址是被直接放在DPTR中的。而前 两条指令,由于Ri(即R0或R1)只是一个8位的寄存器, 所以只提供低8位地址。因为有时扩展的外部RAM的数量 比较少,少于或等于256个,就只需要提供8位地址就够了 。使用时应当首先将要读或写的地址送入DPTR或Ri中, 然后再用读写命令。例如将外部RAM中1000H单元中的内 容送入外部RAM中1001H单元中。
计算机原理指令

计算机原理指令
计算机的指令是一条计算机硬件能够直接执行的基本操作。
计算机原理指令可以分为多种类型,包括数据传输指令、算术运算指令、逻辑运算指令、控制转移指令等。
数据传输指令是将数据从一个地方传送到另一个地方的指令,包括从内存到寄存器的传输、从输入设备到内存的传输、从输出设备到内存的传输等。
算术运算指令是对数据进行基本的算术运算的指令,包括加法、减法、乘法、除法等。
逻辑运算指令是对数据进行逻辑运算的指令,包括与、或、非、异或等。
控制转移指令用于改变程序的执行顺序,包括无条件转移指令和条件转移指令。
无条件转移指令可以直接跳转到指定的地址执行,而条件转移指令则根据条件是否满足来决定是否跳转。
每个指令都是由一系列二进制代码表示的,计算机通过解码和执行这些指令来完成各种操作。
指令的执行涉及到许多计算机的基本组成部分,包括中央处理器、寄存器、运算器、控制器等。
指令的执行过程通常包括取指令、解码指令、执行指令等几个步骤。
取指令是从内存中读取指令的过程,解码指令是将指令翻译成计算机能够理解的格式,执行指令是根据指令的操作码
执行相应的操作。
计算机的指令集架构(Instruction Set Architecture,ISA)是指计算机体系结构中定义的一组与计算机硬件操作直接相关的机器语言指令。
常见的指令集架构有x86、ARM、MIPS等。
指令的设计和优化是计算机体系结构和编程语言领域的重要研究方向。
合理设计和优化指令可以提高计算机的运行效率和性能。
指令集架构的选择也会影响计算机系统的性能和能耗等方面。
汇编语言程序设计基本命令

汇编语言程序设计基本命令汇编语言是一种底层的编程语言,直接操作计算机硬件,其指令由一系列的机器码组成。
在汇编语言程序设计中,我们需要了解一些基本的命令,包括数据传送指令、算术运算指令、控制转移指令等,下面就对这些命令做一详细的介绍。
1.数据传送指令在汇编语言中,数据传送指令用来将数据从一个位置复制到另一个位置,常用的数据传送指令有MOV、LEA和XCHG。
-MOV指令:将源操作数的值复制给目标操作数,格式为MOV目标操作数,源操作数。
-LEA指令:用来将有效地址(即内存中的地址)传送给寄存器,格式为LEA目标操作数,源操作数。
-XCHG指令:交换两个操作数的值,格式为XCHG目标操作数,源操作数。
2.算术运算指令在汇编语言中,我们可以使用一系列算术运算指令来对数据进行运算和处理,常见的算术运算指令有ADD、SUB、MUL和DIV等。
-ADD指令:用于进行加法运算,格式为ADD目标操作数,源操作数。
-SUB指令:用于进行减法运算,格式为SUB目标操作数,源操作数。
-MUL指令:用于进行乘法运算,格式为MUL目标操作数,源操作数。
-DIV指令:用于进行除法运算,格式为DIV目标操作数,源操作数。
控制转移指令用于改变程序的执行流程,常见的控制转移指令有JMP、JZ、JE、JNE等。
-JMP指令:用于无条件地跳转到目标地址继续执行,格式为JMP目标地址。
-JZ指令:用于当结果为零时跳转到目标地址继续执行,格式为JZ目标地址。
-JE指令:用于当结果相等时跳转到目标地址继续执行,格式为JE目标地址。
-JNE指令:用于当结果不相等时跳转到目标地址继续执行,格式为JNE目标地址。
4.逻辑运算指令逻辑运算指令用于对数据进行逻辑运算,常见的逻辑运算指令有AND、OR、XOR和NOT等。
-AND指令:对两个操作数的对应位进行与运算,格式为AND目标操作数,源操作数。
-OR指令:对两个操作数的对应位进行或运算,格式为OR目标操作数,源操作数。
2.2指令系统数据传送类

注意
1)
2) 3)
目的操作数16位通用寄存器(REG)不能使用段寄存器; 源操作数SRC只能使用存储器寻址方式来确定地址; 地址传送指令不影响标志寄存器的值
● 4. 标志位传送指令
(1) LAHF指令
●指令功能:把标志寄存器的低8位送入寄存器AH; ●指令格式: LAHF
数据传送指令小结
1. 双操作数不能同时为存储器寻址方式,二者位数必须一致。 2. 立即数不能为目标操作数。 3. 段基址寄存器只能用MOV、LDS、LES改变,其余指令均不 能对之操作。 4. CS不能为目标操作数。 5. 除POPF、SAHF外,所有数据传送指令均不影响标志寄存器。
DEC CX
;计数器减1
JNE NT ;CX-1不等0跳转
INT 20H ;返回dos
● 1.通用数据传送指令
堆栈方向:由高地址向低地址生长。
(2)堆栈操作指令
“后进先出”
●堆栈操作指令分为两类:进栈(压栈)指令PUSH和出栈指令POP
●压栈指令格式为: PUSH SRC;
执行的操作: SP←(SP)-2
XCHG AX,BX XCHG BL,(SI) XCHG DS,BX XCHG (BX),(DI) XCHG AX,BL XCHG (6788H),DX
● 2.累加器专用传送指令
(1)输入/输出指令
●指令功能:输入/输出指令用来完成I/O端口与累加器之间的数据传送;
●指令格式: IN AL,n IN AX,n
例:判断指令的对错
MOV AX,DS MOV 10H,[SI] MOV CS,AX MOV DS,2000H MOV (3567H),56H MOV AL,(4567H) MOV BP,(9886H) MOV (3000H),(BX) MOV BX,CL MOV SS,(5678H)
基本指令系统

14
三、地址传送指令
例:
T1 (DS):1000H
写出下列指令单独执行后的结果: 40 H 00 H 00 H 30 H
1、MOV BX, T1
; BX=( 0040H )
; BX=( 1000H ) ; BX=(0040H ) ; DS=(3000H )
2、MOV BX, OFFSET T1 ; BX=( 1000H ) 3、LEA BX, T1 4、LDS BX, T1
数据传送指令
算术运算指令
8086CPU 的指令系统
十进制算术调整指令 逻辑运算指令 移位指令 处理器控制指令
1
3.1数据传送指令
功能:把数据、地址或立即数传到寄存器或存储单元。
1 通用数据传送指令
2 堆栈指令
3 地址传送指令
4 标志寄存器传送指令 5 累加器专用传送指令 6、其它数据传送指令
4
一、通用传送指令——MOV
4)DST、SRC长度要一致。
MOV AL, BX ()
5) DST 不能是立即数 MOV 1000H, AX () 6)DST、SRC 不能同时为存储器寻址 MOV [1000H], [3000H] ()
7)MOV指令不影响标志位
8)MOV指令不破坏源操作数
5
一、通用传送指令——XCHG
MOV [2000H], CX ;寄存器内容送存储单元 MOV DS, [2000H] ;存储单元内容送段寄存器
3
一、通用传送指令——MOV
注: 1)DST 不能是 CS、IP。 MOV CS, BX () 2)DST、SRC 不能同时为段寄存器。 MOV DS, ES ()
汇编语言基本指令详解

汇编语言基本指令详解在计算机科学和计算机工程领域,汇编语言是一种计算机底层编程语言,用于直接控制计算机硬件。
它是机器语言的文本形式,使用符号和助记符来代表机器指令,相对于高级编程语言来说更加底层。
汇编语言基本指令是使用汇编语言进行编程时必不可少的内容。
下面将详细介绍汇编语言中常用的基本指令。
1. 数据传送指令数据传送指令用于在寄存器之间传递数据,常见的指令有MOV、ADD、SUB、MUL等。
MOV指令用于将数据从一个位置传送到另一个位置,格式为MOV 目标操作数, 源操作数。
例如,MOV AX, BX可以将BX的值传送给AX。
ADD指令用于将两个操作数相加,并将结果保存到目标操作数中。
格式为ADD 目标操作数, 源操作数。
例如,ADD AX, BX可以将AX与BX的值相加,并将结果保存在AX中。
SUB指令用于将源操作数的值从目标操作数中减去,并将结果保存到目标操作数中。
格式为SUB 目标操作数, 源操作数。
例如,SUB AX, BX可以将BX的值从AX中减去,并将结果保存在AX中。
MUL指令用于将两个操作数相乘,并将结果保存到目标操作数中。
格式为MUL 目标操作数, 源操作数。
例如,MUL AX, BX可以将AX与BX的值相乘,并将结果保存在AX中。
2. 算术逻辑指令算术逻辑指令用于进行各种算术和逻辑运算,例如加法、减法、乘法、除法、与、或、非等。
ADD指令在前面已经提到,用于将两个操作数相加。
SUB指令在前面已经提到,用于将源操作数的值从目标操作数中减去。
MUL指令在前面已经提到,用于将两个操作数相乘。
DIV指令用于将目标操作数除以源操作数,并将商保存到目标操作数,余数保存在DX中。
格式为DIV 操作数。
例如,DIV BX可以将AX的值除以BX,并将商保存在AX中,余数保存在DX中。
AND指令用于对两个操作数进行按位与运算,并将结果保存到目标操作数中。
格式为AND 目标操作数, 源操作数。
例如,AND AX,BX可以将AX与BX的值按位与,并将结果保存在AX中。
汇编指令大全

汇编指令大全1. 引言汇编语言是一种基于计算机硬件体系结构的低级语言。
它用于编写与硬件交互的程序,并且具有直接访问计算机底层硬件的能力。
汇编指令是汇编语言中的基本操作指令,用于执行各种计算机操作,如数据传输、算术运算和逻辑运算等。
本文将为您介绍一些常见的汇编指令。
2. 数据传输指令数据传输指令用于在寄存器之间或内存和寄存器之间传输数据。
2.1 MOV - 数据传送指令mov是最常见的数据传送指令之一。
它用于将数据从一个源操作数传送到一个目的操作数。
mov destination, source其中,destination是目的操作数,source是源操作数。
这两个操作数可以是寄存器、内存地址或立即数。
2.2 LEA - 加载有效地址指令lea指令用于加载一个有效地址到一个目的操作数。
lea destination, source其中,destination是目的操作数,通常为一个寄存器,source是一个内存地址。
3. 算术运算指令算术运算指令用于执行加法、减法、乘法和除法等算术运算。
3.1 ADD - 加法指令add指令用于将两个操作数相加,并将结果存储在目的操作数中。
add destination, source其中,destination是目的操作数,source是源操作数。
这两个操作数可以是寄存器或内存地址。
3.2 SUB - 减法指令sub指令用于将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。
sub destination, source其中,destination是目的操作数,source是源操作数。
这两个操作数可以是寄存器或内存地址。
3.3 MUL - 乘法指令mul指令用于将两个操作数相乘,并将结果存储在目的操作数中。
其中,destination是目的操作数,source是源操作数。
这两个操作数可以是寄存器或内存地址。
3.4 DIV - 除法指令div指令用于将目的操作数除以源操作数,并将商存储在目的操作数中,余数存储在另一个寄存器中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
传送类指令小结
1、通用数据传送指令
MOV
XCHG XLAT
2、堆栈操作指令
PUSH
POP
3、标志寄存器传送指令
LAHF SAHF
PUSHF
4、地址传送指令
LEA
LDS
LES
5、输入输出指令
IN
演示
例题1.19
第2章
输出指令OUT
OUT
➢ 将CPU内的AL/AX数据传送给外设
演示 OUT i8,AL ;字节输出:I/O端口←AL(i8直接寻址)
OUT DX,AL ;字节输出:I/O端口←AL(DX间接寻址)
OUT i8,AX ;字输出:I/O端口←AX(i8直接寻址)
OUT DX,AX ;字输出:I/O端口←AX(DX间接寻址)
SAHF
;FLAGS的低字节←AH
➢ SAHF 将 AH 寄 存 器 内 容 送FLAGS的低字节
➢ 用AH的第7/6/4/2/0位 相 应 设 置 SF/ZF/AF/ PF/CF标志
第2章
标志寄存器进出堆栈指令
PUSHF
;SP←SP-2
;SS:[SP]←FLAGS
➢ PUSHF指令将标志寄存 器的内容压入堆栈, 同时栈顶指针SP减2
MOV reg/mem;,s主eg存送(段)例寄题存1.器4
;段寄存器送寄存器或主存
第2章
MOV指令传送功能
立即数
存
通用寄存器
储
AX BX CX DX
器
BP SP SI DI
段寄存器 CS DS ES SS
说 明:
源操作数和目的操作数不允许同时为存储器
两个操作数之间类型要一致
操作数类型不能出现二意性,立即数送给存储器时一定 要指明数据类型(用强制类型说明ptr)
(BP()S+P4)
pop bx
pop ax ;③ mov ax,1000h
(SP)
push ax ;④
低
00 30 2020 2110 4040 3130
高
第2章
3. 标志寄存器传送指令
➢ 标志寄存器传送指令用来传送标志寄 存器FLAGS的内容,方便进行对各个 标志位的直接操作
➢ 有2对4条指令
LES r16,mem
;r16←mem,
;ES←mem+2
➢ LES指令将主存中mem 指 定 的 字 送 至 r16 , 并 将 mem 的 下 一 字 送 ES寄存器
注:将mem中的数作为指针
例题1.16
第2章
例1.17:地址指针传送
已知右图: 1) LDS SI,[1000H] 2) LES DI,[1000H+4] 执行后:
低8位传送:LAHF和SAHF 16位传送:PUSHF和POPF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 O DI T S Z A P C
第2章
标志低字节进出AH指令
LAHF
;AH←FLAGS的低字节
➢ LAHF指令将标志寄存器 的低字节送寄存器AH
➢ SF/ZF/AF/PF/CF 状态标 志 位 分 别 送 入 AH 的 第 7/6/4/2/0 位 , 而 AH 的 第5/3/1位任意
MOV 5, AH
立即数不能作为目的操作数
MOV [BX], 12H 操作数类型不确定
第2章
交换指令XCHG(exchange)
➢把两个地方的数据进行互换
XCHG reg, reg/mem ;reg reg/mem
XCHG
或: XCHG reg/mem, reg
➢ 寄存器与寄存器之间对换数据 例题1.6 ➢ 寄存器与存储器之间对换数据 例题1.7 ➢ 不能在存储器与存储器之间对换数据
第二章、指令系统
全面而准确地理解每条指令 的功能和应用,是编写汇编 语言程序的关键
第2章
高级程序到机器指令的转换
机器指令
汇编 汇编程序
汇编语言
高级语言
第2章
汇编语言指令格式
➢由4部分组成:
标号:指令助记符 目的操作数,源操作数 ;注释
标号表示该指令在主存中的逻辑地址 每个指令助记符就代表一种指令 目的和源操作数表示参与操作的对象 注释是对该指令或程序段功能的说明
位置 ➢ 除标志寄存器传送指令外,均不影响标志
位
➢ 指令如下(14条):
MOV XCHG XLAT PUSH POP LEA
PUSHF POPF LDS LES IN OUT
SAHF LAHF
第2章
1. 通用数据传送指令
➢提供方便灵活的通用传送操作 ➢有3条指令
MOV
MOV
XCHG
XLAT
XCHG
① 数据传送类指令 ② 算术运算类指令 ③ 位操作类指令 ④ 串操作类指令 ⑤ 控制转移类指令 ⑥ 处理机控制类指令
第2章
学习指令的注意事项
➢ 指令的功能——该指令能够实现何种操作。 通常指令助记符就是指令功能的英文单词或 其缩写形式
➢ 指令支持的寻址方式——该指令中的操作数 可以采用何种寻址方式
第2章
例:判断正误,并指出错误
MOV AX,BL
源操作数与目的操作数不匹配
MOV CS,AX
CS寄存器不能作为目的操作数
MOV [SI],[BX] 源操作数与目的操作数均为MEM单元 MOV AH,2589H 源操作数与目的操作数不匹配
MOV ES,DS MOV DS,3542H
段寄存器之间不能直接传送信息 不能直接将立即数送入段寄存器
(SI)=1000H (DS)=2000H (DI)=3000H (ES)=4000H
1000H
00 10 00 20 00 30 00 40
数据段
低地址 高地址
第2章
例1.18:LEA指令
LEA BX,VE MOV AX,[BX] MOV CX,2[BX] PUSH AX PUSH CX POP AX POP CX
如图,问两次AX、CX改变 的值分别是多少?
(BX)= VE
20 30 10 20 数据段
低地址 (AX) (CX) 高地址
(AX)=3020H (AX)=2010H
(CX)=2010H (CX)=3020H
第2章
5. 输入输出指令
➢ 8086/8088通过输入输出指令与外设进行数 据交换;呈现给程序员的外设是端口(Port) 即I/O地址
第2章
换码指令XLAT(translate)
XLAT
➢ 将BX指定的缓冲区中、AL指定的位移 处的一个字节数据取出赋给AL
XLAT
;al←ds:[bx+al] 例题1.8
➢ 换码指令执行前:
在主存建立一个字节量表格,内含要转换成的目的代码 表格首地址存放于BX,AL存放相对表格首地址的位移量
➢ 换码指令执行后:
POPF
;FLAGS←SS:[SP]
;SP←SP+2
➢ POPF指令将栈顶字单元 内容送标志寄存器,同 时栈顶指针SP加2
例题1.13
第2章
4. 地址传送指令
➢ 地址传送指令将存储器单元的逻辑 地址送至指定的寄存器
有效地址传送指令 LEA 指针传送指令 LDS和LES
➢ 注意不是获取存储器单元的内容
➢ 指令对标志的影响——该指令执行后是否对 各个标志位有影响,以及如何影响
➢ 其他方面——该指令其他需要特别注意的地 方,如指令执行时的约定设置、必须预置的 参数、隐含使用的寄存器等
第2章
一、数据传送类指令
➢ 数据传送是计算机中最基本、最重要的一 种操作
➢ 传送指令也是最常使用的一类指令 ➢ 传送指令把数据从一个位置传送到另一个
➢ 字量数据从栈顶压入和弹出时,都是低地址 字节送低字节,高地址字节送高字节
➢ 堆栈操作遵循先进后出原则,但可用存储器 寻址方式随机存取堆栈中的数据
➢ 堆栈常用来
临时存放数据 传递参数 保存和恢复寄存器
第例12.1章0: push ax
其中:ax=2107h
(SP)
低 (SP)
低
低
(SP) 07 21
将AL寄存器的内容转换为目标代码
第2章
2、堆栈操作指令
➢ 堆栈是一个“后进先出 FILO” ( 或 说 “ 先 进 后 出 FILO” ) 的 主 存 区 域 , 位于堆栈段中;SS段寄 存器记录其段地址
➢ 堆栈只有一个出口,即 当前栈顶;用堆栈指针 寄存器SP指定
➢ 栈顶是地址较小的一端 (低端),栈底不变
CS不能做目的操作数
⑤ 立即数不能直接送段寄存器
第2章
非法传送情况
➢两个操作数的类型不一致 示例
例如源操作数是字节,而目的操作 数是字;或相反
➢两个操作数不能都是存储器 示例
传送指令很灵活,但主存之间的直 接传送却不允许
➢段寄存器的操作有一些限制 示例
段寄存器属专用寄存器,对他们的 操作能力有限
➢ 8086/8088用于寻址外设端口的地址线为16 条,端口最多为216=65536(64K)个,端 口号为0000H~0FFFFH
➢ 每个端口用于传送一个字节或字的外设数据
第2章
输入输出寻址方式
➢ 8086/8088的端口有64K个,无需分段,设 计有两种寻址方式
❖ 直接寻址:只用于寻址00H~0FFH前256个端口, 操作数i8表示端口号
第2章
堆栈的操作
➢堆栈只有两种基本操作:进栈和出 栈,对应两条指令PUSH和POP
PUSH src
; W 进栈指令先 使堆栈指针SP减2, 然后把一个字操作 数存入堆栈顶部