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'
微机原理及应用 —— 8086微处理器

指令周期
1、执行一条指令所需要的时间称为指令周期。 执行一条指令的时间是取指令、执行指令、 取操作数、存放结果所需时间的总和。用所 需的时钟周期数表示。
指令周期
2、不同指令的执行时间(即指令周期)是不同的; 同一类型的指令,操作数不同,指令周期也不同。
MOV MUL BX, AX BL 2个T周期 个 周期 70~77个T周期 个 周期 14个T周期 个 周期
3.控制寄存器 IP PSW
IP 指令指针寄存器 用来控制CPU的指令执行顺序,它 和代码段寄存器CS一起可以确定当前所要取的指令的内存地 址。 PSW 状态。 用来存放8086 CPU在工作过程中的
标志寄存器
8086的编程结构 的编程结构——执行部件 执行部件 的编程结构
PSW 唯一能按位操作的寄存器 只定义了其中9位,另外7位未定义(不用) 6位状态标志:OF、SF、ZF、PF、CF、AF 3位控制标志:DF、IF、TF 反映指令对数据作用之后,结果的状态(不是结果本身)。 这些状态将控制后续指令的执行。
•系统的复位 系统的复位 和启动 •总线操作 总线操作 •中断操作和 中断操作和 中断系统
•8086的存储 8086的存储 8086 器组织 •8086的I/O 8086的 8086 组织
16位微处理器 位微处理器8086 位微处理器
8086/8088微处理器内部结构 1 8086/8088微处理器内部结构 8086/8088微处理器中的内部寄存器 2 8086/8088微处理器中的内部寄存器 8086/8088微处理器外部基本引脚与工作模式 3 8086/8088微处理器外部基本引脚与工作模式 8086/8088的存储器组织 4 8086/8088的存储器组织 CPU的工作时序 5 8086 CPU的工作时序 6 系统总线的形成
8086指令系统汇编实训实例

8086指令系统实训实例一、80x86微处理器中的寄存器图1-1 80x86微处理器的基本结构寄存器标志寄存器对照表序号类别123456789EFLAG OF DF IF TF SF ZF AF PF CF DEBUG=1 OV DN EI NG ZR AC PE CY DEBUG=0NVUPDIPLNZNAPONC标志名称 设置 未设置标志名称 设置 未设置溢出 OV(溢出) NV(未溢出) 零位 ZR (为0) NZ(不等于零)方向 UP(增加) DN (减少) 辅助进位 AC (有进位)NA(无进位)中断 EI(许可) DI(禁止) 奇偶标志 PE(偶) PO(奇)符号 NG(负) PL(正) 进位 CY (有进位) NC(清除进位)累加器AH AL BH BL CL DHDLCH SP SI DI IP FLAGS CS DS SS ESBP 基址寄存器 计数寄存器 数据寄存器 堆栈指针寄存器 基址指针寄存器 源变址寄存器 目的变址寄存器 指令指针寄存器 标志寄存器 代码段寄存器 段寄存器 附加段寄存器堆栈段寄存器 数据寄存器地址指针和 变址寄存器 控制寄存器 通用寄存器数据段寄存器二、用DEBUG软件学习汇编语言DEBUG的几点规则说明:1.所有数据默认为16进制数,后缀“H”不用加;2.DEBUG命令都是一个字母,字母大小写不分,后面的参数可以用空格分开,也可以不用;命令与数字之间可以不分开,但是两个十六进制数字之间必须分开,如:L100 = L 100;100 110 ≠100110 ;3.DEBUG中的地址表示格式有如下几种:1)段寄存器:偏移量,如:cs:1002)段地址:偏移量,如:04ba:100 或4ba:1003)默认段寄存器不写,只写偏移量,如:100;4)确定地址范围可以有两种表示方式:a)段地址:起始地址的偏移量结束地址的偏移量,如:cs:100 110;b)段地址:起始地址的偏移量L(长度),如:cs:100 L10;DEBUG软件基本指令用法一览表实例:查看主板BIOS信息:①输入“D FE00:0”,回车后看到的结果就是主板BIOS的厂商信息。
8086-汇编指令集

