微机系统与接口_第1页
微机系统与接口_第2页
微机系统与接口_第3页
微机系统与接口_第4页
微机系统与接口_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1DOS和BIOS调用DOS(DiskOperationSystem)和BIOS(BasicInputandOutputSystem)是为用户提供的两组系统服务程序。BIOS是IBMPC/XT的基本I/O系统,负责管理系统的测试程序、初始化引导程序、一部分中断矢量装入程序及外部设备的服务程序。由于这些程序固化在ROM中,用户可以直接调用。DOS是IBMPC/XT的操作系统,负责管理系统的所有资源,协调微机的操作,其中包括大量的可供调用的服务子程序,完成设备的管理和磁盘文件的管理。用户控制PC机硬件的方法:

高级语言调用DOS程序使用BIOS程序直接访问硬件2DOS和BIOS调用不用CALL指令。采用软中断指令INTn。用户程序不必与服务程序的代码连接。3DOS调用DOS功能调用类型号中断功能类型号中断功能20H程序结束21H请求DOS功能调用22H结束退出23H中止(Ctrl-Break)处理24H关键性错误处理25H磁盘顺序读26H磁盘顺序写27H程序结束且驻留内存28HDOS内部使用29~2EHDOS内部保留2FHDOS内部使用30~3FHDOS内部保留4INT21H调用方法

1、系统功能调用号送AH2、子程序规定的入口参数送指定的寄存器

3、INT21H4、分析出口参数功能号查表方法:5INT21H字符输入

1、利用0AH功能从键盘输一个字符串入内存。 要求:(AH)=0AH,(DX)=输入缓冲区首址 数据段中的输入缓冲区:第一个字节为所能保存的最大字符数第二个字节为实际接收的字符个数保留的单元第三个字节为所输入的第一个字符的ASCII码

…….6INT21H

例 DATASEGMENT

INBUFFERDB81 ACTCHARDB? CHARTEXTDB80DUP(?)

………. DATAENDS ………. CODESEGMENT ASSUMEDS:DATA,SS:STACK,CS:CODE ……….

MOV DX,OFFSETINBUFFER

MOV AH,0AH;

INT 21H ………..

CODEENDSEND ……..7INT21H2、利用09H功能在CRT上显示一个字符串 要求:(AH)=09H,(DX)=欲输出字符串的首址,字符串以‘$’结束。 例 DATA SEGMENT STRING DB‘HELLOEVERYBODY!$’ ………. DATAENDS ………. CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE ……….

MOV DX,OFFSETSTRING MOV AH,09H INT 21H

………..

CODEENDSEND ……..显示0AH键盘输入的字符串时,DX指向用户定义的缓冲区的第三个字节8INT21H字符输出

1、利用02H功能在CRT上显示一个字符。 要求:(AH)=02H,(DL)=欲输出字符的ASCII码 例: MOV DL,41H MOV AH,02H INT 21H9 ;----调用DOS功能输出回车、换行符------

MOV DL,0AH ;换行符的ASCII码为0AH

MOV AH,02H;显示字符

INT 21H

MOV DL,0DH ;回车符的ASCII码为0DH

MOV AH,02H

INT 21H

INT21H10INT21H程序返回

利用4CH功能返回DOS。 要求:(AH)=4CH, CODESEGMENT …………

MOVAH,4CH INT 21H CODEENDS11常用DOS功能调用通常把DOS提供的INT21H中断服务程序称为DOS功能调用,调用时根据AH的值来选择子功能。AH=1

键盘键入并回显,输入字符的ASCII码在AL中返回例:MOVAH,1INT21HAH=2显示输出字符,输出字符的ASCII码放入DL中例:MOVAH,2 MOVDL,‘A’INT21HINT21H12AH=7键盘输入无回显,输入字符的ASCII码在AL中返回例:MOVAH,7INT21HAH=9显示字符串,字符串以‘$’结束,开始位置用DS:DX指示AH=0AH输入字符串,开始位置用DS:DX指示,分配存储空间为n+2AH=0BH检测键盘输入,有键按下AL=0FFH,否则AL=00HAH=4CH程序运行结束,返回操作系统,返回码由AL给出例:MOVAX,4C00HINT21HINT21H13分析问题,建立数学模型确定最佳算法合理分配存储单元和寄存器绘制流程图编写程序调试程序程序设计方法14顺序程序设计 指令指针IP值线性增加分支(条件)程序设计

IP值受标志位的影响而跳变循环程序设计

IP值受计数器CX中的值不为零而循环设计方法15顺序结构(直线型结构)例1编程计算表达式Z=X^2-Y/5的值,其中A、B为带符号字节整数,Z为带符号字整数。(BX)<=X*X(AX)<=Y/5Z<=(BX)-(AX)开始结束MOV AX,DATMOV DS,AXMOV AL,XIMUL ALMOV BX,AXMOV AL,YCBW MOV CL,5IDIV CL CBWSUB BX,AXMOV Z,BXRET16;--数据段定义---------------------------------- DAT SEGMENT

