DF08086任务七
- 格式:doc
- 大小:48.00 KB
- 文档页数:2
8086指令表表2-2算术运算指令表2-4 串操作指令表2-5程序转移指令表2-7串操作指令中寄存器和标志位的⽤途1.设BL=0FFH,执⾏指令“SAR BL , 1”后,BL中的内容是(0FFH)。
2.设SP=1300H,AX=200H,执⾏指令“POP AX”后,SP寄存器的内容为(1302H)。
3.⼗进制数的-1的8位⼆进制补码,⽤⼗六进制数表⽰是(D)A.01HB.8FHC.0FEHD.0FFHMOV⽤法总结⾮法操作:1.两个操作数都是存储器操作数2.src是⽴即数,dest是段寄存器3.两个操作数都是段寄存器MOV指令⽤法的举例:MOV AX , CX ;段寄存器⾄通⽤寄存器MOV AL , 125 ;⽴即数⾄寄存器MOV MEM , 15 ;⽴即数⾄存储器,直接寻址MOV SI , BX ;寄存器⾄寄存器MOV DS , AX ;通⽤寄存器⾄段寄存器(CS不⾏)MOV [BX] , 50H ;⽴即数⾄存储器,寄存器间接寻址MOV MEM , AX ;寄存器⾄存储器,直接寻址MOV MEM , DS ;段寄存器⾄存储器,直接寻址MOV ISP[BX] , CX ;寄存器⾄存储器,基址寻址MOV AX , DISP[SI] ;存储器⾄寄存器,变址寻址MOV DS , MEM ;存储器⾄段寄存器,直接寻址MOV AX , DISP[BX] [SI] ;存储器⾄寄存器,基址变址寻址标志位1.CF:进位标志位。
当进⾏加法或减法运算时,最⾼位发⽣进位或借位,CF=1;否则,CF=0。
2.PF:奇偶标志位。
当运算结果的最低有效字节中“1”的个数为偶数时,PF=1;为奇数时,CF=0。
3.AF:辅助进位位。
在减法或加法操作中,低4位向⾼4位有进位、借位发⽣时,AF=1;否则,AF=0。
4.ZF:零标志位。
ZF=1表⽰运算结果为零;否则ZF=0。
5.SF:符号标志位。
SF=1表⽰运算结果的最⾼位为1(即为负数);否则SF=0。
8086语言顺序程序设计8086是Intel8086微处理器的型号,它采用x86命令集,是早期个人计算机的重要组成部分。
8086语言顺序程序设计是使用8086汇编语言进行程序设计的过程,它是一种低级编程语言,通过直接控制计算机硬件来完成特定任务。
1.寻址方式在8086语言顺序程序设计中,可以使用多种寻址方式来访问内存数据,例如直接寻址、寄存器间接寻址、寄存器相对寻址等。
其中,直接寻址和寄存器间接寻址是使用最为广泛的,直接寻址通过给出内存地址来访问数据,寄存器间接寻址通过给出寄存器中存放的地址来访问数据。
2.数据传送数据传送是编程中最基本的操作之一、8086提供了多条数据传送指令,可以将数据从一个地方传送到另一个地方。
常用的数据传送指令有MOV、XCHG等。
MOV指令可以将一个数据从源操作数传送到目的操作数,XCHG指令可以交换两个操作数的值。
3.算术运算8086提供了多条算术运算指令,可以进行加法、减法、乘法和除法等运算。
例如,ADD指令可以用于两个操作数的加法运算,SUB指令可以用于两个操作数的减法运算,MUL指令可以用于两个操作数的乘法运算,DIV指令可以用于两个操作数的除法运算。
4.逻辑运算8086还提供了多条逻辑运算指令,可以进行与、或、非、异或等逻辑运算。
例如,AND指令可以用于两个操作数的与运算,OR指令可以用于两个操作数的或运算,NOT指令可以用于对一个操作数进行非运算,XOR指令可以用于两个操作数的异或运算。
5.循环循环是程序中常用的结构之一,8086提供了多条循环指令,可以根据特定条件来重复执行一些程序片段。
常用的循环指令有LOOP、LOOPE/LOOPZ、LOOPNE/LOOPNZ等。
其中,LOOP指令可以根据CX寄存器的值来自动减1并跳转到指定的标号处。
6.过程过程是一组有关联的指令的集合,适用于在程序中被反复调用的任务。
8086提供了CALL和RET指令,可以实现过程的调用和返回。
8086/8088常用助记符指令类型助记符目的源功能注释数据传送MOV X X 把数据从源操作数传送到目的操作数1.两个操作数不能同时为内存操作数,也不能同时为立即数,目的操作数不能为立即数2两个操作数的类型须一致3立即数不能直接传入段寄存器4CS,IP不能作目的操作数5段寄存器之间不能直接传送PUSH X把指定的寄存器/内存单元的内容压入堆栈1.按字操作,CS能入栈内存不能直接寻址.P-2→SP,再写入栈顶POP X从栈顶弹出一字到指定的寄存器/内存单元1.同上2.先弹出一字,再SP-2→SP XCHG 寄寄/内两操作数互换内容不能用立即数和段寄存器XCHG 寄指定寄存器同累加器互换内容IN AC 端口号从指定端口送数到AL端口号为立即数,地址为8位端口号在DX中,地址为16位OUT 端口号 AL从AL送数到指定端口LEA 寄内存LDS 寄内存LES 寄内存把内存偏址送指定寄存器把内存低2字节送寄存器,高2字节送DS(ES)只能用通用寄存器,不能用段寄存器LAHF把标寄低8位送AHSAHF把AH送标寄低8位PUSHF标寄入栈POPF栈顶弹出进标寄算术运算ADD X X加法(和送目的操作数)加减1.2.同MOV3.段寄存器不能作操作数4.调正在AL中进行,并必需紧跟在运算之后执行.5.比较运算同减法,结果不存,而仅影响标志寄存器6.乘除法的目的操作数隐含是ACAL*乘数→AX, AX*乘数→DX AX,AX/除数→AL, 余数在AH中DXAX/除数→AX, 余数在DX中7.加1减1指令把操作数当无符号数,其他加减指令是否为有符号数要由程序设计需要设定ADC X X带进位加法INC X 指定的寄/内的内容加1AAA分离BCD码调正(AL)DAA组合BCD码调正(AL)SUB X X减法SBB X X带借位减法DEC X指定的寄/内的内容减1NEG X指定的寄/内的内容求补CMP X X 比较AAS分离BCD码调正(AL)DAS组合BCD码调正(AL)MUL 寄/内不带符号乘法IMUL 寄/内带符号整数乘法AAM 分离BCD码调正(AL)DIV 寄/内不带符号除法IDIV 寄/内带符号整数除法AAD非组合BCD码调正CBW扩展AL中的符号位到AHCWD扩展AX中的符号位到DX类型助记符目的源功能注释逻辑运算NOT X 对字或字节按位取反 1.2.3同上4.按位操作5.AND1不变(保持),AND0置0OR1置1,OR0不变(保持)自身与或,结果不变(保持),影响标志位, 自身XOR常用于清零XOR 1取反,XOR 0不变AND X X对字或字节按位与操作OR X X 对字或字节按位或操作XOR X X对字或字节按位异或操作TEST X X同AND,但结果仅影响标寄而不存目的操作数移位和循环移位SHL 寄/内 1/CL按位左移 CF←M←0 1.循环或移位的次数为1或CL中的数2.SHL一次,原数乘2SHR一次,原数除23.目的操作数不能是立既数SAL 寄/内 1/CL按位左移 CF←M←0SHR 寄/内 1/CL逻辑右移 0→M→CFSAR 寄/内 1/CL算术右移→M→CFROL 寄/内 1/CL循环左移 CF← ←M ←ROR 寄/内 1/CL循环右移 CF← →M →RCL 寄/内 1/CL带进位循环左移←CF←M←RCR 寄/内 1/CL带进位循环右移→CF→M→重复前缀REP重复后面字串指令,直到CX=0一般与字串指令联合使用REPE/REPZ当相等/为零时重复REPNE/REPNZ当不相等/不为零时重复MOVSB/MOVSW字符串传送 1.源串偏址在SI中,目的串偏址在DI中.2.每次自动修改SI,DI 内容3.装入和存储是对AX(AL)操作CMPSB/CMPSW字符串比较SCASB/SCASW字符串扫描LODSB/LODSW字符串装入STOSB/STOSW字符串存储转移JMP X无条件转移到指定内存地址操作数前可带NEAR或FAR前缀条件转移(无符号数)JA/JNBE X高于/不低于,不等于由比较和减法指令的结果JA/JNBE 表示二者等价JAE/JNB X大于等于/不低于JB/JNAE X低于/不高于,不等于TBE/JNA X低于等于/不高于条件转移(带符号数)JG/JNLE X大于/不小于等于JGE/JNL X大于等于/不小于JL/JNGE X小于/不大于不等于JLE/JNG X小于等于/不大于条件转移JE/JZ X等于/为零JNE/JNZ X不等于/不为零条件转移JC/JNC X有进位CF=1/无进位CF=0由影响标志位的操作结果JC/JNC表示二者是两个不同用法JO/JNO X有溢出OF=1/无溢出OF=0JP/JPE X奇偶性为偶PF=1JNP/JPO X奇偶性为奇PF=0JS/JNS X符号位为1/符号位为0FR15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZF AF PF CF 溢出方向符号零半进位奇偶进位类型助记符目的源功能注释LOOP X[CX]-1→[CX],[CX]≠0转移到X由CX决定循环次数循环LOOPZ/LOOPE X [CX]-1→[CX],[CX]≠0且ZF=1转移到X为零/相等时循环LOOPNZ/LOOPNE X[CX]-1→[CX],[CX]≠0且ZF=0转移到X非零/不相等时循环JCXZ X [CX]=0转移到X调用返回CALL 过程名调用指定地址开始的子程序对标寄无影响注意用堆栈保护断点RET子程返回RET XRETF标志操作CLC CF=0 (进位)STC CF=1CMC CF取反CLD DF=0 (方向)STD DF=1CLI IF=0 (中断)STI IF=1HLT暂停ESC交权INT 21H DOS功能调用AH=1键盘输入到AL,AH=2显示DL内容,AH=9显示DX为偏移量以$结尾的内存字串NOP空操作3个时钟伪指令功能特征符号 EQU 符号/表达式把右边的值赋予左边的符号1.不产生目标代码,不分配内存单元2.在同一源程序中同一符号不能用EQU重定义,可用=重定义符号=符号/表达式变量名 DB 表达式1,表达式2…. DWDD 定义字节(或字、双字)1.要求汇编分配内存单元,并把表达式1,表达式2…等存入2.为变量名分配这些内存单元的首字节地址段名SEGMENT [定位] [组合]['类别名'] :段名 ENDS 定义逻辑段定位隐含PARA,表示能被16整除ASSUME 段寄名:段名,段寄名:段名,….告诉汇编已定义的段与段寄的关系不产生目标代码,不分配内存单元,不为段寄存器存放段基值过程名 PROC [NEAR/FAR]:RET过程名 ENDP构造子程序最后语句RET不能少ORG 表达式定义下一个数据或指令的偏移量$表示偏移量的现行值宏名 MACRO 形参1,形参2,….ENDM宏定义宏名实参1,实参2,….宏调用一.指令由名字,操作码、操作数(地址)组成。
8086的内部结构
1.寄存器:
8086包含了8个16位的通用寄存器,分为AX、BX、CX、DX、SI、DI、BP和SP。
其中AX寄存器又被分为两个8位的子寄存器AH和AL。
这些寄
存器用于存储数据、地址和控制信息,可以进行各种算术和逻辑操作。
此外,8086还有一些特殊的寄存器,如标志寄存器FLAGS用于存储标志位,IP指令指针寄存器用于存储下一条指令的地址。
2.执行单元:
8086的执行单元包括指令执行单元、算术逻辑单元(ALU)和控制单元。
指令执行单元负责从内存中读取指令,并根据指令的操作码执行相应
的操作。
ALU用于进行算术和逻辑操作,如加减、与或非等。
控制单元用
于控制指令的执行顺序和分支跳转。
3.数据总线和地址总线:
8086有一个16位的数据总线,用于传输数据。
它还有一个20位的
地址总线,用于寻址内存中的数据和指令。
通过这两条总线,8086能够
与外部存储器、输入输出设备等进行数据的读写和通信。
4.总线控制器:
5.输入输出控制器:
6.内存管理单元(MMU):
7.控制信号产生器:
总的来说,8086的内部结构是一个复杂的系统,包括寄存器、执行单元、数据总线和地址总线、总线控制器、输入输出控制器、内存管理单元和控制信号产生器等组件。
这些组件相互协作,使得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 汇编指令集一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.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汇编是一种低级语言,用于编写微处理器的指令。
它是一种具有挑战性的编程语言,要求程序员具备深厚的计算机知识和技能。
在8086汇编项目中,我选择了一个有趣的主题——模拟太空探索。
通过编写汇编程序,我将带领读者进入一个未知的宇宙世界,探索外太空的奥秘。
我们需要创建一个太空船的模型。
我使用汇编语言编写了一段代码,用于绘制一个太空船的图形。
通过控制船只的移动和旋转,我们可以在屏幕上模拟太空中的飞行。
接下来,我编写了一些代码,模拟船只在太空中的行为。
船只可以前进、后退、转向和停止。
我使用8086汇编的指令来实现这些功能。
为了增加游戏的趣味性,我还添加了一些障碍物,例如流星和陨石。
船只需要躲避这些障碍物,否则会发生碰撞,导致任务失败。
在航行过程中,船只还需要收集能源和补给物资。
我编写了一段代码,实现了这个功能。
船只可以通过接触能源和补给物资来获得能量和物资,以继续飞行。
我编写了一个简单的故事情节,为整个游戏增添了一些情感和张力。
太空探险家需要完成一项任务,拯救一个被困在外太空的科学家。
在船只飞行的过程中,他们需要克服各种困难和挑战,最终成功救出科学家。
通过这个项目,我不仅学到了如何使用8086汇编语言编写程序,还体验到了太空探索的刺激和兴奋。
这个项目不仅考验了我的技术能力,还培养了我的团队合作和解决问题的能力。
通过8086汇编项目,我不仅增加了对汇编语言的理解和掌握,还体验到了太空探索的乐趣。
这个项目不仅提高了我的编程技能,还让我更深入地了解了计算机的工作原理和微处理器的指令集。
我相信,通过不断学习和实践,我可以在8086汇编领域取得更大的成就。
说明8086 cpu标志寄存器中9个标志位的作用。
下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!8086 CPU标志寄存器中9个标志位的作用在8086 CPU中,标志寄存器是非常重要的一部分,它包含了9个标志位,这些标志位对于CPU的运行和控制非常关键。
========================================== 5.编写一个数组排序(从小到大)的小程序,数组在程序中定义,程序先将原数组显示一遍,然后排序,再将排好序的数组显示一遍。
========================================== AAA SEGMENTBUF DB '6455412345$'L = $ - BUFary dw -897,345,6789,8654,-1234,-3456,-99,-678,987,567,32762,-12121,0,3434,4645,-234,23455,-100,100,1000,-1000dw 572,-2345,-6543,-1234,9999len dw ($-ary)/2ASSUME CS:AAA, DS:AAAMAIN PROC FARPUSH CSPOP DSLEA SI,ARYMOV CX,LENNEXT3: MOV BX,[SI]CALL DISPCALL SPACEADD SI,2LOOP NEXT3CALL CRLFCALL CRLFLEA SI,ARYMOV CX,LENCALL SORTLEA SI,ARYMOV CX,LENNEXT5: MOV BX,[SI]CALL DISPCALL SPACEADD SI,2LOOP NEXT5MOV AH,4CHINT 21H MAIN ENDPDISP PROCPUSH SIPUSH AXPUSH BXPUSH DXPUSH CXMOV CX,0CMP BX,0JNL NEXT1NEG BXMOV CX,1NEXT1: LEA SI,BUF+l-1MOV AX,BXMOV BX,10NEXT: MOV DX,0DIV BXADD DL,30HDEC SIMOV [SI],DLCMP AX,0JNE NEXTCMP CX,0JE NEXT2DEC SIMOV BYTE PTR [SI],'-'NEXT2: MOV DX,SIMOV AH,9INT 21HPOP CXPOP DXPOP BXPOP AXPOP SIRETDISP ENDPSORT PROCNEXTT: PUSH CXMOV DI,SIMOV AX,[SI]NEXT0: CMP AX,[DI]JL NEXTQMOV BX,AXMOV AX,[DI]MOV [DI],BXNEXTQ: ADD DI,2LOOP NEXT0MOV [SI],AXADD SI,2POP CXLOOP NEXTTRETSORT ENDPCRLF PROCPUSH AXPUSH DXMOV DL,13MOV AH,2INT 21HMOV DL,10INT 21HPOP DXPOP AXRETCRLF ENDPSPACE PROCPUSH AXPUSH DXMOV DL,' 'MOV AH,2INT 21HPOP DXPOP AXRETSPACE ENDPAAA ENDSEND MAIN=============================================== 6.编写一个程序,从键盘输入10个十进制数字字符,然后将这些数字加密存储在缓冲区BUFFER中。
一、 8086标志寄存器的概念和作用1.1 8086处理器是Intel推出的16位微处理器,内部包括多个寄存器,其中标志寄存器是其中重要的一部分。
1.2 标志寄存器用于存储处理器运算过程中产生的状态信息,如进位、溢出、零等状态位。
1.3 控制标志位是标志寄存器中的一部分,用于控制处理器的部分运算行为。
二、控制标志位的具体含义2.1 8086标志寄存器中的控制标志位包括:进位标志(CF)、零标志(ZF)、符号标志(SF)、溢出标志(OF)、平减标志(PF)、辅助进位标志(AF)和标志方向标志(DF)。
2.2 进位标志(CF)用于指示最高位运算的进位情况。
2.3 零标志(ZF)用于指示运算结果是否为零。
2.4 符号标志(SF)用于指示运算结果的符号。
2.5 溢出标志(OF)用于指示运算结果是否产生溢出。
2.6 平减标志(PF)用于指示运算结果中包含1的位数是否为偶数。
2.7 辅助进位标志(AF)用于指示低位到高位的进位情况。
2.8 方向标志(DF)用于指示字符串操作时的方向,0表示递增,1表示递减。
三、控制标志位的应用场景3.1 进位标志(CF)可以用于实现多字节数的加法运算。
3.2 零标志(ZF)可以用于判断两个数据是否相等。
3.3 符号标志(SF)可以用于判断运算结果的正负。
3.4 溢出标志(OF)可以用于检测运算结果是否溢出。
3.5 平减标志(PF)可以用于实现校验和验证功能。
3.6 辅助进位标志(AF)可以用于实现BCD码运算。
3.7 方向标志(DF)可以用于控制字符串指令的方向。
四、控制标志位的设置和清除4.1 通过特定的指令可以对控制标志位进行设置或清除。
4.2 通过STC指令可以将进位标志(CF)设置为1,通过CLC指令可以将进位标志(CF)清除为0。
4.3 类似地,STI指令用于启用中断,CLI指令用于禁止中断。
五、控制标志位的影响5.1 控制标志位的状态直接影响处理器运算的结果和行为。
习题7答案1.请编写完整8086汇编语言程序统计0801~0803班计算机原理考试成绩:●假设成绩存放在数据段0000H开始的85个字节单元中;●将成绩从高到低进行排序;●统计最高成绩和最低成绩,分别存放在字节变量max和min单元中;●统计不及格人数,存放在字节变量var1中;●统计90~99分人数,存放在字节变量var2中;●计算85人平均成绩,存放在字节变量avg中;data segment paraorg 0056Hmax db 0min db 0var1 db 0var2 db 0avg db 0sum dw 0cnt equ 85data endsss_seg segment stackdw 100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmov ax, datamov ds, axmov cx, cnt-1circle1: ; sort the scorepush cxmov bx, 0mov dx, 0circle2:mov al, [bx]cmp al, [bx + 1]jae nextxchg al, [bx + 1]mov [bx], almov dx, 1next:inc bxloop circle2pop cxcmp dx, 1jz main1loop circle1main1:mov max, [0000H] ; get the maxmov max, [0054H] ; get the minmov cx, cnt ; calculate var1, var2 and avgmov bx, 0circle3: mov al, [bx]mov ah, 0add sum, ax ; get the sum of scorecmp al, 90jae main2cmp al, 60jb main3jmp main4main2: inc var2 ; 90~99 numberjmp main4main3: inc var1 ; < 60 numbermain4: inc bxloop circle3mov dl, cntmov ax, sumdiv dlmov avg, al ; get the average scoremov ax, 4c00hint 21h ; return OSmain endpcode endsend main2 如图6-1所示,以IBM-PC/XT计算机为核心构成的炉温控制系统。
8086汇编指令汇总一、基本指令集1.MOV:用于将一个值从一个位置复制到另一个位置。
2.ADD:将两个操作数相加,并将结果存储在第一个操作数中。
3.SUB:将第二个操作数从第一个操作数中减去,并将结果存储在第一个操作数中。
4.INC:将指定的寄存器或内存位置的值加一5.DEC:将指定的寄存器或内存位置的值减一6.MUL:将两个操作数相乘,并将结果存储在累积寄存器中。
7.DIV:将累积寄存器的值除以指定的操作数,并将商存储在累积寄存器中,余数存储在另一个寄存器中。
二、数据传送指令1.MOVSB:从指定内存位置复制一个字节到另一个位置。
2.MOVSW:从指定内存位置复制一个字到另一个位置。
3.MOVSBW:从指定内存位置复制一个字节到另一个位置,并将其扩展为字。
4.LODSB:从指定内存位置加载一个字节到累积寄存器中。
5.LODSW:从指定内存位置加载一个字到累积寄存器中。
6.STOSB:将累积寄存器中的值存储到指定内存位置。
7.STOSW:将累积寄存器中的值存储到指定内存位置。
8.XCHG:交换两个操作数的值。
三、算术与逻辑指令1.AND:对两个操作数执行逻辑与操作,并将结果存储在第一个操作数中。
2.OR:对两个操作数执行逻辑或操作,并将结果存储在第一个操作数中。
3.XOR:对两个操作数执行逻辑异或操作,并将结果存储在第一个操作数中。
4.NOT:对指定的操作数执行逻辑非操作。
5.SHR:将指定操作数的位向右移动指定的位数。
6.SHL:将指定操作数的位向左移动指定的位数。
7.CMP:比较两个操作数的值,并设置相应的条件码。
四、控制转移指令五、字符串操作指令1.REP/REPE/REPZ:用于重复执行一些指令,并且在条件满足时继续执行,直到满足特定的条件。
2.MOVSB/MOVSW:从一个内存位置复制一个字节或字到另一个位置。
3.CMPSB/CMPSW:将两个内存位置的值进行比较。
4.SCASB/SCASW:在累积寄存器中查找指定的字节或字,并设置相应的条件码。
课程设计任务书学生姓名专业班级指导教师黄珍工作单位自动化学院课程设计题目七段码显示汇编语言程序设计初始条件:采用16位微处理器8086 CPU以及86系列微型计算机的指令系统;软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环境MF2KP。
要求完成的主要任务:设计汇编语言程序,实现七段码显示效果,具体功能要求如下:(1)数字0~9或A~F中的每个数字、字母用“¦”和“—”字符组成的“七段”码图形表示;(2)运行程序后,要求数字0~9或字母A~F依次循环显示;(3)单击“Q”或“q”键退出程序。
根据功能要求绘制程序流程图、编写完整的汇编语言程序并上机调试:撰写课程设计说明书。
课程设计说明书的撰写格式如下:(1)设计说明书包括封面、任务书(指导老师提供)、正文、参考文献(3~5篇)、附录(程序清单,要求有注释)、成绩评定表(指导老师提供)。
(2)说明书正文包含总体方案论证(算法说明);程序流程图设计及其说明;软件设计关键问题或程序段落的说明;程序调试说明、结果记录及分析;课程设计收获及心得体会。
(3)同一选题若为合作完成,设计说明书中需注明本人承担的设计部分。
(本次课程设计时间:2011年1月10日-21日,历时两周)指导教师签名:年月日系主任(或责任教师)签名:年月日目录1 总体方案论证 (1)1.1 七段数码管显示功能分析 (1)1.2 算法说明 (1)2 程序流程图设计及其说明 (3)2.1 程序流程图 (3)2.2 程序流程图说明 (4)3程序段落的说明 (5)3.1 数据段定义 (5)3.2 程序初始化 (5)3.3 清空显示屏 (5)3.4 重置光标 (6)3.5 数码显示处理工作 (6)3.6 取得计数并为下次循环准备 (6)3.7 一个数字的数码管显示 (6)3.8 显示程序 (7)3.9 程序延时部分 (7)3.10 判断键盘输入部分 (7)3.11 结束DOS以及跳出语句 (8)4 程序调试说明、结果记录及分析 (9)5 课程设计收获及心得体会 (13)参考文献 (14)附录 (15)七段码显示汇编语言程序设计1 总体方案论证1.1 七段数码管显示功能分析双击进入程序,运行显示DOS 界面。
8086总线操作、中断系统及总线请求2007年01月18日星期四 08:308086总线操作、中断系统及总线请求∙8086总线操作:8086微处理器与片外存储器或I/O接口进行数据传输时,经BIU执行8086规定的总线操作。
∙8086的中断系统:8086微处理器可处理256种中断。
∙8086总线请求:在一个系统中,若存在多个可控制总线的主模块时,总线使用权的转移存在着一个请求与响应的过程。
1. 8086总线操作总线周期的组成:8086的基本总线周期为4个时钟周期,每个时钟周期间隔称为一个T状态。
∙T1 状态:BIU将RAM或I/O地址放在地址/数据复用总线(A/D)上。
∙T2 状态:o读总线周期:A/D总线为接收数据做准备。
改变线路的方向。
o写总线周期: A/D总线上形成待写的数据,且保持到总线周期的结束(T4)。
∙T3, T4:对于读或写总线周期,AD总线上均为数据。
∙Tw: 当RAM或I/O接口速度不够时,T3与 T4 之间可插入等待状态 Tw 。
∙Ti : 当BIU无访问操作数和取指令的任务时,8086不执行总线操作,总线周期处于空闲状态 Ti 。
o8086最小方式下读写总线周期时序。
o ALE 信号在 T1 出现,表明一个总线周期开始,选通外部地址锁存器,锁存AD总线上的地址信息。
在RD#、WR#等信号的配合下,T3、T4期间完成数据访问。
o T3 上升沿检测READY信号是否有效,无效时在T3与T4间插入等待状态Tw。
2. 8086中断系统∙8086微处理器有处理256种中断的能力。
∙每个中断分配给一个中断类型码,在0~255之间,用一字节表示,也称为256种类型中断。
∙256种类型中断分为硬件中断和软件中断。
o硬件中断:外部硬件电路产生的中断。
o软件中断:8086操作过程中发生异常事件或执行中断指令INTn。
中断向量与中断向量表o中断向量:每种中断处理程序的入口地址称为中断向量。
o中断向量表:8086将内存最低地址的1K单元作为中断向量表,存放256种中断处理程序的入口地址,每个地o址占4字节。
8086指令集操作码-实验报告8086指令集操作码实验报告一、实验目的利用debug工具的e和u功能找出8086/8088指令系统的指令格式中各种操作码编码对应的指令功能。
二、实验预习1、每条指令1~6个字节不等2、指令的第一字节为操作码,规定指令的操作类型。
第二字节规定操作数的寻址方式接着以后的3~6 字节依据指令的不同取舍。
3、第一个字节的八个二进制位中前六位为操作码的主要部分,之后一位是D字段,然后是W字段,W指出操作数类型:W=0 为字节,W=1 为字,D指出操作数的传送方向:D=0 寄存器操作数为源操作数,D=1 寄存器操作数为目标操作数。
关于DOS的输入输出重定向:D:\>debug <in1.txt >out1.txtD:\>该命令使用了DOS的输入输出重定向功能,小于号(<)之后的文件名(in1.txt)表示debug命令的所有输入来自该文件(而原先它的输入是来自键盘);大于号(>)之后的文件名(out1.txt)表示debug命令的所有输出内容写入该文件(而原先这些输出是写到显示器)。
三、实验步骤1、基本要求部分A、试探法通过一步步逐个输入操作码来确定得到操作码00代表的指令为ADD,继续观察上面结果,了解D、W字段的作用B、利用DOS的输入输出重定向功能在记事本中写入保存为txt文件,在打开debug,输入生成输出文件,验证指令输出文件(由于文件太大,仅截取一小部分)关于结果的总结和分析详见实验总结2、较高要求部分A、寻址方式研究寻址方式可以采取与研究指令操作码相同的方法,先将操作码固定,变化第二字节即寻址方式部分即可。
B、利用C++生成输入文件只变化操作码的程序如下:#include<iostream>#include<iomanip.h>#include<fstream>using namespace std;int main(){ofstream f1("d:\\inin.txt");int i,j;for(i=0;i<16;i++){for(j=0;j<16;j++)f1<<"e 100 "<<hex<<i<<j<<endl<<"u 100 105"<<endl;}f1<<"q"<<endl;f1.close();return 0;}程序得到的输入输出文件部分截图:输入:输出:指令操作码与寻址方式均变化的程序如下:#include<iostream>#include<iomanip.h>#include<fstream>using namespace std;int main(){ofstream f1("d:\\inin2.txt");int i,j,k,v;for(i=0;i<16;i++){for(j=0;j<16;j++){for(k=0;k<16;k++){for(v=0;v<16;v++)f1<<"e 100 "<<hex<<i<<j<<""<<k<<v<<endl<<"u 100 105"<<endl;}}}f1<<"q"<<endl;f1.close();return 0;}此程序生成的输入文件将不同操作码及寻址方式排列出来便于总结程序得到的输入输出文件部分截图:输入:输出:四、实验总结操作码字段:前6位确定是什么操作,第7位为D字节,第8位为W字节。
8086汇编指令⼤全.标志寄存器:9个有效位,分 6个状态寄存器和 3个控制寄存器CF 当执⾏⼀个加法(减法使最⾼位产⽣进位(借位时 CF=1 否则CF=0PF 指令执⾏的结果低 8位有偶数个⼀时, CF=1 否则CF=0AF 当执⾏⼀个加法(减法使运算结果低 4位向⾼ 4位有进位(借位时 AF=1 否则AF+0ZF 当前运算结果为零, ZF=1 否则ZF=0SF 符号标志位OF 溢出标志位DF ⽅向标志位IF 中断允许位 IF=1时响应外部中断TF 跟踪标志位操作数:[⽬的操作数(OPD ,源操作数(OPS ] ;⽴即操作数,寄存器操作数,存储器操作数。
寻址⽅式:1 寄存器寻址例:INC AX ; MOV AX , BX2 寄存器间接寻址 (寄存器只能是 BX , DI , SI , BP ; [PA=(BX 、 DI 、 SI+DS》 4 或 BP+SS》4]3 寄存器相对寻址4 基址变址寻址5 相对基址变址寻址6 直接寻址7 ⽴即数寻址1 数据传送指令 mov注意:不允许在两个存储单元之间直接传送数据不允许在两个段寄存器之间传送数据不允许⽤⽴即数直接为段寄存器赋值不影响标志位不允许寄存器或存储单元到除 CS 外的段寄存器2 ⼊栈(出栈指令 PUSH (POP注意:PUSH 操作数不能是“⽴即数” POP 操作数不能是段寄存器CS不影响标志位先进后出单操作符3 交换指令 XCHG注意:只允许寄存器与存储单元之间的交换不影响标志位4 换码指令 XLAT5 地址传送指令 LEA :偏移地址6 数据段指针送寄存器 LDS :低地址的字送指定的通⽤寄存器 (SI 、⾼地址的字送 DS上三指令不影响标志位8 标志寄存器传送指令LAHF :标志寄存器低⼋位送AHSAHF :AH 送标志寄存器低⼋位PUSHF :标志寄存器压⼊堆栈POPF :栈顶内容送标志寄存器9 加法指令ADD⽬的操作数只能是寄存器或存储单元对 CF,OF,SF,PF,ZF,AF 有影响10 加 1指令INC对 OF,SF,PF,ZF,AF 有影响11 带位加法指令ADC在进⾏单精度运算时⽤ ADD 指令,在⾼精度低位运算时⽤ ADD 、⾼位⽤ADC OPD=OPD+OPS+CF12 减法指令SUB对 CF,OF,SF,PF,ZF,AF 有影响13 带借位减法指令SBBOPD=OPD— OPS — CF 对 CF,OF,SF,PF,ZF,AF 有影响对 CF,OF,SF,PF,ZF,AF 有影响14 减 1指令 DEC15 ⽐较指令 CMP16 求补指令 NEG17 ⽆符号乘法指令MUL字节操作:AX=AL*OPS字操作:DX , AX=AX*OPS18 有符号乘法指令 IMUL19 ⽆符号除法指令DIV字节的操作:AL=AX/(OPS 的商AH=AX/(OPS 的余数字的操作:20 有符号除法 IDIV21 字节转换为字指令CBW把 AL 中的符号位扩展到 AH 中,如果 AL 的最⾼位为 0,则 AH=00H,如果最⾼位为 1,则 AH=FFH22 字转换为双字指令 CWD23 压缩的 BCD 码调整指令DAA 加法的⼗进制调整指令DAS 减法的⼗进制调整指令24 ⾮压缩的 BCD 码调整指令AAA 加法的 ASCII 调整指令AAS 减法的 ASCII 调整指令AAM 乘法的 ASCII 调整指令AAD 除法的 ASCII 调整指令 25 逻辑与运算指令ADDORNOT TEST (OPD 和 OPS 的内容不变 26 移位指令逻辑左移与算术左移 SHL 、 SAL (低位补 0算术右移 SAR (⾼位不变、 CF 为最后移⼊的值逻辑右移 SHR (⾼位补 0、 CF 为最后移⼊的值 27 循环移位左移 ROL (CF 为最后移⼊的值右移 ROR (CF 为最后移⼊的值带进位循环左移 RCL (CF+OPD ⼀起左循环带进位循环右移 RCR (OPD+CF ⼀起右循环 28 ⽆条件转移指令下JMP JMP SHORT OPD(IP=IP+8位位移量JMP NEAR PTR OPD(IP=IP+16位位移量上⼆条指令⽬的地址是IP=OPD+IP JMP WORD PTR O PD (IP=EAJMP FAR PTR OPD(IP=OPD的段内偏移地址 CS=OPD段地址JMP DWORD PTR OPD(IP=EA CS=EA+2 29 条件转移指令JZ (JE 结果为 0则转移(ZF=1JNZ (JNE 结果不为 0则转移(ZF=0JS 结果为负则转移(SF=1JNS 结果为正则转移(SF=0JO 溢出则转移(OF=1JNO 不溢出则转移(OF=0JP (JPE 奇偶位为 1则转移(PF=1JNP (JPO 奇偶位不为 1则转移(PF=0JC (JNAE , JB 低于且不等于或进位位为 1则转移(CF=1JNC (JNE , JNB ⾼于或等于或进位位为 0则转移(CF=030。
8086汇编语言习题解答8086/8088汇编语言习题解答第一章1.1、试根据自己使用计算机的经历,列举几个必须使用或最好是使用汇编语言编制程序的事例。
1.2、试完成下列数制间的转换⑴、十进制数转换为8位二进制数十进制:100对应二进制:01100100B十进制:56对应二进制:00111000B十进制:111对应二进制:01101111B十进制:120对应二进制:01111000B十进制:70对应二进制:01000110B⑵、8位二进制数(无符号数)转换为十进制数二进制:01010101B对应十进制:85二进制:10101010B对应十进制:170二进制:11110000B对应十进制:240二进制:00001111B对应十进制:15⑶、十进制数转换为十六进制数十进制:40对应二进制:00101000B十进制:80对应二进制:01010000B十进制:105对应二进制:01101001B十进制:114对应二进制:01101101B十进制:207对应二进制:11001111B1.3、试把下面用补码表示的二进制数转换为对应的十进制真值二进制补码:01111000对应的十进制值数真值:+120二进制补码:11011001对应的十进制值数真值:-39二进制补码:10000001对应的十进制值数真值:-127二进制补码:10001000对应的十进制值数真值:-120二进制补码:00100111对应的十进制值数真值:+39二进制补码:11110000对应的十进制值数真值:-161.4、由键盘输入字符通常都是以该字符的ASCII码形式表示的。
若现在从键盘上输入十六进制数0~F,那么应如何处理才能把十六进制转换为4位二进制数0000~1111.答:将键盘输入的数0~F的ASCII码,每输入一个字符,减去30H后,再存入内存,这样就完成了把从键盘上输入的十六进制ASCII 码转换为4位二进制数0000~1111.1.5、试分别判断下列各组数据中哪个数据最大?哪个最小?①、A=0.101B B=0,101D C=0,101H②、A=1011B B=1011D C=1011H答:第①组:A=1×21-+1×23-=0.625B=0.101C=1×161-+163-=0.0625+0.00024414=0.06274414所以A最大,C最小第②组,B最大,A=B最小1.6、现有一个二进制数10110110.若将该数看着是无符号数、原码表示的带符号数、补码表示的带符号数,它对应的十进制数的真值是多少?答:10110110.的无符号数的十进制是:+182;10110110.的原码带符号数的十进制是:-5410110110.补码表示的带符号数的十进制是:+741.7、下列各组数据均为十进制数,先将各数据转换为补码表示的带符号数,然后用补码的加减运算分别完成下列各小题,并用十六进制数形式回答运算结果。
某股份有限公司是一家生产彩电和空调等家用电器的企业。
公司2005年l2月31日的股东权益总额为20亿元,负债总额为20亿元,资产总额为40亿元。
2006年至2009年,公司每年l月1日新增长期银行借款l0亿元,年利率为5%,期限为l0年,每年年末支付当年利息。
2006年至2009年,公司实现的销售收入、净利润和息前税后利润,以及每年年末的股东权益、长期借款和资产总额如下(单位:万元):
假定:
(1)公司股东权益的资金成本为8%。
(2)公司负债除长期银行借款外,其他均忽略不计;公司长期借款利息(利率均为5%)自2006年起计入当期损益。
(3)公司及所在行业的有关指标如下:
(4)公司的有关指标:
要求:
1.计算2009年的资产负债率、总资产周转率、净资产收益率和销售增长率,并简要分析公司的偿债能力、营运能力、盈利能力和发展能力。
2.计算2009年的投资资本收益率、加权平均资金成本(假定投资资本总额按年末数计算)。
3.分析评价公司以会计利润最大化为核心的财务战略目标的实现情况。
1、2009年
资产负债率=总负债/总资产=600000/836000*100%=71.77%
偿债能力分析:资产负债率逐年增加,且高于行业平均水平,说明该企业的偿债能力低于行业平均水平。
总资产周转率=营业收入净额/平均资产总额*100%=500000 /(720000+836000)/2*100%=64.27%
营运能力:该公司的资产周转速度逐年提高,但仍然低于行业的平均水平,说明营运能力不强。
净资产收益率=(息税前利润-负债×负债利息率)×(1-所得税率)/净资产
=(36100-600000*5%)*(1-25%)/(836000-600000)= 7.02%
盈利能力:从净资产收益率来看,盈利能力逐年提高,但仍未达到行业平均水平,表明公司盈利能力不强。
销售增长率==(500000-350000)/ 350000=42.86%
发展能力:从销售增长率来看,公司销售增长速度逐年降低,但仍然高于行业平均水平,表明公司发展能力较强。
2、
3.公司实现的会计利润和净资产收益率均稳步增长,公司盈利能力逐年增强。
说明公司初步实现了会计利润最大化的财务战略目标。