32位微机原理考试重点综述_第1页
32位微机原理考试重点综述_第2页
32位微机原理考试重点综述_第3页
32位微机原理考试重点综述_第4页
32位微机原理考试重点综述_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,原码:0表示 “+”,1表示“”,数值位与真值数值位相同。反码:正数的反码与原码表示相同。负数反码符号位为1,数值位为原码数值各位取反。补码:正数的补码表示与原码相同。负数补码的符号位为1,数值位等于反码加1。 X补= X反+1 负数直接求补: 从最低位起,到出现第一个1以前原码中的 数字不变,以后逐位取反,但符号位不变。2,各种编码方法的表数范围: n+1位二进制编码x表示的整数范围: 原码、反码:-2nx2n 补码:-2nx2n8位原码、反码的表数范围是-127+127,补码的表数范围是-128+127;16位原码、反码的表数范围是-32767+32767,补码的表数范围是-32768

2、+327673,原码、反码、补码表示小结:正数的原码、反码、补码表示均相同,符号位为0,数值位同数的真值。零的原码和反码均有2个编码,补码只有1个编码。负数的原码、反码、补码表示均不同,符号位为1,数值位:原码为数的绝对值 反码为每一位均取反码 补码为反码再在最低位+1由X补求-X补:逐位取反(包括符号位),再在最低位+1 4,进位标志CF(Carry Flag):运算结果的最高位产生进位或借位时,或循环指令也会影响该位。奇偶标志PF(Parity Flag):运算结果的低8位中所含1的个数为偶数个,则该位置1。辅助进位标志AF(Auxiliary Carry Flag):加减法运算时,如果第

3、3位与第4位之间有进位或借位产生,则该位置1。一般用于BCD运算中是否进行十进制调整的判断依据。零标志ZF(Zero Flag):运算结果为零,则该位置1。符号标志SF(Sign Flag):与运算结果符号位(即最高位)相同。溢出标志OF(Overflow Flag):当运算结果超出结果寄存器的表达范围时,该位置1。 跟踪标志TF(Trap Flag):控制CPU按调试的单步方式执行指令。中断允许标志IF(Interrupt Enable Flag):控制CPU对外部可屏蔽中断(INTR)的响应。当IF=1时,允许CPU响应外部可屏蔽中断;当IF=0时,禁止响应INTR,但不禁止CPU对非屏蔽

4、中断(NMI)的响应。方向标志DF(Direction Flag):用于控制串操作指令中的地址变化方向 。 5,立即寻址方式:8086 CPU指令系统中,有一部分指令所用的8位或16位操作数就在指令中提供,这种方式叫立即寻址方式。n 例如:MOV AL,80H;将十六进制数80H送入ALMOV AX,1090H;将1090H送AX,AH中为10H,AL中为90H寄存器寻址方式:如果操作数在CPU的内部寄存器中,那么寄存器名可在指令中指出。这种寻址方式就叫寄存器寻址方式。n 例如:INCCX;将CX的内容加1 MOVAX, BX ;将BX内容送AX,BX内容不变ROLAH,1;将AH中的内容不带

5、进位循环左移一位采用寄存器寻址方式的指令在执行时,操作就在CPU内部进行,不需要使用总线周期,执行速度快。直接寻址方式:使用直接寻址方式,数据在存储器中,存储单元有效地址EA由指令直接指出,所以直接寻址是对存储器进行访问时最简单的方式例如:MOV AX, 2000H 寄存器间接寻址方式:采用寄存器间接寻址方式时,操作数一定在存储器中,存储单元的有效地址由寄存器指出。这些寄存器可以是BX,BP,SI和DI,即有效地址等于其中某一个寄存器的值寄存器相对寻址方式(直接变址寻址): 操作数有效地址EA为基址或变址寄存器内容与指令中指定位移量之和,操作数在存储器中。可用寄存器及其对应的默认段情况与寄存器

6、间接寻址方式相同。基址变址寻址方式: 用这种寻址方式时,操作数的有效地址等于基址寄存器的内容加上一个变址寄存器的内容,16位寻址时,基址寄存器可用BX和BP,变址寄存器可用SI和DI;32位寻址时,基址寄存器可用任何32位通用寄存器,变址寄存器可用除ESP以外的32位通用寄存器。用MOV指令实现两内存字节单元内容的交换1、MOV BL, 2035H; MOV CL, 2045H; MOV 2045H, BL; MOV 2035H, CL;2、MOV AL, 2035H; XCHG AL, 2045H; MOV 2035H, AL; 测试某状态寄存器(端口号27H)的第2位是否为1 INAL,

