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):详细介绍中断控制器的作用、接口原理、中断优先级设置以及处理方式。
第4章 8086汇编语言程序设计(实例)_6h

4.7 DOS功能调用与子程序设计
子程序/系统功能调用包括入口参数,出口参数 功能号和中断调用指令。
入口参数:传递的数据(有些不需要) 出口参数:返回的数据(有些子程序没有) 功能号: 子程序编号(必须送入AH寄存器) 中断调用:中断调用(INT 21H)
33
4.7 DOS功能调用与子程序设计
……
3
DATA SEGMENT
ARRAY DW 100 DUP(?)
DATA STK
ENDS SEGMENT
PARA
等效于:LEA BX, ARRAY STA区C这K别两‘在S条T于A语C:K句’O不F可FS少ET,是否伪则指,令D,S而
DB 10 DUP(?) STK ENDS
L未EA初是始指化令。性指令,执行阶段不同
;低于,则为大写字母
;高于,则不是字母 ;将小写字母改为大写
MOV [BX] , AL
NEXT: INC BX
JMP A1
EXIT: ……
10
四、表格处理问题
简单加密问题:编程将0~9的数字明码转换为密 码,密码表(明码和密码的映射关系)如下:
0123456789 2716908345
比如,数字1587,加密后成为7043 对此类问题,无法通过确定的函数关系来描述,
;存放结果(密码)
ENDS
……
程序需要做什么样的修改呢?
DATA TAB VA1 VA2 DATA
SEGMENT
DW 2, 7, 1, 6 ,9, 0, 8, 3, 4, 5 ;密码表
DB 8, 4, 1, 7, 5
;被加密码(明码)
DB 5 DUP(?)
;存放结果(密码)
ENDS
第3章 8086指令系统(2)

8086/8088指令系统按其功能分为以下类型:数 据传送指令、地址传送指令、标志寄存器传送 指令、算术运算指令、逻辑运算指令、移位指 令、控制转移指令、串操作指令、中断指令和 处理器控制指令。
一.数据传送指令
数据传送指令用于寄存器、存储单元、或输入
输出端口之间传送数据或地址。8086/8088有14
CMP AL,100
29
CMP指令执行后对标志位的影响
操作数类型
带符号的 二进制
CF ZF SF OF
两操作数的关系
01 0 0
等于
-010
小于
- 0 0 1 目的操作数 小于 源操作数
-000
大于
-011
大于
不带符号的 二进制
01 0 0
等于
10 -
- 目的操作数 低于 源操作数
00 -
-
高于
举例: n=8 bit 带符号数(-128~127), 无符号数(0~255)
PUSH AX
PUSH DX
78H
POP AX
56H
POP DX
34H
12H
9
(4)XCHG指令 格式:XCHG OP1,OP2 操作:源、目的操作数之间交换一个字节 或字的数据。源操作数或目的操作数只能 取通用寄存器或通用寄存器与存储器 例: XCHG AX,CX
XCHG AL,BL XCHG AX,[BP+DI]
中的数相乘,结果放在累加器中
乘积为双字节长时,结果放在AX中;乘积为双 字长时,分别放在DX(乘积的高16位)和AX中。 该指令的运行结果只影响标志位CF和OF 例:MOV AL,FIRST
MUL SECOND MOV THIRD,AX (2)IMUL指令 格式:IMUL SRC 该指令为带符号数相乘指令
8086汇编语言

