(完整版)8086汇编语言速成秘籍

合集下载

(完整版)8086汇编经典例程,推荐文档

(完整版)8086汇编经典例程,推荐文档

sub bl,26 mov al,'a' add al,bl
MOV CX,00H WAIT1: LOOP WAIT1
;延时计数器 ;延时
DW 2 DUP (25*8,25*8,50*8) DW 12 DUP (25*8),100*8
jmp next40
DEC DX
next24: sub bl,52
==========================================
MAIN ENDP
MOV AX,[SI]
5. 编写一个数组排序(从小到大)的小程序,数组在程
序中定义,程序先将原数组显示一遍,然后排序,再
DISP PROC
将排好序的数组显示一遍。
PUSH SI
==========================================
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100 DW 2 DUP(50,50,25,25),100 DW 3 DUP(50,25,25),100
crlf proc push ax push dx
音演奏歌曲 ========================================== ;这是一个音乐程序,按大写字母“A”,唱乐曲“玛丽
ccc segment assume cs:ccc,ds:qqq
main proc far start: mov ax,qqq
mov ds,ax
next3:
jmp next10 cmp al,'a' jnae next4 cmp al,'z' ja next4 sub al,'a'

(完整word版)汇编语言指令集合-吐血整理,推荐文档

(完整word版)汇编语言指令集合-吐血整理,推荐文档

8086/8088指令系统记忆表数据寄存器分为:AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.BH&BL=BX(base):基址寄存器,常用于地址索引;CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.DH&DL=DX(data):数据寄存器,常用于数据传递。

他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。

这2组8位寄存器可以分别寻址,并单独使用。

另一组是指针寄存器和变址寄存器,包括:SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。

指令指针IP(Instruction Pointer)标志寄存器FR(Flag Register)OF(overflow flag)DF(direction flag)CF(carrier flag)PF(parity flag)AF(auxiliary flag)ZF(zero flag)SF(sign flag)IF(interrupt flag)TF(trap flag)段寄存器(Segment Register)为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。

8086汇编指令大全.

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指令系统及汇编语言

第三章  8086指令系统及汇编语言

例:已知:(DS)=2100H,(DI)=2000H 指令:MOV AX,[DI];(AX) ((DI)) 物理地址=(DS)×16 +(DI)
=2100H ×16 + 2000H =21000H+2000H =23000H 指令结果:将23000H单元内容送AL中,
将23001H单元内容送AH中。 指令:MOV AX,[DI] 为字操作(16位操作)
32000
AH AL
注意:程序(指令) 在代码段,要操作 的数据在堆栈段!
图3-4(B) 寄存器间接寻址
5、 寄存器相对寻址方式
例:MOV AX,[SI];SI中的内容为要取数的偏移 地址,假设在执行本条指令前SI=1000H,DS=2000H
其过程如图3-4(a)所示。
代码段
..
注意:程序(指令在 代码段),要操作的 数据在数据段!
操作码 数据段
DS 2000 + SI 1000
21000
.. .. ..
21000H X X 21001H Y Y
例:已知:(DS)=2100H,(DI)=2000H 指令: MOV AL,[DI] ;(AL) ((DI))
物理地址=(DS)×16+(DI) =2100H×16+2000H =21000H+2000H =23000H
指令结果:将23000H单元内容送AL中, 指令: MOV AL,[DI];字节操作(8位操作)
数据段
字寻址方式
AH=F5 AL=8A 字寻址方式
图3-3 直接寻址
3、寄存器寻址方式 格式:操作码 寄存器,寄存器
MOV AX, BX
;AX←BX
操作数存放在CPU的内部寄存器reg中 1)8 位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL 2)16 位寄存器r16: AX、BX、CX、DX、SI、DI、BP、SP 3)4个段寄存器seg: CS、DS、SS、ES

8086的汇编超级浓缩教程

8086的汇编超级浓缩教程

“哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来。

”此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛。

)别急,别急,让我把这个中原委慢慢道来:一、所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪、调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣……;二、汇编直接与硬件打交道,如果你想搞通程序在执行时在电脑中的来龙去脉,也就是搞清电脑每个组成部分究竟在干什么、究竟怎么干?一个真正的硬件发烧友,不懂这些可不行。

三、如今玩DOS的多是“高手”,如能像吾一样混入(我不是高手)“高手”内部,不仅可以从“高手”朋友那儿套些黑客级“机密”,还可以自诩“高手”尽情享受强烈的虚荣感--#$%& “醒醒!”对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。