7、27H TESTAL, 00000100B JNZERROR ;若第2位为1,转ERROR处理设数据段:ADDR1 DF 1234567890ABH 则 LES EBX,ADDR1 指令执行后 (ES)=1234H, (EBX)=567890ABH【例题】实现两个无符号双字加法运算。设目的操作数存放在DX和AX寄存器中,其中DX存放高位字。源操作数存放在BX、CX中,其中BX存放高位字。如指令执行前(DX)=0002H,(AX)=0F365H,(BX)=0005H,(CX)=0E024H 指令序列为 ADD AX,CX ADC DX,BX 则第一条指令执行后,(AX)=0D389H,SF=1,

8、ZF=0,CF=1,OF=0 第二条指令执行后,(DX)=0008H,SF=0,ZF=0,CF=0,OF=0 【例题】比较AL的内容数值大小。 CMPAL,100;(AL)100 JBBELOW ;(AL)<100,转到BELOW处执行 SUBAL,100;(AL)>=100,(AL)100AL INCAH ;(AH)+1AH BELOW:【例题】设x、y、z均为双字长数,它们分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,存放时高位字在高地址中,低位字在低地址中,编写指令序列实现 w x+y+24 z,并用w和w+2单元存放运算结果。MOV AX,XMOV DX,

9、X+2ADD AX,YADC DX,Y+2ADD AX,24ADC DX,0SUB AX,ZSBB DX,Z+2MOV W,AXMOV W+2,DX【例题】无符号数0A3H与11H相乘。 MOVAL,0A3H ;(AL)=0A3H MOVBL, 11H ;(BL)=11H MULBL ;(AX)=0AD3H【例题】若(AL)= 0B4H,(BL)=11H,求执行指令IMUL BL 和 MUL BL 后的乘积值。 (AL)= 0B4H为无符号数的180D,带符号数的-76D (BL)=11H为无符号数的17D,带符号数的17D 则执行IMUL BL 的结果为(AX)=0FAF4H =-1292D

10、,CF=OF=1 执行MUL BL 的结果为(AX)= 0BF4H = 3060D,CF=OF=1【例题】写出实现无符号数0400H/0B4H运算的程序段。 MOVAX,0400H;(AX)=0400H MOVBL,0B4H;(BL)=0B4H DIVBL ;商(AL)=05H,余数(AH)=7CH 【例题】写出实现有符号数0400H /0B4H运算的程序段。 MOV AX,0400H ;(AX)=0400H MOV BL,0B4H ;(BL)=0B4H IDIV BL ;(AL)=0F3H,(AH)=24H算术运算综合举例【例3-36】计算:(C120 + A*B) / C,保存商和余数到X