8086汇编语言8086汇编语言是一种用于编写Intel 8086微处理器的程序的低级语言。
它是x86指令集的最早版本,是现代PC上使用的汇编语言的基础。
本文将介绍8086汇编语言的基本概念、指令系统、程序格式、程序设计方法和应用实例,以帮助读者掌握这门古老而强大的语言。
什么是8086汇编语言8086汇编语言是一种用助记符表示机器指令的语言,它可以直接操作CPU、寄存器、内存和端口等硬件资源。
8086汇编语言的优点是执行速度快、占用空间少、控制能力强,缺点是可读性差、可移植性差、编程难度大。
8086汇编语言的程序由三个部分组成:伪指令、指令和数据。
伪指令是用来告诉汇编程序如何处理源程序的命令,如定义变量、分配内存、设置段属性等。
指令是用来控制CPU执行操作的命令,如数据传送、算术运算、逻辑运算、控制转移等。
数据是用来存储或操作的信息,如常数、变量、字符串等。
8086汇编语言的程序需要经过汇编程序(如MASM)将源代码转换为机器代码,然后再由链接程序(如LINK)将多个目标模块连接成可执行文件,最后由加载程序(如DOS)将可执行文件加载到内存中运行。
8086微处理器8086微处理器是Intel公司于1978年推出的一款16位微处理器,它是x86系列微处理器的第一代产品,也是IBM PC机的原始CPU。
它具有以下特点:工作频率为5MHz~10MHz,每秒可执行约33万条指令内部结构由总线接口单元(BIU)和执行单元(EU)组成,实现了取指和执行的并行操作寄存器由四个16位通用寄存器(AX, BX, CX, DX)、四个16位段寄存器(CS, DS, SS, ES)、一个16位标志寄存器(FLAGS)和一个16位指令指针(IP)组成指令系统由100多条指令组成,分为数据传送类、算术运算类、位操作类、控制转移类和处理机控制类五大类存储器管理采用了分段机制,每个段最大为64KB,总容量为1MB支持两种工作模式:实地址模式和保护模式,实地址模式下可以直接访问物理地址,保护模式下可以实现多任务和内存保护8086汇编语言程序格式8086汇编语言程序一般采用以下格式:[段名] segment [段属性][伪指令][数据][子程序][段名] ends其中:段名是用来标识一个段的名称,可以自定义,但不能与伪指令或寄存器重名段属性是用来设置一个段的类型和特征,如代码段(code)、数据段(data)、堆栈段(stack)等伪指令是用来定义变量、分配内存、设置偏移量等功能的命令,如DB, DW, DD, ORG, ASSUME等数据是用来存储或操作的信息,如常数、变量、字符串等子程序是用来实现特定功能的代码段,如输入输出、排序、查找等一个典型的8086汇编语言程序由以下三个段组成:数据段(data segment):用来存放程序中用到的数据,如变量、常量、字符串等代码段(code segment):用来存放程序中的指令,如数据传送、算术运算、控制转移等堆栈段(stack segment):用来存放程序中的临时数据,如函数调用时的参数、返回地址、局部变量等一个简单的8086汇编语言程序示例如下:data segmentmsg db 'Hello, world!', '$' ;定义一个字符串变量data endscode segmentassume cs:code, ds:data ;告诉汇编程序代码段和数据段的名称start: ;程序入口标号mov ax, data ;将数据段地址加载到ax寄存器mov ds, ax ;将ax寄存器的值传送到ds寄存器,设置数据段寄存器mov dx, offset msg ;将字符串变量的偏移地址加载到dx寄存器mov ah, 9 ;设置ah寄存器为9,表示调用DOS中断的输出字符串功能int 21h ;调用DOS中断21h,输出字符串mov ah, 4ch ;设置ah寄存器为4ch,表示调用DOS中断的退出程序功能int 21h ;调用DOS中断21h,退出程序code endsend start ;告诉汇编程序程序结束的位置8086汇编语言指令系统8086汇编语言指令系统由100多条指令组成,分为五大类:数据传送类:用来实现数据在寄存器、内存和端口之间的传送,如MOV, PUSH, POP, XCHG等算术运算类:用来实现数据的加减乘除等运算,如ADD, SUB, MUL, DIV等位操作类:用来实现数据的位移、旋转、逻辑和测试等操作,如SHL, SHR, ROL, ROR, AND, OR, XOR, NOT, TEST等控制转移类:用来实现程序的顺序、条件和无条件跳转,如JMP, JZ, JNZ, JCXZ, CALL, RET等处理机控制类:用来实现处理机状态的设置和查询,如CLC, STC, CMC, CLD, STD, CLI, STI等每条指令由助记符和操作数组成,助记符表示指令的功能,操作数表示指令的对象。
EMU8086软件在微机原理及接口技术数字中的应用的研究报告