所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。

某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。

为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。

但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。

大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解)因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提)CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。

第三讲8086汇编语言

第三讲8086汇编语言
换。至少一方为通用Regs。 ❖ 例: XCHG AX, BX ;√
XCHG BH, BL ;√ XCHG AX, 1122H ;× XCHG DS, AX ;× XCHG [SI], BP ;√ XCHG [SI], [DI] ;×
4
3.3 常用汇编指令
D S: 2000H 01H
2001H 02H
CF为前面指令产生的CF
❖格式:ADC DET ,SRC
❖功能:(DST)+(SRC) +CF DST ;
❖要求:同ADD
通用Regs ±
❖ADC指令主要用于多字节加法运算
IMM 通用Regs
MEM
❖ 例:两个32位数相加
0123FAB5H+0ABC212AH=0BE01BDFH 0123 FAB5
;√
MOV 2000H, AX
; × 目的不能为立即数
MOV DS:2000H, AX ; √
3
3.3 常用汇编指令
一、数据传送类指令
2.数据交换指令
❖格式: XCHG DST ,SRC ❖功能:将源 (SRC)和目的(DST)内容互换;
操作结果不影响F标志位。 ❖要求:只在两个通用Regs之间、通用Regs 和MEM之间互
❖ 说明:LEA的源操作数寻址方式为立即数寻址;
LDS、LES的源操作数寻址方式为存储器寻址。
❖例2:设 D S : 1 0 0 0 H 1 0 H 执行: MOV BX, 1000H
1001H 00H
LDS SI, [BX] ;间接寻址
1 0 0 2 H D 2 H 后, NhomakorabeaX=1000H
1003H 13H
➢操作数类型明确,不能出现二义性(即不能模糊)。

8086汇编语言指令表(按字母顺序)

8086汇编语言指令表(按字母顺序)
(2) 若(AL) and 0F0H>90H 或 CF=1,则(AL)<--(AL)+60H,CF<--1.
2. 示例: (AL)=18H,(BL)=06H
ADD AL,BL ; (AL)<--(AL)+(BL) ; (AL)=1EH
DAA ; (AL)
DAS
组合十进制减法调整指令 DAS(Decimal Adjust for Subtraction)
则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,
否则(AL)<--(AL) and 0FH
ADC
带进位加法指令 ADC(Addition Carry)
格式: ADC OPRD1,OPRD2
功能: OPRD1<--OPRD1 + OPRD2 + CF
DAA
组合的十进制加法调整指令 DAA(Decimal Adjust for Addition)
格式: DAA
功能: 对AL中的两个组合进制数相加的结果进行调整,调整结果仍放在AL中,进位标志放在CF中.
说明:
1. 调整操作如下
(1) 若(AL) and 0FH>9 或 AF=1,则(AL)<--(AL)+6,AF<--1,对低四位的调整.
格式: DAS
功能: 对两个组合十进制数相减后存于AL中的结果进行调整,调整后产生一个组合的十进制数且仍存于AL中.
说明:
调整操作
若(AL) and 0FH > 9 或 AF=1,则(AL)<--(AL)-6,AF=1
若(AL) and 0F0H > 90H 或 CF=1,则(AL)<--(AL)-60,CF=1

(汇编语言教程)5_80868088汇编语言-2

(汇编语言教程)5_80868088汇编语言-2