X DB 10 Y DB -20 Z DW ? DAT ENDS顺序结构(直线型结构)17;--代码段定义----------------------------------COD SEGMENT

ASSUMEDS:DAT,CS:COD

MAIN PROCFARSTART:PUSH DS ;

保存返回地址

SUB AX,AX PUSHAX MOV AX,DAT MOV DS,AX

;初始化DS

顺序结构(直线型结构)18;----------------------------------------------------------------------------MOV AL,XIMUL ALMOV BX,AX

;(BX)<=X*X;-----------------------------------------------MOV AL,YCBW

;将被除数扩展为字数据MOV CL,5IDIV CL CBW

;(AX)<=Y/5;------------------------------------------------SUB BX,AXMOV Z,BX

;Z<=(BX)-(AX)顺序结构(直线型结构)19;---------------------------------------------------- RET

;返回

MAIN ENDP;---------------------------------------------------- COD ENDSEND START顺序结构(直线型结构)20例2

从键盘输入一个小写字母,转换成大写字母输出。;3_8_1.asmdatasegmentparapublic‘data’string1db‘Pleaseinput(a–z):$’string2db0dh,0ah,‘Theresultis:$’dataendsss_segsegmentparastackdb256dup(?)ss_segends顺序结构程序设计21codesegmentparapublic‘code’assumecs:code,ss:ss_seg,ds:datamainprocfarStart:pushds xorax,ax pushax movax,data mov ds,ax leadx,string1 movah,9 ;显示提示符1 int 21h mov ah,1 ;输入小写字符

int 21h;ASCII码保存ALsubal,20hpushaxleadx,string2movah,9;显示提示符2int21hpopaxmovah,2;输出大写字符

movdl,alint21hret ;返回DOSmainendpcodeendsendStart顺序结构程序设计22例3以16进制形式显示存储器中一个字节的无符号数VAR。例如:11010101显示D5;3_8_3.asmdatasegmentpara var db100dataendssta_segsegmentstack db 256dup(?)sta_segendscode segmentassumecs:code,ds:data,ss:sta_seg顺序结构程序设计23mainprocfar pushdsmovax,0pushaxmovax,datamovds,axmoval,var movdh,al movcl,4 shral,cl callubasc callpchar moval,dhcallubasc

callpchar

retmainendp;显示一个字符pcharproc

movah,02h

movdl,al

int21h

ret

pcharendp;将AL的低4位转换为ASCII码

ubascprocandal,0fh

addal,30h

cmpal,‘9’

jnaubasc1

addal,07h

ubasc1:retubascendp顺序结构程序设计24JZL1L1:………...L2:…...L3:…...JMPL3TESTAX,1程序段1程序段2条件后继程序YN分支结构程序设计25JZL1L1:………...…...TESTAX,1程序段1后继程序条件YN分支结构程序设计26条件转移指令就是一个分支结构,常用数据比较指令:无符号数比较指令JB/JNAE/JCJNB/JAE/JNCJBE/JNAJNBE/JA有符号数比较指令JL/JNGEJNL/JGEJNLE/JGJLE/JNG分支结构程序设计27二分支结构例4在数据段中有两个16位二进制无符号数DATA1和DATA2,找出其中较小数,并存于MIN中。datasegmentdata1dw2000hdata2dw3f80hmindw?dataendsss_segsegmentstack db256dup(?)ss_segendscodesegmentassumecs:code,ds:data,ss:ss_segmainprocfarpushdsmovax,0pushaxmovax,datamovds,ax

movax,data1cmpax,data2jnaenextmovax,data2next:movmin,axretmainendpcodeendsendmain分支结构程序设计28三分支结构例5判断变量var中的值,若为正数,在result中存入0001H;为负数,在result中存入FFFFH;为零,在result中存入0000H。datasegmentvardw2000hresultdw0dataendsss_segsegmentstack dw100dup(0)ss_segendscodesegmentassumecs:code,ds:data,ss:ss_seg分支结构程序设计29main procfar pushds movax,0pushaxmovax,datamovds,ax

movax,varcmpax,0jllessjggreatmovax,0jmpshortnextless: movax,0ffffh jmpshortnextgreat: movax,0001hnext:movresult,axretmainendpcodeendsendmain分支结构程序设计30多分支机构例

根据内存字节变量control被置位的情况控制程序转移到8个子程序中的一个。datasegment

brn_tabdwsubr1,subr2,subr3,dwsubr4,subr5,subr6,dwsubr7,subr8controldb40hdataendsss_segsegmentstackdb100dup(0)ss_segendscodesegmentassumecs:code,ds:data,ss:ss_seg变量control转入子程序00000001subr100000010subr200000100subr300001000subr400010000subr500100000subr601000000subr710000000subr8分支结构程序设计31mainprocfar …