EMU8086软件在微机原理及接口技术数字中的应用的研究报告随着计算机技术的不断发展,微机的应用越来越广泛,尤其是在数字中的应用,可谓是无处不在。
而EMU8086软件作为一种可以在计算机上模拟8086微处理器的软件,在微机原理及接口技术数字中的应用也越来越多。
在数字电路的设计中,EMU8086软件可以通过模拟8086微处理器来实现对数字器件的控制。
可以从这个层面上看出,EMU8086软件在数字电路的研究中起到了非常重要的作用。
使用EMU8086软件进行数字电路的仿真可以大大提高数字电路设计的效率和质量,有效地减少了设计成本。
此外,EMU8086软件还可以进行微机的汇编语言编程教学。
学生可以通过EMU8086软件进行汇编语言的学习和实验,比如可以通过EMU8086软件来设计一个简单的程序,在实践中学习8086微处理器的工作原理和运行方式。
同时,EMU8086软件还提供了一些实用的工具,比如调试器、汇编器等,方便用户进行程序测试和调试。
另外,EMU8086软件还可以应用于数字信号处理中。
在现代通信技术中,数字信号处理起着至关重要的作用,而EMU8086软件就可以通过模拟8086微处理器来实现对数字信号的处理。
比如可以通过EMU8086软件设计一个数字滤波器,对数字信号进行滤波处理,实现信号的降噪和去除干扰等功能。
总之,EMU8086软件在微机原理及接口技术数字中的应用是非常广泛的。
无论是在数字电路的设计中,还是在汇编语言编程教学中,EMU8086软件都起着重要的作用。
同时,EMU8086软件还可以应用于数字信号处理等领域,为数字技术的发展做出了重要贡献。
数据分析是对一定数量数据的收集,重组和解释的一个过程。
在这个过程中,我们需要对数据进行清洗,排序,统计,分布图表展示等操作,从而发现数据中的规律性和趋势性,为后续的决策提供参考依据。
以下是一个关于企业销售情况的数据分析范例:数据收集:该企业2019年1-12月销售数据。
8086的应用及原理图

8086的应用及原理图一、简介8086是由英特尔(Intel)公司于1978年推出的一款16位微处理器。
它成为了后续x86架构的基础,并且在80年代和90年代广泛应用于各种个人电脑和工作站中。
二、8086的应用8086微处理器在各个领域有着广泛的应用,以下是一些常见的应用场景:1.个人电脑:8086是最早的一种个人电脑用微处理器。
在80年代和90年代,它极大地推动了个人电脑的发展,成为了当时最主流的处理器。
2.工业控制:8086在工业控制系统中也被广泛使用。
由于其较高的计算能力和稳定性,能够处理复杂的算法和控制逻辑,因此在自动化生产线、仪器仪表和机械设备等方面有着重要的应用。
3.嵌入式系统:由于8086具有较小的体积和低功耗的特点,使得它在嵌入式系统中有广泛的应用。
像医疗设备、智能家居和智能穿戴设备等嵌入式系统中,8086可以负责控制和处理各种传感器和设备。
4.航空航天:8086在航空航天领域有着重要的作用。
由于其高可靠性和强大的计算能力,使得它被广泛应用于火箭控制系统、卫星通信和导航系统等方面。
三、8086的原理图1. 存储器单元•内部存储器:用于存放指令和数据,包括寄存器和内存。
–寄存器:包括通用寄存器、指令指针寄存器、段寄存器等。
–内存:分为代码段、数据段和堆栈段等。
2. 控制单元•指令寄存器(IR):用于存放当前执行的指令。
•程序计数器(PC):存放指令的地址。
•指令译码器:将指令解码为对应的操作。
•控制逻辑:根据指令执行的需求,控制各个模块的工作。
3. 算术逻辑单元•运算器:负责执行各种算术运算和逻辑运算。
•标志寄存器(FLAGS):状态寄存器,记录运算结果中的状态。
4. 输入输出单元•输入端口:负责接收外部设备的数据。
•输出端口:负责将数据发送给外部设备。
四、总结8086微处理器作为早期个人电脑使用的重要组成部分,对计算机技术的发展有着深远的影响。
它在个人电脑、工业控制、嵌入式系统和航空航天等领域有着广泛的应用。
8086寻址方式及举例

