1、 微机原理与接口技术微机原理与接口技术课程特点课程特点 综合性强综合性强 数字电路、汇编语言程序设计和可编程I/O接口组成 本课程的“三大基石”。使用基本逻辑部件和可编程I/O接口,组成计算机 系统的各种功能电路。使用汇编语言设计控制或者驱动程序,实现电路 的控制功能。三方面知识的有机结合,综合应用。实践(验)性强实践(验)性强 本课程的理解程度、学习效果和学习兴致,与实验操作密切相关。理论知识指导实验操作,实验结果验证理论,通过实验寻找感觉,在深入探索的基础上,有所新认识、新发现。课程主要内容课程主要内容以8088(6)微处理器为核心,介绍其工作原理和接口技术。内容有:CPU、总线控制器、时
2、钟发生器、各种半导体存储器和一系列可编程I/O接口。实验设备与方法实验设备与方法 由PC系统和扩展I/O接口实验系统组成。程序设计使用汇编语言。课程考核课程考核由以下三个方面组成:实验考核:考核对待实验的态度、实验设计与调试 的能力、实验报告的撰写水平等。出勤考核:期中考核:期末考核:第一章第一章 CPU的逻辑结构的逻辑结构一、一、8086的程序模型的程序模型 程序模型程序模型 CPU内部的寄存器阵列,通过汇编语言操作。程序模型图解程序模型图解2.1 通用寄存器通用寄存器 AL AH BL BH DL DH CL CH15 8 7 0AXBXCXDX IP SP BP DI SI15 02.2
3、 段寄存器段寄存器 SS ES DS CS15 0二、内存结构图解二、内存结构图解 字节单元结构字节单元结构 A a1100100B 64H 1007 0100H101H102H103H104H 字单元结构字单元结构 AB ab 0F490H 64ABH 102415 0 100H 102H 104H 106H 108H 数据存储格式数据存储格式小端存储格式小端存储格式 低字节存放低地址单元,高字节存放高地址单元。大端存储格式大端存储格式 低字节存放高地址单元,高字节存放低地址单元。3A 5D7 0100H101H102H103H104H3A5DH 的小端存储格式的小端存储格式 5D 3A7
4、0100H101H102H103H104H3A5DH 的大端存储格式的大端存储格式 练习:将字单元结构转换成小端存储格式练习:将字单元结构转换成小端存储格式 AB ab 0F490H 64ABH 102415 0 100H 102H 104H 106H 108H 内存分段结构内存分段结构 代码(CS)段:源程序存储区。数据(DS)段:操作数存储区。附加(ES)段:数据段扩展。堆栈(SS)段:数据后进先出的存储区CS存储区DS存储区SS存储区ES存储区 物理地址和逻辑地址物理地址和逻辑地址 物理地址物理地址:每个内存单元唯一的地址,由CPU输出。逻辑地址逻辑地址:由段地址和偏移地址组成。编写源程
5、序使用的地址。每个单元享有多个逻辑地址。段地址段地址:段区20位起始物理地址的高16位部分。由CS、DS、ES、SS之一提供。偏移地址偏移地址:段内部单元偏离段起始单元的距离。由BX、SI、DI、BP等提供。逻辑地址与物理地址的转换逻辑地址与物理地址的转换 物理地址段地址10H偏移地址20位段首物理地址练习:将下列4个逻辑地址转换成物理地址。CS1000H,BX1004H;DS208H,SI 284H;ES3406H,DI 23A4H;SS0A05H,BP 10B4H;第二章第二章 汇编语言的寻址方式汇编语言的寻址方式计算机的“方言方言”,与CPU逻辑结构密切相关。编程语句:各种操作功能的指令
6、。例如:四则运算指令、逻辑运算指令等。汇编语言?汇编语言?指令中说明源、目操作数来源的符号。指令中说明源、目操作数来源的符号。汇编语言的核心内容。汇编语言的核心内容。寻址方式寻址方式 指令的基本格式指令的基本格式 OP DST,SRC;说明:OP:操作码(MOV、ADD、SUB)DST:目地址,目操作数。SRC:源地址,源操作数。源操作数:源操作数:来自寄存器、内存单元、立即数和I/O 端口之一。目操作数:目操作数:来自寄存器、内存单元和I/O端口之一。源、目操作数的字长相等。执行结果存入目地址,源操作数不变。源、目操作数不能同为内存单元或I/O端口。目操作数不能是立即数。汇编语言的基本汇编语
7、言的基本“军规军规”:主要的寻址方式主要的寻址方式4.1 立即寻址 源操作数是8/16位直观数据(“现金”)。MOV AL,100;MOV AH,64H;MOV AX,1000H;MOV BL,10011B;MOV BH,A;MOV BX,1000;MOV CL,2;MOV CH,2;MOV CX,2;指出以下指令的错误MOV BL,256;MOV BH,100H;MOV BX,65536;MOV CL,129;MOV CH,128;MOV 100H,CX;4.2 寄存器寻址寄存器寻址 源或目操作数来自8/16位寄存器。MOV AL,DL;ADD AH,CH;SUB AX,BX;SUB SI,
8、BX;ADD BP,AX;AND BX,DI;OR CX,SP;MOV DS,DX;MOV BX,ES;以下指令错误:MOV SI,BL;ADD BH,AX;SUB DX,CH;AND CX,IP;4.3 寄存器间址寄存器间址 源或者目操作数来自内存单元。指定:BX、SI、DI、BP提供偏移地址;CS、DS、ES、SS提供段地址。间址单元汇编符号间址单元汇编符号MEM:BX、BP、SI、DI。其他非法!其他非法!例例1:阅读下列指令,图解执行结果。:阅读下列指令,图解执行结果。MOV AX,1020H;MOV DS,AX;MOV BX,AX;MOV BX,AH;MOV BX+1,AL;AHAL
9、1020H:1020H 1021H 例例2:图解下列指令执行结果。:图解下列指令执行结果。MOV CX,1ABCH;MOV ES,CX;MOV SI,1020H;MOV ES:SI,CL;MOV ES:SI+1,CH;段名前缀CLCH1ABCH:1020H 1021H 例例3:图解下列指令执行结果。:图解下列指令执行结果。MOV CX,1ABCH;MOV ES,CX;MOV BP,1020H;MOV BP,CL;MOV BP+1,CH;省略段名前缀省略段名前缀寄存器间址单元的段默认:寄存器间址单元的段默认:默认默认DS段段 MOV SI,CL;MOV DI,AL;MOV BX,DL;MOV D
10、S:SI,CL;MOV DS:DI,AL;MOV DS:BX,DL;默认默认ES段段 MOV ES:BP,DL;MOV BP,AL;默认默认SS段段 PUSH AX;AX SS:SP字单元 SP=SP+2 POP DX;DX SS:SP字单元 SP=SP-215 0SS:SP高地址方向AX练习:阅读指令,指出内存单元的段属性。练习:阅读指令,指出内存单元的段属性。MOV CS:SI,CL;MOV ES:SI,CL;MOV AX,DI;MOV DS:BP,512;MOV BP,256;4.4 直接寻址直接寻址 源或者目操作数来自内存单元。指令直接给出偏移地址。CS、DS、ES、SS提供段地址。例
11、:设DS=100H,ES=200H,CS=300H,图解执行结果。MOV AX,-2;MOV ES:100H,AH;MOV 101H,AL;MOV CS:200H,-129;小端存储0FFH0FEH7FH0FFH7 0200H:100H100H:101H300H:200H 201H4.5 I/O端口寻址(输入端口寻址(输入/输出指令)输出指令)OUT 40H,AL;IN AL,40H;4.5.1 直接寻址直接寻址 只能使用只能使用8位地址,寻址位地址,寻址I/O端口。端口。OUT 64,AL;IN AL,64;比较前后两组指令之区别。比较前后两组指令之区别。OUT 10H,AX;IN AX,1
12、0H;OUT 16,AX;IN AX,16;错误的直接寻址:错误的直接寻址:OUT 100H,AL;IN AL,100H;OUT 256,AX;IN AX,256;4.5.2 I/O端口间接寻址端口间接寻址 由由DX指定指定I/O端口。端口。MOV DX,100H;端口地址OUT DX,AL;输出数据IN AL,DX;输入数据MOV DX,20H;OUT DX,AX;16位I/O端口IN AX,DX;例例1:指出端口字长和寻址方式。:指出端口字长和寻址方式。OUT DX,AL;IN AL,DX;OUT 20H,AL;IN AL,20H;8位端口,间址8位端口,直接寻址AL7 0端口7 0 20
13、H端口7 0 DXOUT DX,AX;IN AX,DX;OUT 100,AX;IN AX,100;例例2:指出端口寻址方式和字长。:指出端口寻址方式和字长。16位端口,间址16位端口,直接寻址AX15 0端口15 0 100端口15 0 DX例例3:指出下列指令的错误。:指出下列指令的错误。OUT DX,AH;IN AH,DX;OUT 100H,AL;IN AX,CX;OUT DX,BL;例例4、图解执行结果。、图解执行结果。MOV AL,15;OUT 2,AL;IN AL,2;MOV AH,AL;MOV DS,AX;MOV 2,AX;例例5、比较下列指令。、比较下列指令。MOV DX,AL;
14、OUT DX,AL;IN AX,256;MOV AX,256;IN AL,DX;MOV AL,DX;MOV DX,AX;OUT DX,AX;8086指令系统(编程语句集合)指令系统(编程语句集合)一、数据传送类指令一、数据传送类指令 通用寄存器赋值 MOV AL,100;MOV CH,64H;MOV AX,1000H;MOV BL,10010011B;MOV BH,A;MOV BX,1000;MOV CL,2;MOV CH,125;MOV CX,1000;错误的赋值:MOV BL,256;MOV CH,-129;MOV DX,65536;MOV DS,1290H;MOV ES,1280H;军规
15、:段寄存器不能用立即数赋值!军规:段寄存器不能用立即数赋值!段寄存器赋值段寄存器赋值 令DS100H MOV AX,100H;MOV DS,AX;令ES1000H MOV CX,1000H;MOV ES,CX;令SS2100H MOV BX,2100H;MOV SS,BX;令CS4000H MOV SI,4000H;MOV CS,SI;军规:程序员不能赋值军规:程序员不能赋值CS,由系统程序赋值。,由系统程序赋值。小结:小结:段寄存器不接受立即数。段寄存器接受寄存器赋值。CS不能软件赋值。内存单元赋值(写内存)内存单元赋值(写内存)3.1 使用寄存器赋值使用寄存器赋值 MOV BX,AX;MO
16、V BP,DX;MOV ES:DI,CL;MOV CS:100H,CH;分析内存单元字长、逻辑和物理地址。3.2 使用立即数赋值使用立即数赋值 MOV BX,100H;MOV ES:SI,256;MOV SI,129;MOV CS:DI,128;分析内存单元字长、逻辑和物理地址。具有二义性的立即数赋值:具有二义性的立即数赋值:MOV BX,10H;MOV ES:SI,255;MOV SI,2;MOV CS:DI,2;如何解决二义性?如何解决二义性?使用说明符定义单元字长:使用说明符定义单元字长:MOV Byte PTR BX,10H;MOV Word PTR ES:SI,255;MOV Wor
17、d PTR SI,-2;MOV Byte PTR CS:DI,-2;3.3 读内存数据读内存数据 MOV AL,BX;MOV BX,ES:SI;MOV CH,BP;MOV DX,CS:DI;MOV DL,100H;分析内存单元字长、逻辑和物理地址。I/O 端口操作端口操作4.1 存取存取8位位I/O端口端口OUT DX,AL;IN AL,DX;OUT 20H,AL;IN AL,20H;4.2 存取存取16位位I/O端口端口OUT DX,AX;IN AX,DX;OUT 20H,AX;IN AX,20H;编写指令序列,完成下列操作。(实验素材)编写指令序列,完成下列操作。(实验素材)AX 与 BX
18、 交换。20H端口与 BH 交换。BX 与 20H端口交换,16位字长。DI 与 SI 交换,8位字长。SI 与 ES:BX 交换,16位字长。DS 与 ES交换。两个16位端口交换,地址20H和30H。两个8位端口交换,地址200H和300H。堆栈与堆栈存取堆栈与堆栈存取5.1 堆栈 在内存开设,后进先出。以字(16位)为单位存取。SS提供段地址,SP提供偏移地址。SP当前值指示当前栈底或者栈顶单元。5.2 堆栈存取5.2.1 数据入栈格式:PUSH SRC;功能:SP=SP-2 SRC SP 军规:立即数入栈非法!军规:立即数入栈非法!正确的入栈操作:PUSH AX;PUSH BX;PUS
19、H ES:SIPUSH CS;错误的入栈操作:PUSH AH;PUSH BL;PUSH 1000PUSH 100H;5.2.2 数据出栈格式:POP DST;功能:DST SP SP=SP+2军规:军规:CS为目地址非法!为目地址非法!正确的出栈操作:POP AX;POP BX;POP ES:SIPOP DS;错误的出栈操作:POP AH;POP BL;POP CSPOP 100H;例1:完成DS与ES交换。解:应用堆栈存取实现 PUSH DS;PUSH ES;POP DS;POP ES;数据交换数据交换格式:格式:XCHG DST,SRC;不支持段寄存器。不支持立即数。支持8/16位数据交换
20、。正确的数据交换:正确的数据交换:XCHG AX,CX;XCHG BX,DX;XCHG ES:SI,DLXCHG DH,CS:DI;错误的数据交换:错误的数据交换:XCHG AX,DS;XCHG BH,CX;XCHG ES:SI,100H;XCHG BX,CS:DI;二、算术运算类指令二、算术运算类指令 加法指令格式1:ADD DST,SRC;功能:DST=DST+SRC说明:执行后,设置ZF、SF、CF和OF标志值。ZF=0,运算结果不等于0。ZF=1,运算结果等于0。SF=0,运算结果0。SF=1,运算结果0。CF=0,运算结果无进/借位。CF=1,运算结果产生进/借位。OF=0,运算结果
21、未溢出。OF=1,运算结果溢出。PF=0,运算结果中含奇数个1。PF=1,运算结果含偶数个1。AF=0,运算结果D3位无进/借位。AF=1,运算结果D3位产生进/借位。正确的加法运算:正确的加法运算:ADD AX,CX;ADD BX,DH;ADD ES:SI,1000;ADD DS,CS;错误的加法运算:错误的加法运算:ADD AX,CL;ADD 100H,DX;ADD ES:SI,100;ADD CS,DS;例例1:设:设AL=89H,分析加法运算结果。,分析加法运算结果。ADD AL,78H;分析:执行后AL=01H,标志位取值如下CF=1;产生进位;产生进位ZF=0;结果非;结果非0SF
22、=0;结果非负;结果非负OF=0;结果未溢出;结果未溢出提问:提问:序数运算的结果?整数运算的结果?例例2:设:设AL=89H,分析加法运算结果。,分析加法运算结果。ADD AL,87H;分析:执行后AL=10H,标志位取值如下CF=1;产生进位;产生进位ZF=0;结果非;结果非0SF=0;结果非负;结果非负OF=0;结果溢出;结果溢出提问:提问:序数运算的结果?整数运算的结果?整数相加,溢出判断:整数相加,溢出判断:异号数相加,不溢出。同号数相加,和改变符号则溢出。格式2:ADC DST,SRC;功能:DST=DST+SRC+Cy说明:与ADD相同。例例3:AXBX=AXBX+SIDI。解:
23、ADD BX,DI;ADC AX,SI;例例4:89FDCBH+9652DBH,分析运算结果,分析运算结果。解:解:MOV BX,0FDCBH;ADD BX,52DBH;MOV AL,89H;ADC AL,96H;格式3:INC DST;功能:DST=DST+1说明:不影响CF标志。例例5:7FH+1,分析运算结果,分析运算结果。解解1:MOV BX,7FH;INC BX;未溢出解解2:MOV BH,7FH;INC BH;溢出 减法指令格式1:SUB DST,SRC;功能:DST=DST-SRC说明:执行后,设置ZF、SF、CF和OF标志值。例例1:设:设AL=89H,分析相减结果。,分析相减
24、结果。SUB AL,78H;分析:执行后AL=11H,标志位取值如下CF=0;无借位;无借位ZF=0;结果非;结果非0SF=0;结果非负;结果非负OF=1;结果溢出;结果溢出整数相减,溢出判断:整数相减,溢出判断:同号数相减(异号数相加),不溢出。异号数相减(同号数相加),差与被减数 同号,无溢出。否则溢出。证明:证明:设X0,Y0当X-Y 0,未溢出。当X-Y 0,溢出。设X0,Y0当X-Y 0,溢出。当X-Y 0,未溢出。格式2:SBB DST,SRC;功能:DST=DST SRC-Cy说明:与SUB相同。格式3:DEC DST;功能:DST=DST 1说明:不影响CF。格式4:CMP D
25、ST,SRC;功能:DST SRC说明:执行后,源目不变,标志与SUB相同。格式5:NEG DST;功能:DST=0-DST 说明:与SUB相同。例例2:7FH 与与89H,比较结果,比较结果。解:解:MOV BL,7FH;CMP BL,89H;CF=1;序数目源序数目源ZF=0;源目不等SF=1;结果为负OF=1;溢出整数目源整数目源整数比较:整数比较:DST-SRC OF SF ZF 结果结果 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1例例7:数据:数据8FH求补求补。解:解:MOV BL,8FH;NEG BL;结果:BL=71H 乘法指令3.1 序数相乘格式:MUL SR
26、C;功能:AX=AL SRC(8)DXAX=AX SRC(16)说明:执行后,设置CF、OF标志值。ZF和SF随机值。正确的序数相乘:正确的序数相乘:MUL CX;MUL DH;MUL ES;MUL SI;指出乘法指令的错误,并纠正之。指出乘法指令的错误,并纠正之。MUL BX;MUL 100;MUL ES:SI;MUL 100H;例例1:序数:序数1020,分析相乘结果,分析相乘结果。解:解:MOV BL,10;MOV AL,20;MUL BL;结果:AH=0,AL=0C8H,BL=0AHCF=OF=0;高一半乘积等于0。SF=1/0 和 ZF=1/0,随机。例例2:序数:序数1616,分析
27、相乘结果,分析相乘结果。解:解:MOV BL,16;MOV AL,16;MUL BL;结果:AH=1,AL=0,BL=10HCF=OF=1;高一半乘积不等0。SF=1/0 和 ZF=1/0,随机。3.2 整数相乘格式:IMUL SRC;功能:AX=AL SRC(8)DXAX=AX SRC(16)说明:执行后,设置CF、OF标志值。ZF和SF随机值。例例3:整数:整数-22,分析相乘结果,分析相乘结果。解:解:MOV BL,-2;MOV AL,2;IMUL BL;结果:AH=0FFH,AL=0FCH,BL=0FEHCF=OF=0;高一半是低一半的符号扩展。SF=1/0 和 ZF=1/0,随机。例
28、例4:整数:整数-1616,分析相乘结果,分析相乘结果。解:解:MOV BL,-16;MOV AL,16;IMUL BL;结果:AH=0FFH,AL=0,BL=0F0HCF=OF=1;高一半非低一半的符号扩展。SF=1/0 和 ZF=1/0,随机。除法指令4.1 序数相除格式:DIV SRC;功能:AHAL=AX SRC(8位)AL=商,AH=余数。DXAX=DXAX SRC(16位)AX=商,DX=余数。执行后,所有标志取随机值。执行后,所有标志取随机值。指出除法指令的错误,并纠正之。指出除法指令的错误,并纠正之。MUL BX;MUL 100;MUL ES:SI;MUL 100H;例例1:A
29、X=100,BL=12,分析相除结果,分析相除结果。解:解:DIV BL;结果:AH=4(余),AL=8(商)CF、OF、SF和 ZF取随机值。4.2 整数相除格式:IDIV SRC;功能:用于符号数除法运算。4.3 整数字长扩展指令 字节扩展成字格式:CBW(convert byte to word)功能:把AL符号位扩展到AH,形成AX。AL7=0,AH=00H AL7=1,AH=0FFH 字扩展成双字格式:CWD(convert word to double word)功能:把AX符号位扩展到DX,形成DXAX。AX15=0,DX=0000H AX15=1,DX=0FFFFH例例2:AL
30、=-2,BL=2,分析相除结果,分析相除结果。解:解:CBW;AL扩展成扩展成AX IDIV BL;结果:AH=0(余),AL=0FFH(商),BL=02HCF、OF、SF和 ZF取随机值。例例3:整数四则运算:整数四则运算 (W-(XY+Z-540)/X变量变量X等为等为16位存储单元,定义如下:位存储单元,定义如下:X EQU Word PTR 100HY EQU Word PTR 102H 解:顺序结构源程序如下解:顺序结构源程序如下MOV AX,X;IMUL Y;DXAXMOV BX,AX;转存;转存MOV CX,DX;CXBXMOV AX,Z;CWD;Z扩展成扩展成DXAXADD B
31、X,AX;ADC CX,DX;SUB BX,540;SBB CX,0;减去借位减去借位MOV AX,W;CWD;W扩展成扩展成DXAXSUB AX,BX;SBB DX,CX;IDIV X;JMP$;到此结束到此结束 压缩BCD码调整指令 压缩BCD码 一个字节表示两位十进制数,取值0 99。例:45H、89H、36H、99H 5.1 加法调整格式:DAA 说明:紧跟ADD(C)之后执行,调整压缩BCD码 相加结果。调整原理如下:当AL309或AF1时,执行ALAL+6,AF=1。当AL749或CF1时,执行ALAL+60H,CF=1。执行后,OF随机,其他受影响。例例1:55+38,分析相加结
32、果,分析相加结果。解解1:MOV AL,55 ADD AL,38;结果:AL=5DH(93)CF=0,OF=0,SF=0,ZF=0,AF=0。解解2:MOV AL,55H ADD AL,38H;DAA;结果:AL=93H(93)CF=0,OF随机,SF=1,ZF=0,AF=1。例例2:5538+3855,分析相加结果,分析相加结果。解解1:以下加法可否?:以下加法可否?MOV AX,5538H ADD AX,3855H;DAA;解解2:MOV AL,38H;低字节 ADD AL,55H;DAA;MOV AH,AL;转存 MOV AL,55H;高字节 ADC AL,38H;DAA;XCHG AH
33、,AL;高低字节交换5.2 减法调整格式:DAS 自学!三、逻辑运算类指令三、逻辑运算类指令 与运算:与运算:AND DST,SRC;功能:DST=DST SRC执行后,CF=OF=0,ZF、SF和PF随结果确定。PF=0,DST含奇数个1。PF=1,DST含偶数个1。Parity:(:(N+1)位奇校验,)位奇校验,N为为DST字长。字长。或运算:或运算:OR DST,SRC;功能:DST=DST SRC 异或运算:异或运算:XOR DST,SRC;功能:DST=DST SRC 非运算:非运算:NOT DST;功能:DST=/DST 测试:测试:TEST DST,SRC;功能:DST SRC
34、例例1:58H69H,分析运算结果,分析运算结果。解:解:MOV AL,58H AND AL,69H;结果:AL=48HCF=OF=0、SF=0、ZF=0,PF=1。例例2:AL7、AL6置置1,AL1、AL0清清0,AL5AL2 求反求反。解:解:OR AL,11000000B;AND AL,11111100B;XOR AL,00111100B;例例3:如果:如果AL=0,转入,转入ZERO处执行处执行。解解1:TEST AL,0FFH;不改变AL,设置ZF值。JZ ZERO;解解2:CMP AL,0;不改变AL,设置ZF值。JE ZERO;例例4:如果:如果AL 含偶数个含偶数个1,转入,
35、转入EVEN处执行处执行。解:解:TEST AL,0FFH;不改变AL,设置PF值。JP EVEN;例例5:如果:如果AX=BX,转入,转入EQUAL处执行处执行。解解1:XOR AX,BX;设置ZF值。JZ EQUAL;解解2:CMP AX,BX;设置ZF值。JE EQUAL;四、移位和循环类指令四、移位和循环类指令 逻辑左移逻辑左移格式格式1:SHL DST,1;格式格式2:SHL DST,CL;CL2执行后,CF、OF、ZF、SF和PF随结果确定。DST07/15CF0 逻辑右移逻辑右移SHRDST07/15CF0 算术左移算术左移SAL 功能与SHL相同。DST07/15CF0 算术右
36、移算术右移SARDST07/15CF符号位不变。符号位不变。左循环左循环ROLDST07/15CF 右循环右循环RORDST07/15CF 串串CF左循环左循环RCLDST07/15CF 串串CF右循环右循环RCRDST07/15CF例例1:设:设AL=BL=100,分析下列执行结果,分析下列执行结果。解:解:SHL AL,1;SHR BL,1结果:结果:AL=0C8H(200),BL=32H(50)结论:自行归纳结论:自行归纳例例2:设:设AL=BL=-100,分析下列执行结果,分析下列执行结果。解:解:SAL AL,1;SAR BL,1结果:结果:AL=38H,OF=1,溢出!溢出!BL=
37、0CEH(-50),OF=0,正确。结论:自行归纳结论:自行归纳五、转移类指令五、转移类指令 无条件转移无条件转移格式格式1:JMP Short Label;2字节字节功能:IP=IP当前值+位移量(8);相对寻址转移范围转移范围:-128+127字节格式格式2:JMP Near PTR Label;3字节字节功能:IP=IP当前值+位移量(16)转移范围转移范围:-32768+32767字节 单标志条件转移指令单标志条件转移指令格式格式1:JC Label;进;进/借位,借位,2字节字节功能:当CF=1,IP=IP当前值+位移量(8);否则,顺序执行。格式格式2:JNC Label;无进;无
38、进/借位借位功能:当CF=0,IP=IP当前值+位移量(8);否则,顺序执行。格式格式3:JZ/JE Label;结果为;结果为0(相等)(相等)功能:当ZF=1,IP=IP当前值+位移量(8);否则,顺序执行。格式格式4:JNZ/JNE Label;结果非;结果非0(不等)(不等)功能:当ZF=0,IP=IP当前值+位移量(8);否则,顺序执行。格式格式5:JS Label;结果为负;结果为负功能:当SF=1,IP=IP当前值+位移量(8);否则,顺序执行。格式格式6:JNS Label;结果非负;结果非负功能:当SF=0,IP=IP当前值+位移量(8);否则,顺序执行。格式格式7:JO L
39、abel;结果溢出;结果溢出功能:当OF=1,IP=IP当前值+位移量(8);否则,顺序执行。格式格式8:JNO Label;结果未溢出;结果未溢出功能:当OF=0,IP=IP当前值+位移量(8);否则,顺序执行。格式格式9:JP Label;结果含偶数个;结果含偶数个1功能:当PF=1,IP=IP当前值+位移量(8);否则,顺序执行。格式格式10:JNP Label;结果含奇数个;结果含奇数个1功能:当PF=0,IP=IP当前值+位移量(8);否则,顺序执行。两个序数比较,条件转移指令两个序数比较,条件转移指令格式格式1:JB/JNAE Label;功能:当DSTSRC,IP=IP当前值+位
40、移量(8);否则,顺序执行。单一条件:CF=1即:JB=JNAE=JC格式格式2:JBE/JNA Label;功能:当DSTSRC,IP=IP当前值+位移量(8);否则,顺序执行。复合条件:CF=1,ZF=0或者CF=1,ZF=0;即:CFZF=1 格式格式3:JA/JNBE Label;功能:当DSTSRC,IP=IP当前值+位移量(8);否则,顺序执行。复合条件:CF=0,ZF=0即:CFZF=0格式格式4:JAE/JNB Label;功能:当DSTSRC,IP=IP当前值+位移量(8);否则,顺序执行。单一条件:CF=0;即:JAE=JNB=JNC 例例1:比较序数:比较序数AX与与BX
41、。如果AX=BX,转入Zero执行。如果AX BX,转入Above执行。否则,转入Here执行。解:解:CMP AX,BX;JE Zero;JA Above;JMP Here;两个整数比较,条件转移指令两个整数比较,条件转移指令 测试测试OF、SF、ZF复合条件。复合条件。格式格式1:JL/JNGE Label;功能:当DSTSRC,IP=IP当前值+位移量(8);否则,顺序执行。整数比较:整数比较:DST-SRC OF SF ZF 结果结果 0 0 0 DSTSRC 0 1 0 DSTSRC 1 0 0 DSTSRC 1 1 0 DSTSRC 0 0 1 DSTSRC格式格式2:JLE/JN
42、G Label;功能:当DSTSRC,IP=IP当前值+位移量(8);否则,顺序执行。格式格式3:JG/JNLE Label;功能:当DSTSRC,IP=IP当前值+位移量(8);否则,顺序执行。格式格式4:JGE/JNL Label;功能:当DSTSRC,IP=IP当前值+位移量(8);否则,顺序执行。例例2:比较整数:比较整数AX与与BX。如果AX=BX,转入Zero执行。如果AX BX,转入Large执行。否则,转入Here执行。解:解:CMP AX,BX;JE Zero;JG Large;JMP Here;例例3:比较:比较AX与与BX。如果AX BX,BX置换AX。否则,转入Equa
43、l执行。解:解:CMP AX,BX;JZ Equal;MOV AX,BX;六、常用伪指令六、常用伪指令 CPU不认识不执行,由汇编程序解读执行。程序区程序区/数据区定位数据区定位格式:格式:ORG 数值表达式数值表达式功能:程序/数据自数值表达式数值表达式确定的偏移地址 开始存储。例例1:在程序段定义中,解读ORG伪指令。ORG 100H Begin:MOV AX,0;解读:表示程序自地址解读:表示程序自地址CS:100H开始存储。开始存储。开辟数据区,存储原始数据。开辟数据区,存储原始数据。格式格式1:X DB 表达式表达式1,表达式,表达式2,表达式表达式n功能:开辟n个字节单元,依次存储
44、n个数据字节。例例2:在:在DS段如下定义,图解说明。段如下定义,图解说明。ORG 1000H Data DB 2,-2,a,A,20h DB abcdefgh格式格式2:X DW 表达式表达式1,表达式,表达式2,表达式表达式n功能:开辟n个字单元,依次存储n个数据字。例例3:在:在DS段如下定义,图解说明。段如下定义,图解说明。ORG 1000H byte DB 2,-2,a,A,20h word DW 2,-2,a,A,20h例例4:在:在DS段如下定义,图解说明。段如下定义,图解说明。ORG 1000H byte DB AB word DW AB DB CDEF DW CDEF DW
45、CD,EFerror!例例5:在:在DS段如下定义,图解说明。段如下定义,图解说明。ORG 1000H X DB 100 DUP (0)Y DB 2 DUP (0,1,2)DW 4 DUP(-1,-2)给变量赋值。给变量赋值。格式格式1:变量名:变量名 EQU 表达式表达式功能:表达式值赋予变量名。例例1:解读EQU伪指令。ORG 100H Value EQU 10 MOV AX,value;例例2:解读EQU伪指令。V1 EQU 10 V2 EQU V1+10 V3 EQU V2+V1 V4 EQU V3-V2 V5 EQU V4-V1 存储段定义。存储段定义。4.1 DS、ES段定义,格式
46、如下:段定义,格式如下:段名段名 Segment 伪指令集合 段名段名 Ends例例1:某:某DS/ES段定义如下:段定义如下:Data Segment ORG 10H X DB 100 DUP (0)Y DB 2 DUP (0,1,2)V1 EQU 10 V2 EQU V1+10 Data Ends4.2 CS段定义,格式如下:段定义,格式如下:段名段名 Segment Assume CS:段名段名 ORG 100H Begin:源程序源程序 段名段名 Ends End Begin4.3 CSSS四段合一的定义四段合一的定义 C Segment Assume CS:C,DS:C,ES:C,S
47、S:C ORG 100H;Begin:MOV DX,C;MOV DS,DX;MOV ES,DX;MOV SS,DX;源程序源程序 ORG 1000H;数据区定位数据区定位 数据定义数据定义 C Ends End Begin4.4 CSSS各段独立定义各段独立定义 D Segment ORG 0H 数据定义数据定义 D Ends E Segment ORG 10H 数据定义数据定义 E EndsS Segment ORG 100H 堆栈定义堆栈定义S EndsC Segment Assume CS:C,DS:D,ES:E,SS:S ORG 100H Begin:MOV DX,D;MOV DS,DX;各段寄存器赋值 MOV DX,E;MOV ES,DX;MOV DX,S;MOV SS,DX;源程序源程序C Ends End Begin