leabx,brn_tabmoval,controlgtbit:rcral,1jcgetagaddbx,2jmpshortgtbitgetag:call[bx]retmainendpsubr1proc…retsubr1endp…subr8proc…retsubr8endpcodeendsendmain分支结构程序设计32先执行、后判断初始化部分循环体修改部分条件循环结构程序设计先判断、后执行初始化部分循环体修改部分条件后继程序33单重循环循环结构程序设计34多重循环:气泡排序法

例在数据段中以buffer单元开始连续存放10个16位二进制有符号数,将这些数按由小到大顺序排列。开始初始化数组起始地址SI内循环次数N-1CX外循环次数N-1DXi=0地址加2数i<=数i+1?内循环计数CX-1CX=0?Y二数位置交换N外循环计数DX-1YNDX=0?NY结束各重循环的初始控制条件及程序实现内循环可以嵌套在外循环中,也可以几个内循环并列在外循环中,但各层循环之间不能交叉,可以从内循环跳到外循环,不可以从外循环直接跳到内循环防止出现死循环,即不能让循环回到初始条件,引起死循环35codesegmentassumecs:code,ds:data,ss:ss_segmainprocfar pushds movax,0 pushax movax,data movds,ax movsi,countsort1: movdi,1 movcx,di leabx,buffercircle: movax,[bx] incbxincbx cmpax,[bx] jlenext xchgax,[bx] mov[bx-2],ax movdi,cxnext:inccxcmpcx,si;比完

jlcircle;1遍

decsicmpdi,1jnesort1retmainendpcodeendsendmain循环结构程序设计36冒泡法的第二种实现 mainprocfar cmp ax,[bx] pushds jle next xor ax,ax xchg ax,[bx];交换数据

pushax mov [bx-2],ax mov ax,data next: loop main2 ;内循环

mov ds,ax pop cx movcx,count–1 loop main1;外循环main1: mainendp lea bx,buffer pushcxmain2: mov ax,[bx] inc bxinc bx循环结构程序设计37子程序(过程)调用程序设计(参数传递、保护现场)子程序设计38子程序设计子程序的描述(注释用)子程序的功能描述入口参数的描述出口参数的描述断点保护子程序中用到的寄存器应用堆栈进行保护 例:subr1proc pushax …… popax ret subr1endp39

子程序的参数传递通过寄存器传递参数通过全局变量传递参数通过堆栈传递参数其它子程序设计40子程序设计(一)无参子程序设计在子程序中无传入参数,也不返回参数例延时子程序DELAYPROC

PUSHCXDELAY1:MOVCX,0LOOPDELAY1POPCXRETDELAYENDP41子程序设计(二)带参数子程序设计使用寄存器传递参数例ASCII转换为16进制子程序(0-0FH)入口条件:(AL)存放ASCII码;出口条件:(AL)存放16进制;

atohexproc subal,30hcmpal,10

jlatohex1 subal,7

atohex1:

ret

atohexendp42子程序设计使用全局变量传递参数

主程序与子程序共用一组变量,这种结构独立性较差

在数据段中,data1存放4位压缩BCD码(低位在前),将其转化成二进制数,再存回data1中。

分析:二进制数=(((BCD3*10+BCD2)*10+BCD1)*10+BCD0BCD1BCD0BCD3BCD2data1低8位高8位datasegment

data1dw?dataendsss_segsegmentstackdb100dup(0)ss_segendscodesegmentassumecs:code,ds:data,ss:ss_seg43子程序设计startprocfarpushdsmovax,0pushaxmovax,datamovds,ax

movdata1,4356hcallbcdhexretstartendpbcdhexprocpushaxpushcxpushdx pushsipushdimovsi,data1

……movdata1,axpopdipopsipopdxpopcxpopaxretbcdhexendpcodeendsendstart44子程序设计通过堆栈传递参数在子程序调用之前将入口参数压入堆栈。子程序根据当前堆栈指针找到参数。

此种方法程序独立性强,高级语言编译程序多采用该种方法。

在数据段data1和data2中存放两个16位二进制有符号数,将其中较大数找出来存放于result中。datasegmentdata1dw3000data2dw-500resultdw?dataends45子程序设计ss_segsegmentstack db256dup(?)ss_segendscodesegmentassumecs:code,ds:data,ss:ss_segmainprocfar pushdssubax,axpushaxmovax,datamovds,ax

movax,data1pushax movax,data2pushax

callmaxpopcxpopcxmovresult,axretmainendpmaxproc

pushbpmovbp,sp

movdx,[bp+4]movax,[bp+6]cmpax,dxjgshortmax1movax,dxmax1:;movsp,bppopbpretmaxendpcodeends

endmain46子程序设计通过代码段传递参数例在数据段中有一个16位二进制无符号数var,计算下列表达式:var*10+600并把结果存于result单元中。datasegment vardw32767 resultdd?dataendsssegsegmentstack db100dup(?)ssegendscodesegmentassumecs:code,ds:data,ss:ss_seg47子程序设计startprocfar pushds movax,0 pushax movax,data movds,ax movax,var

callfunc dw10 dw600 leabx,r

温馨提示

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

评论

0/150

提交评论