8086 汇编指令集一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令MOV 传送字或字节.格式为: MOV DST,SRC执行的操作:(DST)<-(SRC)MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.格式为:PUSH SRC执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC)POP 把字弹出堆栈.格式为:POP DST执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI 依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX 依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 依次弹出堆栈.BSWAP 交换32 位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)格式为:XCHG OPR1,OPR2执行的操作:(OPR1)<-->(OPR2)CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个操作数里)2. 输入输出端口传送指令.IN I/O 端口输入. ( 语法: IN 累加器,{端口号│DX} )长格式为:IN AL,PORT(字节)IN AX,PORT(字)执行的操作:(AL)<-(PORT)(字节)(AX)<-(PORT+1,PORT)(字)短格式为:IN AL,DX(字节)IN AX,DX(字)执行的操作: AL<-((DX))(字节)AX<-((DX)+1,DX)(字)OUT I/O 端口输出. ( 语法: OUT {端口号│DX},累加器),输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX 指定时,其范围是0-65535.长格式为: OUT PORT,AL(字节)OUT PORT,AX(字)执行的操作: (PORT)<-(AL)(字节)(PORT+1,PORT)<-(AX)(字)短格式为: OUT DX,AL(字节)OUT DX,AX(字)执行的操作: ((DX))<-(AL)(字节)((DX)+1,(DX))<-AX(字)XLAT 换码指令字节查表转换,BX 指向一张256 字节的表的起点,AL 为表的索引值(0-255,即0-FFH);返回AL 为查表结果. 执行的操作: ( [BX+AL]->AL )格式为: XLAT OPR或: XLAT3. 目的地址传送指令.LEA 装入有效地址. 格式为: LEA REG,SRC执行的操作:(REG)<-SRC指令把源操作数的有效地址送到指定的寄存器中.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.格式为: LDS REG,SRC执行的操作:(REG)<-(SRC) (DS)<-(SRC+2)把源操作数指定的 4 个相继字节送到由指令指定的寄存器及DS 寄存器中.该指令常指定SI寄存器.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.格式为: LES REG,SRC执行的操作: (REG)<-(SRC) (ES)<-(SRC+2)把源操作数指定的 4 个相继字节送到由指令指定的寄存器及ES 寄存器中.该指令常指定DI寄存器.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.格式为: LAHF执行的操作:(AH)<-(PWS 的低字节)SAHF 标志寄存器传送,把AH 内容装入标志寄存器.格式为: SAHF执行的操作:(PWS 的低字节)<-(AH)PUSHF 标志入栈.格式为: PUSHF执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW)POPF 标志出栈.格式为: POPF执行的操作:(PWS)<-((SP)+1,(SP)) (SP)<-(SP+2)PUSHD 32 位标志入栈.POPD 32 位标志出栈.二、算术运算指令ADD 加法.格式: ADD DST,SRC执行的操作:(DST)<-(SRC)+(DST)ADC 带进位加法.格式: ADC DST,SRC执行的操作:(DST)<-(SRC)+(DST)+CFINC 加1.格式: INC OPR执行的操作:(OPR)<-(OPR)+1AAA 加法的ASCII 码调整.DAA 加法的十进制调整.SUB 减法.格式: SUB DST,SRC执行的操作:(DST)<-(DST)-(SRC)SBB 带借位减法.格式: SBB DST,SRC执行的操作:(DST)<-(DST)-(SRC)-CFDEC 减1.格式: DEC OPR执行的操作:(OPR)<-(OPR)-1NEC 求反(以0 减之).格式: NEG OPR执行的操作:(OPR)<--(OPR)CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).格式: CMP OPR1,OPR2执行的操作:(OPR1)-(OPR2)该指令与SUB 指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志. AAS 减法的ASCII 码调整.DAS 减法的十进制调整.MUL 无符号乘法.格式: MUL SRC执行的操作:字节操作数:(AX)<-(AL)*(SRC)字操作数:(DX,AX)<-(AX)*(SRC)IMUL 整数乘法.格式: IMUL SRC执行的操作:与MUL 相同,但必须是带符号数,而MUL 是无符号数.以上两条,结果回送AH 和AL(字节运算),或DX 和AX(字运算),AAM 乘法的ASCII 码调整.DIV 无符号除法.非组合BCD 码乘法调整指令格式: DIV SRC执行的操作:字节操作:(AL)<-(AX)/(SRC)的商(AH)<-(AX)/(SRC)的余数字操作: (AX)<-(DX,AX)/(SRC)的商(AX)<-(DX,AX)/(SRC)的余数IDIV 整数除法.格式: DIV SRC执行的操作:与DIV 相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同.以上两条,结果回送:商回送AL,余数回送AH,(字节运算);或商回送AX,余数回送DX,(字运算).AAD 除法的ASCII 码调整.非组合BCD 码除法调整指令CBW 字节转换为字. (把AL 中字节的符号扩展到AH 中去)格式: CBW执行的操作:AL 的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFHCWD 字转换为双字. (把AX 中的字的符号扩展到DX 中去)格式: CWD执行的操作:AX 的内容符号扩展到DX.即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH.这两条指令都不影响条件码.CWDE 字转换为双字. (把AX 中的字符号扩展到EAX 中去)CDQ 双字扩展. (把EAX 中的字的符号扩展到EDX 中去)三、逻辑运算指令AND 与运算.格式: AND DST,SRC执行的操作:(DST)<-(DST)^(SRC)OR 或运算.格式: OR DST,SRC执行的操作:(DST)<-(DST)V(SRC)XOR 异或运算.格式: XOR DST,SRC执行的操作:(DST)<-(DST)V(SRC)NOT 取反.格式: NOT OPR执行的操作:(OPR)<-(OPR)TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).格式: TEST OPR1,OPR2执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码SHL 逻辑左移.格式: SHL OPR,CNT(其余的类似)其中OPR 可以是除立即数以外的任何寻址方式.移位次数由CNT 决定,CNT 可以是 1 或CL.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255 次.移位一次时,可直接用操作码. 如SHL AX,1.移位>1 次时,则由寄存器CL 给出移位次数.如MOV CL,04SHL AX,CL四、串指令DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D 标志0 表示重复操作中SI 和DI 应自动增量;1 表示应自动减量.Z 标志用来控制扫描或比较操作的结束.MOVS 串传送.格式:可有三种MOVS DST,SRCMOVSB(字节)MOVSW(字)其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:MOVS ES:BYTE PTR[DI],DS:[SI]执行的操作:1)((DI))<-((SI))2)字节操作:(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1当方向标志DF=0 时用+,当方向标志DF=1 时用-3)字操作:(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2当方向标志DF=0 时用+,当方向标志DF=1 时用-该指令不影响条件码.CMPS 串比较.格式: CMPS SRC,DSTCMPSBCMPSW执行的操作:1)((SI))-((DI))2)字节操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1字操作: (SI)<-(SI)+-2,(DI)<-(DI)+-2指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS 指令的规定相同.SCAS 串扫描.把AL 或AX 的内容与目标串作比较,比较结果反映在标志位.格式: SCAS DSTSCASBSCASW执行的操作:字节操作: (AL)-((DI)),(DI)<-(DI)+-1字操作: (AL)-((DI)),(DI)<-(DI)+-2该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS 的规定相同.LODS 装入串.把源串中的元素(字或字节)逐一装入AL 或AX 中.格式: LODS SRCLODSBLODSW执行的操作:字节操作:(AL)<-((SI)),(SI)<-(SI)+-1字操作: (AX)<-((SI)),(SI)<-(SI)+-2该指令把由(SI)指定的数据段中某单元的内容送到AL 或AX 中,并根据方向标志及数据类型修改SI 的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.一般说来,该指令不和REP 联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.STOS 保存串.是LODS 的逆过程.格式: STOS DSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))<-(AL),(DI)<-(DI)+-1字操作: ((DI))<-(AX),(DI)<-(DI)+-2该指令把AL 或AX 的内容存入由(DI)指定的附加段的某单元中,并根据DF 的值及数据类型修改DI 的内容,当它与REP 联用时,可把AL 或AX 的内容存入一个长度为(CX)的缓冲区中.REP 当CX/ECX<>0 时重复.格式: REP string primitive其中String Primitive 可为MOVS,LODS 或STOS 指令执行的操作:1)如(CX)=0 则退出REP,否则往下执行.2)(CX)<-(CX)-13)执行其中的串操作4)重复1)~3)REPE/REPZ 当ZF=1 或比较结果相等,且CX/ECX<>0 时重复.格式: REPE(或REPZ) String Primitive其中String Primitive 可为CMPS 或SCAS 指令.执行的操作:1)如(CX)=0 或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行2)(CX)<-(CX)-13)执行其后的串指令4)重复1)~3)REPNE/REPNZ 当ZF=0 或比较结果不相等,且CX/ECX<>0 时重复.格式: REPNE(或REPNZ) String Primitive其中String Primitive 可为CMPS 或SCAS 指令执行的操作:除退出条件(CX=0)或ZF=1 外,其他操作与REPE 完全相同.REPC 当CF=1 且CX/ECX<>0 时重复.REPNC 当CF=0 且CX/ECX<>0 时重复.五、程序转移指令1>无条件转移指令(长转移)JMP 无条件转移指令1)段内直接短转移格式:JMP SHORT OPR执行的操作:(IP)<-(IP)+8 位位移量2)段内直接近转移格式:JMP NEAR PTR OPR执行的操作:(IP)<-(IP)+16 位位移量3)段内间接转移格式:JMP WORD PTR OPR执行的操作:(IP)<-(EA)4)段间直接(远)转移格式:JMP FAR PTR OPR执行的操作:(IP)<-OPR 的段内偏移地址(CS)<-OPR 所在段的段地址5)段间间接转移格式:JMP DWORD PTR OPR执行的操作:(IP)<-(EA) (CS)<-(EA+2)2>条件转移指令(短转移,-128 到+127 的距离内)1)根据单个条件标志的设置情况转移JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移格式:JE(或JZ) OPR测试条件:ZF=1JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移格式:JNZ(或JNE) OPR测试条件:ZF=0JS(Jump if sign) 结果为负则转移格式: JS OPR测试条件:SF=1JNS(Jump if not sign) 结果为正则转移格式:JNS OPR测试条件:SF=0JO(Jump if overflow) 溢出则转移格式: JO OPR测试条件:OF=1JNO(Jump if not overflow) 不溢出则转移格式: JNO OPR测试条件:OF=0JP(或JPE)(Jump if parity,or parity even) 奇偶位为1 则转移格式: JP OPR测试条件:PF=1JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0 则转移格式: JNP(或JPO) OPR测试条件:PF=0JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1 则转移格式:JB(或JNAE,JC) OPR测试条件:CF=1JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0 则转移格式:JNB(或JAE,JNC) OPR测试条件:CF=02)比较两个无符号数,并根据比较的结果转移JB(或JNAE,JC)格式:同上JNB(或JAE,JNC)格式:同上JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移格式:JBE(或JNA) OPR测试条件:CFVZF=1JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移格式:JNBE(或JA) OPR测试条件:CFVZF=03)比较两个带符号数,并根据比较的结果转移JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移格式:JL(或JNGE) OPR测试条件:SFVOF=1JNL(或JGE)(Jump if not less,or greater or equal)不小于, 或者大于或者等于则转移格式:JNL(或JGE) OPR测试条件:SFVOF=0JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移格式:JLE(或JNG) OPR测试条件:(SFVOF)VZF=1JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移格式:JNLE(或JG) OPR测试条件:(SFVOF)VZF=04)测试CX 的值为0 则转移指令JCXZ(Jump if CX register is zero) CX 寄存器的内容为零则转移格式:JCXZ OPR测试条件:(CX)=0注:条件转移全为8 位短跳!3>循环控制指令(短转移)LOOP CX 不为零时循环.格式: LOOP OPR测试条件:(CX)<>0LOOPE/LOOPZ CX 不为零且标志Z=1 时循环.格式: LOOPZ(或LOOPE) OPR测试条件:(CX)<>0 且ZF=1LOOPNE/LOOPNZ CX 不为零且标志Z=0 时循环.格式: LOOPNZ(或LOOPNE) OPR测试条件:(CX)<>0 且ZF=0这三条指令的步骤是:1)(CX)<-(CX)-12)检查是否满足测试条件,如满足则(IP)<-(IP)+D8 的符号扩充.JCXZ CX 为零时转移.JECXZ ECX 为零时转移.4>子程序CALL 调用指令RET 返回指令5>中断指令INT 中断指令格式: INT TYPE或INT执行的操作: (SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2 ((SP)+1,(SP))<-(CS)(SP)<-(SP)-2 ((SP)+1,(SP))<-(IP)(IP)<-(TYPE*4) (CS)<-(TYPE*4+2)INTO 溢出中断执行的操作:若OF=1 则:(SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2 ((SP)+1,(SP))<-(CS)(SP)<-(SP)-2 ((SP)+1,(SP))<-(IP)(IP)<-(10H) (CS)<-(12H)IRET 中断返回格式: IRET执行的操作: (IP)<-((SP)+1,(SP))(SP)<-(SP)+2(CS)<-((SP)+1,(SP))(SP)<-(SP)+2(PSW)<-((SP)+1,(SP))(SP)<-(SP)+2六、处理器控制指令1.标志处理指令CLC 进位位置0 指令(Clear carry)CF<-0CMC 进位位求反指令(Complement carry)CF<-CFSTC 进位位置1 指令(Set carry)CF<-1CLD 方向标志置0 指令(Clear direction)DF<-0STD 方向标志置1 指令(Set direction)DF<-1CLI 中断标志置0 指令(Clear interrupt)IF<-0STI 中断标志置1 指令(Set interrupt)IF<-02.其他处理机控制指令NOP 无操作指令该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代.HLT 停机指令该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序.WAIT 等待指令该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT 指令继续德行.ESC 换码指令格式ESC mem其中mem 指出一个存储单元,ESC 指令把该存储单元的内容送到数据总线去.当然ESC 指令不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件.LOCK 封锁指令该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止.当CPU 与其他处理机协同工作时,该指令可避免破坏有用信息.七、伪指令DW 定义字(2 字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.。
微机原理专题课:8086系统功能调用

微机原理专题课之一:8086的系统功能调用
该处理程序从8255可编程外围接口芯片的输 入端口(60H)读取一个字节,这个字节的低7 位是按键的扫描码。最高位为0或者为1,分别表 示键是“按下”状态还是“放开”状态。按下时, 取得的字节称为通码,放开时取得的字节称为断 码。如ESC键按下取得的通码为01H 断码=通码+80H (00000001B),放开ESC键时会产生一个断码 81H(10000001B)。BIOS键盘处理程序将取得 的扫描码转换成相应的字符码,大部分的字符码 是一个标准的ASCII码;没有相应ASCII的键, 如Alt和功能键(F1~F10),字符码为0;还有 一些非ASCII码键产生一个指定的操作。
MS DOS(disk operation system磁盘操作系统)是微型计算机 磁盘操作系统,操作系统是用来控制和管理计算机的硬件资源, 方便用户使用的程序集合。磁盘操作系统是人和机器交互的界 面,用户通过操作系统使用和操作计算机。
微机原理专题课之一:8086的系统功能调用
4色320×200图形显示模式
由于每个象素只能是四种颜色之一,而四种情况用2位二 进制就可表示,所以,一个字节可表示4个象素的显示颜色, 存储一行上的所有象素信息就需要80个字节。 在具体存储过程中,它又把偶数行象素和奇数行分开来存 储。偶数行和齐数行的象素总数各有32000个,也都需要8000 个字节来存储,并规定: 偶数行象素从0B800:0000H开始存储, 奇数行象素从0B800:2000H开始存储。 该显示模式的存储形式如图所示。
键盘状态字 在计算机键盘上除了可输入各种字符(字母、数字 和符号等)的按键之外,还有一些功能键(如:F1、 F2、…等)、控制键(如:Ctrl、Alt、Shift等)、 双态键(如:Num Lock、Caps Lock等)和特殊请求 键(如:Print Screen、Scroll Lock等)。
汇编语言8086和8088中寄存器

1980年代,汇编语言8086和8088在个人电脑中广泛应用。
这两种语言使用16位和8位寄存器,这些寄存器是编程中不可或缺的组成部分。
接下来我将根据这两种汇编语言的寄存器,深入探讨其特性和用途,帮助你全面了解这一主题。
一、汇编语言8086和8088中寄存器的基本概念在汇编语言8086和8088中,寄存器是一种保存数据的特殊存储器。
它们用于存储指令中的临时数据和位置区域。
这两种汇编语言使用的寄存器包括通用寄存器、段寄存器和指令指针寄存器。
通用寄存器用于存储操作数和中间结果,段寄存器用于存储内存访问的段位置区域,指令指针寄存器用于存储当前执行指令的位置区域。
二、8086和8088中的通用寄存器1. AX寄存器AX寄存器是一个16位的累加器,用于存储算术运算的结果。
在8086和8088中,它可以分为AH和AL两个8位寄存器,分别存储较高位和较低位的数据。
2. BX寄存器BX寄存器是一个16位的基址寄存器,用于存储数据的基址。
在8086和8088中,它也可以分为BH和BL两个8位寄存器。
3. CX寄存器CX寄存器是一个16位的计数寄存器,用于存储循环次数。
在8086和8088中,它可以分为CH和CL两个8位寄存器。
4. DX寄存器DX寄存器是一个16位的数据寄存器,用于存储I/O端口的数据。
在8086和8088中,它也可以分为DH和DL两个8位寄存器。
三、8086和8088中的段寄存器1. CS寄存器CS寄存器是一个16位的代码段寄存器,用于存储当前执行代码段的基位置区域。
在8086和8088中,它存储着指向当前代码段的位置区域。
2. DS寄存器DS寄存器是一个16位的数据段寄存器,用于存储当前数据段的基位置区域。
在8086和8088中,它存储着指向当前数据段的位置区域。
3. SS寄存器SS寄存器是一个16位的堆栈段寄存器,用于存储当前堆栈段的基位置区域。
在8086和8088中,它存储着指向当前堆栈段的位置区域。
第6章8086指令系统与汇编基础

13
2021/2/9
第6章 8086指令系统与汇编基础 3.段地址寄存器
【例6.2】 MOV DS,3456H
则指令执行后,DS)=3456H
9
2021/2/9
第6章 8086指令系统与汇编基础
回顾8086的寄存器
寄存器是在 CPU 中一个暂时储存数据的地方。 它有点儿像存储器(DRAM),但是不像存储器这 么大,寄存器只有一个、两个或四个字节的大小 而已。 CPU 可以对寄存器作加、减、乘、除、 且、或等等运算。8086/8088 共有 14 个 16 位的 寄存器,其名称都以两个英文字表示,大致可分 为以下四类。
(3)二操作数指
令
操作码 A1 A2
格式:
这是最常见的指令格式。A1、A2指出两个源操
作数的地址,其中一个还指出存放结果的目的地址。
对两个操作数完成所规定的操作后,将结果存入目
的地址。
6
2021/2/9
第6章 8086指令系统与汇编基础
(4)三操作数指令 Hale Waihona Puke 式: 操作码 A A2 A31
A1、A2指出两个源操作数的地址,A3指出存放 结果的目的地址。
3
2021/2/9
第6章 8086指令系统与汇编基础
计算机只能识别二进制代码,因此计算机能执行的 指令必须以二进制代码的形式表示,这种以二进制代 码形式表示的指令称为指令的机器码(Machine Code)。
详细介绍8086微机中常用的接口及其功能。

详细介绍8086微机中常用的接口及其功能。
1.引言1.1 概述概述:8086微机是一种十分重要的微机系统, 它以其较大的寻址能力和较高的运算速度而备受关注。
在8086微机系统中,接口是一种关键的组成部分,它们连接了微处理器和外部设备,起到了数据传输和控制信号传递的作用。
常用的接口在整个系统中起到了至关重要的作用。
本篇文章将详细介绍8086微机中常用的接口及其功能。
首先我们将简要介绍8086微机的背景和特点,然后重点关注常用的接口,包括数据总线接口、地址总线接口、控制信号接口以及其他常见的接口模块。
我们将深入探讨每种接口的功能、工作原理,并给出一些实际应用的例子。
通过本文的阅读,读者将能够全面了解8086微机中常用接口的作用和重要性,对于设计和应用8086微机系统将有更深入的理解。
此外,本文还将对接口技术的未来发展进行展望。
接下来的章节将逐一介绍8086微机中常用的接口,为读者提供更具体的知识和实践指导。
让我们一起深入探索8086微机系统的精彩世界吧!文章结构部分的内容可以包括以下几个方面:1.2 文章结构:本文将从以下几个方面对8086微机中常用的接口及其功能进行详细介绍。
2.正文部分2.1 8086微机简介:在本部分,我们将介绍8086微处理器的基本概念和特点,包括8086微处理器的基本组成、工作原理等内容。
2.2 常用的接口介绍:在本部分,我们将详细介绍8086微机中常用的接口及其功能,包括数据总线接口、地址总线接口、控制总线接口等。
对每个接口,我们将介绍其作用、特点、使用方法以及相关的示例应用。
具体而言,我们会介绍以下几个常用的接口:- 并行口(Parallel Port):详细介绍并行口的作用、接口原理、数据传输方式以及应用场景。
- 串行口(Serial Port):详细介绍串行口的作用、接口原理、数据传输方式以及应用场景。
- 中断控制器(Interrupt Controller):详细介绍中断控制器的作用、接口原理、中断优先级设置以及处理方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
应用举例
利用8086处理器设计一个简单的电加热炉的温度控制系统,
要求:1|、目标温度可以设置、显示;(XXX)
2、炉内实际温度可以显示(XXX)
3、温度控制过程中,每秒种测量、调节1次
4、通过固体继电器调节电阻丝对电炉加温
5、加热速度:1度/分钟,到200度后保持稳定
(一) 设计要点:
1、以8086为处理器
2、用3个8位锁存器锁存20位地址(AD0-AD15 ;A16-A19 ;BHE )
3、RAM存储器地址从00000H -03FFFH连续空间(16K*8)6264*2 数据及中断矢量表
4、ROM存储器地址从FC000H-FFFFFH的连续空间(16K*8)2762*2 程序和程序中用到的固定参数
5、定时器8253控制时间(端口地址0020H,0022H,0024H,0026H)
6、16键、6位LED显示器通过8255A的A、B、C口接口(端口地址0030H,0032H,0034H,0036H)
7、电阻加热:8255的C口控制0809的状态由C口查询
8、温度测量:ADC0809 8位输入0-5V (启动转换的控制端口0040H 读转换结果端口0042H )
(二) 系统组成
(三) 硬件设计及地址分配
3.1 存储器的作用:
1、数据及中断矢量表
2、程序和程序中用到的固定参数
组织方式:
按字节(BYTE)组织,支持字(WORD)读写操作
RAM :偶地址+奇地址体(A0 ,D0-D7;BHE,D8-D15),可读可写ROM :偶地址+奇地址体(A0 ,D0-D7;BHE,D8-D15),可读不写地址范围:
RAM存储器00000H -03FFFH连续空间(16K*8)6264*2
ROM存储器FC000H-FFFFFH连续空间(16K*8)2764*2
存储器的地址译码与读写控制电路真值表:
3.2 IO接口设计
I/O组织方式:
按字节(BYTE)组织,但不支持字(WORD)读写操作。
采用偶地址寻址(A0 ,D0-D7)
端口分配:
8253 端口地址0020H,0022H,0024H,0026H
8255A端口地址0030H,0032H,0034H,0036H
ADC0809端口地址:
启动转换的控制端口0040H
读转换结果端口0042H
8255信号与8253类似;此处略
8253的作用:
在温度控制过程中,每秒钟产生20次中断请求,控制模/数的采样周期(50ms=20次/每秒)工作模式字设置:
SC1 SC0 RW1 RW0 M2 M1 M0 BCD
定时器通道:0
定时参数写入方式:先读/写低8位字节, 再读/写高8位字节
工作模式:方式2
产生周期性脉冲:
(3)方式2——分频器(速度波发生器)
具有计数初值重装能力
二进制计数;
定时器初值设置:
1、定时周期采用1Mz的时钟输入,定时时钟周期为1us(1/10-6)
2、根据定时时间(50ms)= 时钟周期(1us)*脉冲数(c) ,求得C=50000=0c350H (分2次写入通道0的端口)
8255的作用:
1、键盘扫描
2、显示器扫描
利用A输入、B口输出和C口输出的6位
3、输入0809的状态(检测0809的EOC信号,确定A/D转换是否完成)A口1位
4、控制加热电阻丝的开关(C口1位输出)
工作模式字设置:
A、B、C 都为基本的输入输出方式
A输入、B口输出和C口输出的6位
控制字为:1 00 1 0 0 0 0
3.3 中断控制:
由于只有单中断源,可采用NMI(上升沿)作为中断请求输入。
中断类型号是固定的(02h),
中断子程序入口地址存放在0000:0008H-0000:000B单位中(物理地址为00008H-0000BH).
(四) 软件控制流程
1、控制硬件工作完成参数设置、温度测量、显示、加热控制
2、加热控制时需要控制算法(如PID)
4.1 总体流程
程序包括两大部分:主控程序和中断处理程序
主控程序:
功能:完成程序初始化、接口电路的模式设置、键盘扫描(控制参数设置)、显示扫描。
特点:完成初始化后,程序无限循环(不断的键盘扫描(控制参数设置)、显示扫描)。
中断处理程序:
功能:完成时钟控制、温度测量(AD转换)、根据控制算法实现温度调节。
特点:每当8053计数到0时,就执行一次。
两部分协调工作完成系统的温度控制。