8086寻址方式及举例8086寻址方式指的是在Intel 8086处理器中进行内存访问的方式。
8086寻址方式主要有以下几种:1. 直接寻址(Direct addressing):给出地址直接访问内存中的数据。
2. 寄存器寻址(Register addressing):使用寄存器中存放的地址进行内存访问。
3. 寄存器间接寻址(Register indirect addressing):使用寄存器中存放的地址作为内存地址的间接寻址方式。
4. 寄存器相对寻址(Register relative addressing):使用一个寄存器中存放的地址作为起始点,加上一个常数作为偏移量。
5. 基址加变址寻址(Base + index addressing):使用基址寄存器和变址寄存器相加得到内存地址。
6. 相对基址加变址寻址(Base + index + offset addressing):使用基址寄存器、变址寄存器和一个常数作为偏移量相加得到内存地址。
举例:1. 直接寻址: MOV AX, [1000H] 表示将内存地址为1000H的数据复制到AX寄存器中。
2. 寄存器寻址: MOV AX, BX 表示将BX寄存器中的数据复制到AX寄存器中。
3. 寄存器间接寻址: MOV AX, [BX] 表示将内存地址为BX寄存器中的数据所指向的内存单元中的数据复制到AX寄存器中。
4. 寄存器相对寻址: MOV AX, [BX+2] 表示将内存地址为BX寄存器中的数据加上2所得到的地址中的数据复制到AX寄存器中。
5. 基址加变址寻址: MOV AX, [BX+SI] 表示将基址寄存器BX和变址寄存器SI中的数据相加得到的地址中的数据复制到AX寄存器中。
6. 相对基址加变址寻址: MOV AX, [BX+SI+2] 表示将基址寄存器BX和变址寄存器SI中的数据相加得到的地址再加上2所得到的地址中的数据复制到AX寄存器中。
微机原理8086汇编程序设计

03
MOV指令用于将源操作数复制 到目标操作数,ADD、SUB等 指令用于执行算术运算,CMP 指令用于比较两个操作数的大 小。
算术运算类指令
01
算术运算指令用于执行加法、减法、乘法和除法等算术运算。
02
指令包括ADD、SUB、MUL、DIV等。
03
ADD指令将两个操作数相加并将结果存储在目标操作数中, SUB指令从第一个操作数中减去第二个操作数,MUL指令将 两个操作数相乘并将结果存储在目标操作数中,DIV指令将第 一个操作数除以第二个操作数并将商存储在目标操作数中。
子程序设计的特点是能够提高程序的模块化程度,便于代码重用和维护。同时,子程序可以独立于主 程序进行测试和调试,提高了程序的可靠性。但是,子程序调用会增加程序的执行时间,需要注意优 化子程序的性能。
05 汇编语言与高级语言的接 口
C语言与汇编语言的混合编程
调用约定
在C语言中调用汇编代码时,需要遵循特定 的调用约定,如参数传递方式、寄存器使用 等。
嵌入汇编
在C语言中嵌入汇编代码,可以直接在C程序中编写 汇编指令,但需要注意语法和语义的正确性。
汇编模块
将汇编代码编写成独立的汇编模块,通过外 部函数调用的方式在C程序中使用。
汇编语言在嵌入式系统中的应用
实时性控制
01
汇编语言具有直接控制硬件的能力,适用于嵌入式系统中的实
时性控制,如中断处理、定时器控制等。
02
指令包括JMP、CALL、RET等。
03
JMP指令用于无条件跳转到指定的地址执行程序,CALL指令用于调用子程序并 将返回地址压入堆栈中,RET指令用于从子程序返回并恢复原来的执行流程。
串操作类指令
微机原理和接口技术应用8086指令系统和通用指令