11、和Y中,其中A、B、C、X和Y都是有符号的字变量 。编制程序如下:MOV AX, C SUB AX, 120 CWD MOV CX, DX MOV BX, AX ;(CX, BX)(DX, AX)MOV AX, A IMUL B ; (DX, AX)A*B ADD AX, BX ;计算32位二进制之和ADC DX, CX IDIV C ;AX是商,DX是余数 MOV X, AX ;保存商到指定单元 MOV Y, DX 课堂练习计算:(V-(X*Y+Z-540)/X,其中X,Y,Z,V均为16位带符号数,已分别装入X,Y,Z,V单元中,上式计算结果的商存入AX,余数存入DX寄存器。编制程序如下:

12、mov ax, ximul ymov cx, axmov bx, dxmov ax, zcwdadd cx, axadc bx, dxsub cx, 540sbb bx, 0mov ax, vcwdsub ax, cxsbb dx, bxidiv x【例题】压缩BCD码的加法运算。 MOV AL,68H;(AL)=68H,表示压缩BCD码68 MOV BL,28H;(BL)=28H,表示压缩BCD码28 ADD AL,BL;二进制加法:(AL)=68H+28H=90H DAA ;十进制调整:(AL)=96H ;实现压缩BCD码加法:68+28=96【例题】压缩BCD码的减法运算。MOVAL,6

13、8H ;(AL)=68H,表示压缩BCD码68MOVBL,28H ;(BL)=28H,表示压缩BCD码28SUBAL,BL;二进制减法:(AL)=68H28H=40HDAS ;十进制调整:(AL)=40H ;实现压缩BCD码减法:6828=40【例题】 AND AL,77H ;将AL中第3位和第7位清零。 AND AX,BX ;两个寄存器逻辑与 AND AL,1111 0000B ;屏蔽AL寄存器低4位 AND MEM-BYTE,AL;存储单元和寄存器逻辑与例题】OR AL,88H ;将AL寄存器中第3位和第7位置1OR BX,0C000H ;将BX中第15位和第14位置1【例题】逻辑非运算。

14、MOV AX,878AH;(AX)=878AHNOT AX ;(AX)=7875HNOTWORD PTR1000H;将1000H和1001H两单 ;元中的内容求反码,再送回这两单元中【例题】测试AX中的第12位是否为0,不为0则转L。 TESTAX,1000H JNEL / JNZL 例3-54:(BX)=84F1H,把 (BX) 中的 16 位数每 4 位压入堆栈MOV CH, 2 ; 循环次数MOV CL, 4 ; 移位次数NEXT: ROL BX, CLMOV AH, BLAND AH, 0FH ROL BX, CL MOV AL, BL AND AL, 0FHPUSH AXDEC CH

15、JNZ NEXT例题:设BLOCK数据块中存储有正数和负数,试编写程序将正负数分开,分别存放在Dplus和Dminus开始的存储区域mov si,offset blockmov di,offset dplusmov bx,offset dminusmov ax,dsmov es,ax;数据都在一个段中,所以设置es=dsmov cx,count;cx字节数cldgo_on: lodsb;从block取出一个数据test al,80h;检测符号位,判断是正是负jnz minus;符号位为1,是负数,转向minusstosb;符号位为0,是正数,存入dplusjmp again;程序转移到agai

16、n处继续执行minus: xchg bx,distosb;把负数存入dminusxchg bx,diagain: loop go_on;字节数减1· 例:检验一段被传送过的数据是否与源串完全相 同,程序如下:CLDMOV CX,100初始化MOV SI,2400HMOV DI,1200H;REPECMPSB ;串比较,直到ZF0或CX0JZ EQQDEC SIMOV BX,SI;第一个不相同字节偏移地址BXMOV AL,SI;第一个不相同字节内容ALJMP STOPEQQ: MOV BX,0 ;两串完全相同,BX0STOP:HLTv 例题:在某字符串中查找是否存在“”字符。若存在,则

17、将“”字符所在地址送入BX寄存器中,否则将BX寄存器清“0”。程序如下:CLD ;清除方向标志DFMOV DI,0100H ;送目标串首元素偏移地址 MOV CX,100 ;字串长度MOV AL,;关键字ALREPNESCASB ;找关键字 JNZ ZER ;判断是否找到DEC DIMOV BX,DI ;关键字所在地址BXJMP ST0 ZER: MOV BX,0 ;未找到,0BX ST0: HLT例题:比较两个长度为count的字符串是否完全相同,若相同置al=0,不相同置al=0ffhmov si,offset string1mov di,offset string2mov cx,coun

18、tcldmov al,0ffh;标记初始为不同mov al,0;字符串相等,设置00houtput:mov result,al;输出结果标记n 例3.61 若AL最高位为0,设置(AH)0;若AL最高位为1,则设置(AH)FFH。即编程实现符号扩展指令CBW功能 v 方法一:用JZ指令实现。testal,80h;测试最高位jzset0;最高位为0则转到set0movah,0ffh;最高位为1,则将AH置0FFHjmpnext;无条件转向next set0:movah,0 next: v 方法二:用JNZ指令实现。testal,80h;测试最高位jnzset1;最高位为1则转到set1movah

19、,0h;最高位为0,则将AH置0jmpnext;无条件转向next set1:movah,0ffh next: n 例3.62 计算|XY|,X和Y是存放于X单元和Y单元的16位操作数,结果存入result mov ax,Xsubax,Y;XY送AX,下面求绝对值jnsnext ;绝对值为正,不需处理,转向next保存结果negax ;绝对值为负,进行求补得到绝对值 next: movresult, ax;保存结果 n 例3.63 编写程序段判断DX中1的个数 xoral,alagain:testdx,offffh;等价于cmp bx,0jenextshldx,1jncagainincaljm

20、pagainnext:;AL保存1的个数例3.64 比较AX和BX中两个无符号数的大小,将较小的存放到AX中 cmpax,bx;比较ax和bxJBnext;若axbx,则转移到nextxchgax,bx;若axbx,则两者交换next:例3.65 比较AX和BX中两个有符号数的大小,将较小的存放到AX中 cmpax,bx;比较ax和bxJLnext;若axbx,则转移到nextxchgax,bx;若axbx,则两者交换next:例3.66 a、b是双精度数,分别存于DX,AX 及BX,CX 中,a > b时转 L1,否则转L2 cmpdx, bx;比较dx和bx JGl1;若dxbx,则

21、转移到l1 JLl2;若dxbx,则转移到l2 cmpax, cx;若dx=bx,则比较ax和cx JAl1;若axcx,则转移到l1l2: l1: 例3-67:求首地址为 ARRAY 的 n个字之和,结果存入 sum单元mov cx,n ;将计数值n送CXxor ax,ax ;累加器AX清零xordx,dx ;DX清零xorsi,si ;SI清零again: addax,arraysi ;将下一个数据累加到AXadcdx,0 ;将产生的进位累加到DXadd si,2 ;SI加2,指向下一个数据loop again ;若CX不为0,继续循环mov sum,ax ;结果低16位送sum单元例4.

22、21】 p (1)编写程序把 BX 中的二进制数以十六进制数的形式显示在屏幕上 。CODE SEGMENT ASSUMECS:CODESTART: MOVCH,4;设置循环初值为4ROTAT: MOVCL,4 ROLBX,CL;BX循环左移4位 MOVAL,BL ANDAL,0FH;把最右面要显示的4位取到AL中 ADDAL,30H ;将其加30H转换为ASCII码CMP AL,3AH;判断是否大于9 JLPRINT;“0”“9”,转向PRINTIT直接显示 ADDAL,7H ;“A” “F”, ASCII 值再加7PRINT: MOVDL,AL;2号功能调用,显示该字符 MOVAH,2 IN

23、T21H DECCH JNZROTAT;若循环次数未到,则继续循环 MOVAH,4CH INT21H;程序结束,返回DOSCODE ENDS ENDSTART【例4.24】 数据段中从BUF单元开始的数据区内存放着一组有符号字数据,其中第一个单元存放数组元素个数,请编一程序求出该数组中的最大值、最小值及总和,并分别存入MAX、MIN、SUM单元中 DATA SEGMENT BUFDW12DW5,-4,0,3,100,-51,69,-21,-5,255,33,150 MAXDW? MINDW? SUMDW?DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTAR

24、T: MOVAX,DATA MOVDS,AX MOVSI,2;初始化SI、AX、BX、DX MOVAX,BUFSI MOV BX,BUFSI MOVDX,BUFSI MOVCX,BUF;初始化循环计数器CXDECCXL:ADDSI,2 CMPBX,BUFSI;比较 JLLESS CMPDX,BUFSI JGGREATER JMPSLESS: MOVBX,BUFSI;大数送入BX JMPSGREATER:MOVDX,BUFSI;小数送入DXS: ADDAX,BUFSI;求累加和,送入AX LOOPL MOVMAX,BX;最大值、最小值及总和分别存 MOVMIN,DX;入MAX、MIN、SUM单元

25、 MOVSUM,AX MOVAH,4CH INT21HCODEENDS ENDSTART例4.25】字符串STRING以回车符作为结束标志,编程统计该字符串的长度 DATASEGMENTLEN DB?STRING DBcomputer science and technology,0DHDATAENDSCODESEGMENTASSUMECS:CODE, DS:DATA, ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXLEADI,STRING ;串的首地址送入DIMOVDL,0;置串长度初值为0MOVAL,0DH;串结束标志送入ALAGAIN:SCASB;搜索串J

26、EDONE;找到结束标志,转向DONE结束INCDL;否则,串长度加1JMPAGAINDONE:MOVLEN,DL;串长度送入LENMOVAH,4CHINT21HCODEENDSENDSTART 【例4.20】从键盘接收两个有符号十进制数,并求它们的和,再将结果以有符号十进制数的形式在屏幕上显示输出。DATASEGMENTMES1DBinput the first number:$MES2DBinput the second number:$MES3DBthe sum is:$XDW?YDW?SUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART

27、:MOVAX,DATAMOVDS,AX MOVDX,OFFSET MES1MOVAH,9INT21H;显示输入提示信息CALL READ;调用子程序READ,输入第一个数MOVX,AX;将输入的第一个数送入变量XCALL CRLF;调用子程序CRLFMOVDX,OFFSET MES2MOVAH,9INT21H;显示输入提示信息CALL READ;调用子程序READ,输入第二个数MOVY,AX;将输入的第二个数送入变量YADDAX,X;两数相加MOVSUM,AX;和送到SUM,入口参数MOVDX,OFFSET MES3MOVAH,9INT21H;显示输出提示信息CALL WRITE;调用子程序W

28、RITE,显示结果MOVAH,4CHINT21HREADPROCNEAR;输入有符号十进制数的子程序READPUSH BXPUSH CXPUSH DXXORBX,BX;用BX保存结果XOR CX,CX;正负标志,0为正,1为负MOV AH,1;输入一个字符INT 21HCMP AL, +;比较是否为“”JZ READ1;是“”,转向READ1继续输入CMP AL,;否则,比较是否为“”JNZ READ2;不是“”和“”,转向READ2MOV CX,1;是“”,设置1标志Read1: Read2: Read3: Read4: READENDPREAD1:MOV AH,1;继续输入字符INT 21

29、HREAD2:CMP AL,0;是否在09之间JB READ3;数据结束CMP AL,9JA READ3SUB AL,30H;在09之间,转换为对应数值SHL BX,1;用移位指令实现已输入数值乘10MOV DX,BX;即:(BX)(BX)×10SHL BX,1SHL BX,1ADD BX,DXMOV AH,0;已输入数值乘10+新输入值ADD BX,AX;相加JMP READ1;继续输入字符 READ3: CMP CX,0;判断该数值正负JZ READ4;是正数,转向READ4 NEG BX;是负数,进行求补READ4:MOV AX,BX;出口参数,数值送入AXPOP DXPOP

30、CXPOP BXRET;子程序返回READENDPWRITEPROCNEAR;显示有符号十进制数的子程序WRITEPUSH AXPUSH BXPUSH DXMOV AX,SUM;取出要显示的数据TEST AX,AX;判断零、正数或负数JNZ WRITE1MOV DL,0;是零,显示“0”后退出MOV AH,2INT 21HJMP WRITE5WRITE1:JNS WRITE2;是正数,转向WRITE2MOV BX,AX ;是负数, AX数据暂存于BX以免被修改MOV DL,- ;显示“”MOV AH,2INT 21HMOV AX,BX ;恢复 AX数据NEG AX;数据求补(求绝对值)WRIT

31、E2:MOV BX,10PUSH BX;10压入堆栈,作为退出标志WRITE3:CMP AX,0;数据(商)是否为零JZ WRITE4;为零转向显示SUB DX, DX;扩展被除数(DX,AX),DX清零DIV BX;数据除以10:(DX,AX)÷10ADD DL, 30H;余数(09)转换为ASCII码PUSH DX;数据各位先低位后高位压入堆栈JMP WRITE3WRITE4:POP DX;数据各位先高位后低位弹出堆栈CMP DL, 10;是结束标志10,则退出JE WRITE5MOV AH, 2;进行显示INT 21HJMP WRITE4 WRITE5:POP DXPOP BX

32、POP AXRET;子程序返回WRITEENDPCRLF PROCNEAR;使光标回车换行的子程序 PUSH AX PUSH DX MOVAH,2 MOVDL,0DH INT21H;显示回车符 MOVDL,0AH INT21H;显示换行符 POPDX POPAX RETCRLF ENDPCODEENDSENDSTART(1) 设计要求: 在源程序中设置数据段、堆栈段及代码段。在数据段中定义8个字节数据,把这些数据转换成十六进制数的ASCII码存在上述数据之后,然后在屏幕上显示这些数据。显示数据用DOS功能2号调用,每个数据用空格分隔。1:NAME EX1 ;程序命名伪指令,程序名为EX12:P

33、AGE 50,70;列表文件每页50行每行70字符 3:;-4:DAT SEGMENT PARA DAT5:A1 DB 12H,34H,56H,78H,9AH6: DB0BCH,0DEH,0F0H7:B1=-A1 ;赋值伪指令,求A1(符号地址)到当 前汇编指针地址()的字节数8: B2=B1*2 ;求2倍B19: A2 DB B2 DUP (?); 数据重复定义伪指令,定 义ASCII码字符区10:DAT ENDS11:;-11:;-12:STAC SEGMENT PARA STACK STA13:STA1 DW 100DUP(?)14:STAC ENDS15:;-16:CODE SEGME

34、NT PARA CODE17: ASSUMECS:CODE,DS:DAT18: ASSUMESS:STAC,ES:DAT19:STAR PROC FAR20: PUSHDS21: XORAX,AX22: PUSHAX23:MOVAX,DAT24:MOVDS,AX ;段寄存器赋值25:MOVES,AX26:LEASI,A1 ;取有效地址27:LEADI,A228:MOVCX,B1 ;循环次数29:G1:MOVBL,2 ;每个字节处理两次30:MOVAL,SI ;被处理的字节送AL31:MOVBH,AL ; AL暂存到BH32:PUSHCX 33:MOVCL,434:RORAL,CL ;循环右移4

35、位35:POPCX36:G2:ANDAL,0FH ;取AL低4位,高4位清零37: ADD AL, 30H38: CMP AL, 3AH JB AA 39: ADDAL,740:AA: MOVDI,AL ;处理完毕送目标地址41: INCDI42: MOVAL,BH43: DECBL44: JNZG245: INCSI46: LOOPG1 ;CX-1,若CX0则返回G147:MOVSIOFFSET A2;A2的偏移地址送SI寄存器48:MOVCX,B249:CALLP150:RET显示ASCII码字符子程序如下:51:P1PROC52: MOVBL,253:G: MOVDL,SI54:MOVA

36、H,255:INT21H56:INCSI57:DECBL58:JNZT59:MOVDL, ;加空格60:MOVAH,261:INT21H62:MOVBL,263:T: LOOPG ;cx-1循环处理64:RET65:P1ENDP66:CODEENDS67:ENDSTAR例9-3】 利用8255A的A口方式0与微型打印机相连,将内存缓冲区BUFF中的字符打印输出。试完成相应的软硬件设计。(CPU为8088)n 说明: 由PC0充当打印机的选通信号,通过对PC0的置位/复位来产生选通。同时,由PC7来接收打印机发出的“BUSY”信号作为能否输出的查询。 8255A的控制字为:10001000 即8

37、8H A口方式0,输出;C口高位方式0输入,低位方式0输出 PC0置位: 00000001 即 01H PC0复位: 00000000 即 00H 8255A的4个口地址分别为:00H,01H,02H,03H。n DADA SEGMENT BUFF DB 'This is a print program!','$'n DATA ENDSn CODE SEGMENT ASSUME CS:CODE, DS:DATA START:MOV AX, DATA MOV DS, AX MOV SI,OFFSET BUFF MOV AL, 88H ;8255A初始化,A口方式0

38、,输出 OUT 03H, AL ; C口高位方式0输入,低位方式0输出 MOV AL, 01H; OUT 03H,AL ;使PC0置位,即使选通无效WAIT: IN AL, 02H TEST AL, 80H ;检测PC7是否为1即是否忙 JNZ WAIT ; 为忙则等待 MOV AL,SI CMP AL,'$' ;是否结束符 JZ DONE ; 是则输出回车 OUT 00H,AL ;不是结束符,则从A口输出 MOV AL,00H OUT 03H, AL MOV AL, 01H OUT 03H,AL ;产生选通信号 INC SI ;修改指针,指向下一个字符 JMP WAITDON

39、E: MOV AL,0DH OUT 00H,AL ;输出回车符 MOV AL, 00H OUT 03H,AL MOV AL, 01H OUT 03H,AL ;产生选通WAIT1: IN AL, 02H TEST AL, 80H ;检测PC7是否为1 JNZ WAIT1 ; 为忙则等待 MOV AL,0AH OUT 00H,AL ;输出换行符 MOV AL, 00H OUT 03H,AL MOV AL, 01H OUT 03H,AL MOV AH,4CH INT 21H CODE ENDS END START n 利用8086、8255A、输入开关、发光二极管,完成如下功能n 8255A的A口读

40、取开关K1状态,B口连接发光二极管L1L8。设开关闭合时读入的值为1,开关断开时读入的值为0;端口输出为0时灯亮。若开关K1=0,发光二极管全灭;若开关K1=1,发光二极管从左向右循环点亮;n (1)若用IOYa(有效时A15-A4的状态为000000101001)选通8255A,用8086的A0 A1信号进行口选择,给出8255A的四个口地址。(2)为完成上述实验功能,请在图上画出接线图。 (3)编写汇编程序,完成上述功能。(主程序可调用延时1秒子程序DELAY和按任意键退出子程序BREAK,假定这两个子程序已存在,不需编写)n (1)8255A的四个口地址:290H,291H,292H,2

41、93H n (2)连线 MY_STACKSEGMENTDB100 DUP(?)MY_STACKENDSMY_DATA SEGMENT P8255_A DW 0290H P8255_B DW 0291H P8255_C DW 0292H P8255_M DW 0293H LADB ?MY_DATA ENDSMY_CODE SEGMENT ASSUME CS:MY_CODE,DS:MY_DATA,SS:MY_STACK START:MOVAX,MY_DATAMOVDS,AX MOV DX,P8255_M ;设置8255控制字MOVAL,90H ;1001 0000OUT DX,AL MOVLA,F

42、EH ;初值1111 1110 AA: MOV DX,P8255_A;读取A口状态IN AL,DXTESTAL,01H JZALL1 ;K1=0跳转ALL1 MOVAL,LA ROLAL,1MOVLA ,ALMOV DX,P8255_B OUT DX,AL ;输出 CALLDELAY CALLBREAKJMPAAALL1:MOVDX,P8255_BMOVAL,0FFH ;灯全灭OUTDX,AL CALLDELAY CALLBREAKJMPAAMY_CODE ENDS ENDSTART v 【例10-1】 若要查询8251A接收器是否准备好,则可用下列程序段完成 MOV DX,0FFF2H ;状

43、态口L:IN AL,DX ;读状态口AND AL,02H ;查Dl1?准备好了吗?JZ L ;未准备好,则等待MOV DX, 0FFF0H ;数据口IN AL,DX ;已准备好则输入数据异步模式下的初始化程序举例 v 设8251A工作在异步模式,波特率系数(因子)为16,7个数据位/字符,偶校验,2个停止位,发送、接收允许,设端口地址为00E2H和00E4H。完成初始化程序 v 根据题目,可确定模式字为:11111010B即FAH,控制字为:00110111B 即37H,初始化程序如下:§ MOV AL, 0FAH ;送模式字§ MOV DX,00E2H§ OUT

44、 DX, AL ;异步,7位/字符,偶校验,2个停止位§ MOV AL,37H ;设置控制字,使发送、接收允许,清出错标志§ OUT DX, AL ;有效 同步模式下的初始化程序举例 v 设端口地址为52H,采用内同步方式,2个同步字符(设同步字符为16H),偶校验,7位数据位/字符 v 根据题目,可确定模式字为:00111000B即38H,控制字为:10010111B即97H。它使8251A对同步字符进行检索;同时使状态寄存器中的3个出错标志复位;使8251A的发送器、接收器启动;控制字还通知8251A,CPU当前已经准备好进行数据传输。初始化程序如下:§ MO

45、V AL,38H ;设置模式字,同步,用2个同步字符,§ OUT 52H,AL ; 7个数据位,偶校验§ MOV AL,16H § OUT 52H,AL ;送同步字符16H§ OUT 52H,AL § MOV AL, 97H ;设置控制字,使发送器和接收器启动§ OUT 52H, AL利用状态字进行编程的举例 v 先对8251A进行初始化,然后对状态字进行测试,以便输入字符。本程序段可用来输入80个字符。 v 8251A的控制和状态端口地址为52H,数据输入和输出端口地址为50H。字符输入后,放在BUFFER标号所指的内存缓冲区中 。程序如下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论