104H DUP(11H 104H DUP(11H)
DUP( DUP(0)
ENDS
ENDS DATA2 DATA2 SEGMENT PARA DB COMMON ‘DATA2’ DATA2 DATA N2 DATA2 DATA2 105H DUP( 105H DUP(0)
DATA2 DATA2 N1 DATA2 DATA2 END
默认值为: 默认值为:PARA
III、 III、组合类型
段名 SEGMENT [定位类型] [组合类型] [使用类型] [‘类别’] 定位类型] 组合类型] 使用类型] [‘类别 类别’ …… …… ; 语句序列 段名 ENDS
PRIVATE:私有段,不进行组合。 PUBLIC:
– 不同模块中的同为public属性的同名段连接组合成一个逻辑段。
3、过程定义伪指令
格式: 格式:过程名 [类型 类型] PROC [类型] … 过程体语句 RET 段名 ENDP PROC和ENDP是成对出现的 是成对出现的。 PROC和ENDP是成对出现的。 类型有近(NEAR)和远(FAR)两种, 类型有近(NEAR)和远(FAR)两种,若过程缺省 NEAR缺省 则属默认值。若为远过程, FAR不 缺省, 或NEAR缺省,则属默认值。若为远过程,则FAR不 能省略。 能省略。 过程名具有段地址、 过程名具有段地址、段内偏移量和类型三个属 性。
2、源程序开始和结束伪指令
程序开始伪指令
– NAME伪指令 NAME伪指令 – TITLE伪指令 TITLE伪指令
程序结束伪指令
– END
(1)程序开始伪指令NAME 程序开始伪指令NAME
NAME伪指令 NAME伪指令 格式: 格式:NAME 模块名 含义:表示一个模块的开始, 含义:表示一个模块的开始,并给出该模 块名。 块名。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

mem, reg
reg, mem
reg, reg
reg, imm
mem, imm
acc, imm
(dst) ← (src) + (dst) + CF(最高位进位标志 符,有进位为 1,否则
mem, reg reg, mem reg, reg
为 0)
reg, imm
mem, imm
acc, imm
(dest) ← (dest)+1
类型 汇编指令格式


操作数说明 时钟周期数 字节数
说明

MOV dest, src (dest) ← (src)

数据传送指令
reg, seg reg, mem
2 8+EA
2 2~4
Cs 不能做目标操作数,不 能被赋值。

reg, imm 4
2 ~ 3 段寄存器之间不能传输数据。

reg, reg
(AX) ← (DX, AX) / (src) 的商
(DX) ← (DX, AX) / (src) 的余数
(AL) ← (AX) / (src) 的 商
4
1
(AH) ← (AX) / (src) 的 余数
(AX) ← (DX, AX) / (src) 的商
(DX) ← (DX, AX) / (src) 的余数
r16←mem 的 EA
r16 seg m16 r16 seg m16 reg, mem reg, reg mem, reg
11 10 16+EA 8 8 17+EA 17+EA 4 3 11
AX 字节, 10
AL 字,
10
DX 不是操 8
作数而是地
8 址
r16, mem 2+EA
r16 ←m32 的底 16 位 r16, m32
POP dst 出栈
XCHG dest, src 数据交换指令
输入 输出指 令
XLAT 换码指令 IN AL/AX, port OUT port, AL/AX IN AL/AX,DX
OUT port,DX
地址传 送指令 (对逻 辑地址 操作)
标志传 送指令 (唯一 对 F寄 存器操
LEA reg, src 取 有效地址指令 LDS reg, src 地 址指针装入 DS LES reg, src 地址 指针装入 ES LAHF 取标志 SAHF 置标志 PUSHF 标志入栈 指令
(SP) ← (SP)-2 ((SP)+1, (SP)) ← (src)
(dst) ← ((SP)+1, (SP)) (SP) ← (SP)+2
(des) ←→ (src)
AL←DS 中逻辑地址为 (BX+AL)的内存单元 (acc) ← (port) (port) ← (acc) (acc) ← ((DX)) ((DX)) ← (acc)
((SP)+1, (SP)) ← F
入栈
3
1 1 2~4 1 1 2~4 2~4 2 1 1
栈底为高地址 高字节先入栈 每次两个字节参与(16 位) 基地址在 ss 中 偏移地址在 sp 中 调用或中断时保存返回地址 两者互换,但不能同时为存 储器操作数,存储内容互换 要借助通用寄存器
操作数均隐含
2
reg
一个 8 位或 16 位通用寄存器或专用寄存器
seg m8 m16 mem m32
一个 16 位段寄存器 一个 8 位的存储器操作数 一个 16 位的存储器操作数 一个 8 位或 16 位存储器操作数 一个 32 位的存储器操作数
DS CS ES SS
dest
目标操作数
src
源操作数
五po、rt CMP 指令的结果判I/断O方端法口
不影响标志位 AL<80H 时 AH=00H , AL>=80H 时 AH=FFH AX<8000H 时 DX=0000H, AX>=8000H 时 DX=FFFFH 对于符号数:最高位为 0 表示正,为 1 表示负
(AL) ← (AX) / (src) 的 商
4
1
(AH) ← (AX) / (src) 的 余数
MOV DX,100H ; (DX)←100H ADD AX,BX ; (AX)←(AX)+(BX)
操作数需要计算 MOV AX,[100] ; (AX)←(100)
给出的均为操作 MOV AX,[BX] ;
数的逻辑地址,而且 (AX)←((DS)×16+(BX))
将逻辑地址分成几段, MOV AL,OFFSET[SI];
B——二进制
D——十进制
Q——八进制
H——十六进制
四、符号约定及含义
符号
含义
i8
一个 8 位立即数
立即数
i16
一个 16 位立即数
imm
一个 8 位或 16 位立即数
r8
一个 8 位通用寄存器
AH AL BH BL CH CL DH
DL
r16
一个 16 位通用寄存器或专用寄存器
AX BX CX DX BP SP SI DI
2
2

mem, reg 9+EA
2 ~ 4 目标操作数和源操作数不能

mem, seg 9+EA
2 ~ 4 同时为内存操作数(存储器

mem, imm 10+EA
3 ~ 6 操作数)。

seg, reg
2
2
寄存器中的数为操作数地址
seg, mem 8+EA
2 ~ 4 时为内存操作数,如【XX】。
PUSH src 入栈
(算术
运算指
令)
ADC dst, src 带进位加法
减 (算术 运算指 令)
INC dest SUB dest, src
SBBdest ,src 带进位减法
DEG dest
NEG dest 求补指令 CMP dest, src 比较指令
乘 (算术 运算指 令)
MUL src IMUL src
(dst) ← (src) + (dst)
寄存器相对寻址
基址变址寻址
操作数在指令中直接给出 操作数在寄存器中 操作数的有效地址由指令直接给出 PA=(DS)|(SS)×16+
(BX)|(SI)|(DI)|(BP) PA=(DS|SS)×16+
(BX|BP|SI|DI)+偏移量 PA=(DS|SS)×16+
(BP|BX)+(SI|DI)
源操作数为地址 操作数需要寻址
1 低四位产生进位
ZF 零标志
1 结果为 0
,0 结果不为 0
SF
符号标志
1 结果为负
,0 结果为正
PF
奇偶标志
1 底八位有偶数个 1,0 结果有奇数个
指令指针寄存器
为 1 对应符 CY AC
为 0 对应符 NC NA
ZR
NZ
NG
PL
PE
PO
1
OF 溢出标志
1 最高位有进位 ,0 最高位没进
OV
NV
(AL) ← AL 中的和调整
4
1
为组合BCD
(AL) ← AL 中的差调整
4
1
为组合BCD
(AL) ← AL 中的和调整为
83
2
非组合BCD
(AH) ← (AH)+调整产 生的进位值
(AL) ← AL 中的差调整为
60
2
非组合BCD
(AH) ← (AH)-调整产生 的进位值
Src 字节AL←AX÷src 商, 8 位 reg AH←AX÷src 余数,Src 8 位 mem 字 AX←DX AX÷src 商, 16 位 reg DX←DX AX÷src 余 数 16 位 mem Src 字节AL←AX÷src 商, 8 位 reg AH←AX÷src 余数,Src 8 位 mem 字 AX←DX AX÷src 商, 16 位 reg DX←DX AX÷src 余 数 16 位 mem
16+EA
(DS) ←m32 的高 16 位
r16 ←m32 的底 16 位 r16, m32
16+EA
(ES) ←m32 的高 16 位
(AH) ← (F 低 8 位字节) 隐含操作数 4
(F 低 8 位字节) ← (AH) 隐含操作数 4
(SP) ← (SP)-2(先入栈) 隐含操作数, 10
标志寄存器
8086 汇编总结
程伟整理
8086 汇编总结
一、8086 编程结构
执 通 AX 累加器
行 用 BX 基数寄存器


寄 CX 计数器

存器 DX 数据寄存器
EU
专 BP 基数指针
用 SP 寄 SI 存器 DI
堆栈指针 源变址寄存器 目的变址寄存器
给出栈顶偏移地址
数据寄存器
指针寄存器 堆栈段偏移地址 变址寄存器 数据段偏移地址
100
000 101 100 001 100
SF 异或 OF=1 (SF 异或 OF)或 ZF=0
SF 异或 OF=0
A<B A>B
A>=B
2
8086 汇编总结
<0 <0 A>B
A B A=B
000 010
(SF 异或 OF)或 ZF=1
A<=B
程伟整理
一、指 令 表(指令分六大类) 1、数据传送类(只有标志传送指令对 F 寄存器影响)
相关文档
最新文档