《微机原理与接口技术》
4、标志传送指令 8086有四条标志传送操作指令:
1)LAHF(Load AH from flags)(了解) 格式:LAHF ; 功能:标志寄存器低八位传送给AH
(AH)←(PSW的低字节)
《微机原理与接口技术》
2)SAHF(Store AH into Flags)(了解) 格式:SAHF 功能:AH内容传送给标志寄存器低八位。 (PSW的低字节)←(AH)
注意:源操作数必须以寄存器间接寻址、变址寻址、 基址加变址寻址等方式表示的存储器操作数;目的操 作数为一个16位的通用寄存器。
例: LEA AX,[DI]
《微机原理与接口技术》
设(DI)=1005H
执行 结果:(AX)=1005H
例: LEA BX,[BX+SI+0F62H]
设(BX)=0400H,(SI)=003CH
《微机原理与接口技术》
微机原理和接口技术应用 8086指令系统和通用指令
3.4 8086的通用指令
• 可以分为以下六类: 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 控制转移指令 处理器控制指令
《微机原理与接口技术》
3.4.1 数据传送指令
《微机原理与接口技术》
包括:
通用传送指令;累加器专用传送指令;
(reg16)←(mem) (DS)←((mem)+2)
《微机原理与接口技术》
3)LES (Load pointer using ES )(了解) 格式:LES reg16 ,mem ; 功能:把源操作数指定的4个相继字节的数据 分别送指令指定的寄存器及ES寄存器中。
(reg16)←(mem) (ES)←((mem)+2)
8086应用举例

应用举例利用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*2ROM存储器FC000H-FFFFFH连续空间(16K*8)2764*2存储器的地址译码与读写控制电路真值表:3.2 IO接口设计I/O组织方式:按字节(BYTE)组织,但不支持字(WORD)读写操作。
采用偶地址寻址(A0 ,D0-D7)端口分配:8253 端口地址0020H,0022H,0024H,0026H8255A端口地址0030H,0032H,0034H,0036HADC0809端口地址:启动转换的控制端口0040H读转换结果端口0042H8255信号与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 03.3 中断控制:由于只有单中断源,可采用NMI(上升沿)作为中断请求输入。
8086汇编栈操作

8086汇编栈操作8086汇编栈操作栈结构⼀、说明栈是⼀种只能在⼀端进⾏插⼊或删除操作的数据结构。
栈有两个基本的操作:⼊栈和出栈。
⼊栈:将⼀个新的元素放到栈顶;出栈:从栈顶取出⼀个元素。
栈顶的元素总是最后⼊栈,需要出栈时,⼜最先被从栈中取出。
栈的操作规则:LIFO(Last In First Out,后进先出)。
⼆、8086栈8086CPU提供相关的指令,⽀持⽤栈的⽅式访问内存空间。
基于8086CPU的编程,可以将⼀段内存当作栈来使⽤。
栈操作⼀、指令介绍 push、pop 实质上就是⼀种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,⽽是由SS:SP指出的。
执⾏push和pop指令时,SP 中的内容⾃动改变。
在SS,SP中存放栈顶的段地址和偏移地址,⼊栈和出栈指令根据SS:SP指⽰的地址,按照栈的⽅式访问内存单元。
8086CPU中,PUSH(⼊栈)和 POP(出栈)指令:push ax:将ax中的数据送⼊栈中pop ax:从栈顶取出数据送⼊ax8086CPU中,有两个与栈相关的寄存器:栈段寄存器SS - 存放栈顶的段地址栈顶指针寄存器SP - 存放栈顶的偏移地址SS:SP - 指向栈顶元素。
注:(以字为单位对栈进⾏操作)⼆、原理解析1、例:设将10000H~1000FH内存当作栈来使⽤……2、⼊栈操作3、出栈操作三、栈的说明案1、存⼊栈顶指针、栈的空间为10010H~10000H。
栈的偏移量每次减去获取的数据⼤⼩。
mov ax, 1000Hmov ss, axmov sp, 0010H2、ax,bx,存⼊数据mov ax, 001AHmov bx, 001BH3、将数据存⼊栈内、从1000FH开始存。
push axpush bx4、取出栈内数据存⼊ax,默认会取指针1000CH存⼊的数据,取出数据后。
由于sp+2、指针发⽣变化指针移动到1000EH。
- 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时,就执行一次。
两部分协调工作完成系统的温度控制。