第四章汇编语言程序设计基础课件

PPT
  • 阅读 98 次
  • 下载 0 次
  • 页数 38 页
  • 大小 148.122 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
第四章汇编语言程序设计基础课件
可在后台配置第一页与第二页中间广告代码
第四章汇编语言程序设计基础课件
可在后台配置第二页与第三页中间广告代码
第四章汇编语言程序设计基础课件
可在后台配置第三页与第四页中间广告代码
第四章汇编语言程序设计基础课件
第四章汇编语言程序设计基础课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 38
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】第四章汇编语言程序设计基础课件.ppt,共(38)页,148.122 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44767.html

以下为本文档部分文字说明:

第四章汇编语言程序设计基础4.1循环程序设计结束初始化循环的初始状态循环体循环的工作部分及修改部分计数控制特征值控制地址边界控制修改部分循环控制条件YN例1.把BX中的二进制数以十六进制的形式显示在屏幕上。BX1234movch,4rotate:movcl,4rolbx,clmoval

,blandal,0fhaddal,30h;’0’-’9’ASCII30H-39Hcmpal,3ahjlprintitaddal,7h;’A’-’F’ASCII41H-46Hprintit:movdl,al

movah,2int21hdecchjnzrotate例2.将正数n插入一个已整序的字数组的正确位置。算法:将数组中数逐个与N比较,Si为指针若N<Ki,则Ki下移一个单元若NKi,则插在Ki的下一个单元,并结束临界条件:若NKn

,则插入Kn的下一个单元若N<K1,则K1~Kn后移一个单元,N插在第一个单元循环控制:计数控制元素个数=((字末地址-字首地址)/2)+1字数=(字节末地址-字节首地址)+1字节数地址边界控制结束地址为ARRAY_HEAD特征值控制:表示结束条件

的值例2.将正数n插入一个已整序的字数组的正确位置。xdw?array_headdw3,5,15,23,37,49,52,65,78,99array_enddw105ndw32movax,nmovarra

y_head-2,0ffffhmovsi,0compare:cmparray_end[si],axjleinsertmovbx,array_end[si]movarray_end[si+2],bxsubsi,2jmpshortcompareinsert:movarray_end[si+2],a

x-135491552233710599786532xn例3将首地址为A的字数组从小到大排序(气泡算法,多重循环)Adw32,85,16,15,8序号地址数比较遍数12341A322A+2853A+4164A+6155A+88321615885

161583285158163285815163285movcx,10loop1:deccxmovdi,cxmovbx,0loop2:movax,A[bx]cmpax,A[bx+2]jlecontinuexchgax,A[bx+2

]movA[bx],axcontinue:addbx,2looploop2movcx,dilooploop14.2分支程序设计判定条件ABABX判定条件…(1)两路分支结构(2)多路分支结构(1)逻辑尺控制(2)条件控制(3)地址跳跃表TABLEDWONE

,TWO,THREEJMPTABLE[SI]…1000ONE:…2000TWO:…3000THREE:…??case1case2case3case1case2casen。。。。。。例1.设有数组x(x1,…,x10)和y(y1,…,y10),编程计算z1=x1+y1z2=x2+y2z

3=x3-y3z4=x4-y4z5=x5-y5z6=x6+y6z7=x7-y7z8=x8-y8z9=x9+y9z10=x10+y10逻辑尺:00110111001减法0加法xdwx1,x2,x3,x4,

x5,x6,x7,x8,x9,x10ydwy1,y2,y3,y4,y5,y6,y7,y8,y9,y10zdwz1,z2,z3,z4,z5,z6,z7,z8,z9,z10logic_ruledw00dch……movbx,0movcx,1

0movdx,logic_rulenext:movax,x[bx]shrdx,1jcsubtractaddax,y[bx]jmpshortresult;向前引用subtract:subax,y[bx]result:movz[bx],axaddbx,2loopnext例2.根据AL寄存器中哪

一位为1(从低位到高位)把程序转移到8个不同的程序分支去。(寄存器间接寻址)branch_tabledwroutine1dwroutine2dwroutine3dwroutine4dwroutine5dwroutine6dwroutine7dwroutine8cmpa

l,0jecontinueleabx,branch_tableL:shral,1;逻辑右移jncadd1jmpwordptr[bx];段内间接转移add1:addbx,2jmpLcontinue:……routine1:……routine2:……4.3子程序的设计方法过程(子程序)定义伪操作pro

cedure_namePROCNEAR(FAR)……procedure_nameENDP(1)NEAR属性:调用程序和子程序在同一代码段中(段内调用)(2)FAR属性:调用程序和子程序不在同一代码段中(

段间调用)保存与恢复寄存器subtprocfarpushaxpushbxpushcxpushdx......popdxpopcxpopbxpopaxretsubtendp子程序调用(中断调用):隐含使用堆栈保存返回地址callnea

rptrsubp(1)保存返回地址(2)转子程序(IP)←subp的偏移地址callfarptrsubp(1)保存返回地址(2)转子程序(CS)←subp的段地址(IP)←subp的偏移地址(IP)(SP)→(IP)(SP)→(CS)子程序的调用和返回I

NTn(n:中断类型号)(1)保存现场和返回地址(FLAGS,CS,IP入栈)(2)转中断处理程序(IP)←(n*4)(CS)←(n*4+2)子程序返回:(1)ret(返回地址出栈)(2)iret(IP,CS,FLAGS出栈)(I

P)(SP)→(CS)(FLAGS)int21H子程序的参数传送(1)通过寄存器传送参数(2)通过存储区传送参数*子程序和调用程序在同一程序模块中,则子程序可直接访问模块中的变量。*子程序和调用程序不在同一程序模块中,则有两种传送方式:建立公共数据区和使用外部符号。(3

)通过地址表传送参数地址(4)通过堆栈传送参数或参数地址例3.十进制到十六进制的转换程序(通过寄存器传送变量)Decihexsegment;1016assumecs:decihexmainprocfarpushdssubax,axpushaxrepeat:calldecibin;102ca

llcrlfcallbinihex;216callcrlfjmprepeatretmainendpDecibinprocnear;102movbx,0newchar:movah,1int21h:1H功能调用,从键盘读入字符,读入字符在AL中subal,30hjlexit;<0退

出cmpal,9djgexit;>9退出cbwxchgax,bxmovcx,10dmulcxxchgax,bxaddbx,axjmpnewcharexit:retdecibinendpbinihexprocnear;216movch,4rotate:movcl,4rolbx,clmoval,b

landal,0fhaddal,30hcmpal,3ahjlprintitaddal,7h;‘A’~’F’printit:movdl,almovah,2int21hdecchjnzrotateretbinihexendpcrlfprocnearmovdl,0dhmovah,2int2

1hmovdl,0ahmovah,2int21hretcrlfendpdecihexendsendmain例4.累加数组中的元素(直接访问变量)datasegmentarydw1,2,3,4,5,6,7,8

,9,10countdw10sumdw?dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdssubax,axpushaxmovax,dat

amovds,axcallnearptrproaddretmainendpproaddprocnearpushaxpushcxpushsileasi,arymovcx,countxorax,axnext:addax,[si]addsi,2

loopnextmovsum,axpopsipopcxpopaxretproaddendpcodeendsendstart4.4I/O程序设计1.I/O设备的数据传送方式程序控制方式(查询方式)CPU利用指令反复查询I/O的状态,直到I/O准备好,

才进行输入/输出。此间CPU处于循环等待状态,未做有效的工作。中断方式CPU在执行程序的同时兼顾对I/O设备的控制或数据传送。当I/O设备准备好(空闲),由I/O通知CPU暂停正在运行的程序,转而处理I/O设备的请求,处理完即返回主程

序继续执行。DMA方式(直接存储器存取方式/成组传送方式)主要适用于高速I/O设备(如磁盘),CPU向I/O接口提供控制信息(如数据块的首地址及字节数),I/O设备直接和存储器进行成批数据的快速传送。2.程序直接控制I/

O方式I/O端口外设接口由一组寄存器(数据寄存器/状态寄存器/命令寄存器)组成,每个寄存器有一个端口地址(端口号),IBM-PC机的I/O地址空间可达64K(0000~FFFFH)。I/O指令主机与外设进行通信的最基本途径

。DOS功能调用和BIOS例行程序中的输入/输出功能也是由IN和OUT指令完成的。例:测试某状态寄存器(端口号27H)的第2位是否为1INAL,27HTESTAL,00000100BJNZERROR例1.Sound程

序movdx,6000;声音频率inal,61handal,11111100btrig:xoral,00000010bout61h,almovcx,1000;声音延迟delay:loopdelaydecdxjnetrig设备控制寄存器端口61H1/00控制其它外部设备与门放大器2号定时

器门控103.中断程序设计中断源:引起中断的事件外中断(硬中断):外设的I/O请求——可屏蔽中断电源掉电/奇偶错——非屏蔽中断内中断(软中断):INT指令/CPU错(除法错、溢出)非屏蔽中断请求中断逻辑INT

nINTO除法错单步n401CPU2NMI8259A可编程中断控制器(PIC)IR0系统定时器IR1键盘IR2彩色/图形接口IR3保留IR4串行通讯口IR5保留IR6软盘IR7打印机INTR08090A0

B0C0D0E0F中断操作的5个步骤:(1)取中断类型号(2)计算中断向量地址(3)取中断向量,偏移地址送IP,段地址送CS(4)转入中断处理程序(5)中断返回到INT指令的下一条指令例:BIOS中断INT4AH(P.136图4.13)4AH4=128H

4AH4+2=12AH(128H)IP(12AH)CS中断向量表IBM-PC中断系统能处理256种类型的中断,类型号为0~0FFH。中断向量表是各种中断处理程序的地址表。类型0的(IP)类型0的(CS)类型1的(IP)类型1的(CS)类型N的(IP)类型N的

(CS)类型255的(IP)类型255的(CS)00000000044*N003FCDOS功能调用(21H)存取中断向量设置中断向量:AH=25HAL=中断类型号DS:DX=中断向量INT21H取中断向量:AH=

35HAL=中断类型号INT21H返回时送ES:BX=中断向量中断程序的编写步骤:主程序:(1)设置中断向量(DOS调用AH=25H,AH=35H)(2)设置CPU中断允许位FLAGS中的IF位=1允许中断(STI开中断)=0禁止中断(CLI关中断)(3)设置中断屏蔽位I/O端口2

1H中断屏蔽寄存器中断屏蔽位=0允许中断=1禁止中断76543210定时器键盘打印机中断屏蔽寄存器21H76543210中断命令寄存器20HEOIMOVAL,20HOUT20H,AL中断处理子程序:(1)保存工作寄存器(PUSH)(2)开中断(STI)(3)中断

处理功能(4)关中断(CLI)(5)送中断结束命令(EOI,仅对硬中断)(6)恢复工作寄存器(POP)(7)中断返回(IRET)4.5BIOS和DOS基本调用调用方法:1、将调用参数装入指定的寄存器中;2、如需功能号,把它装入AH;3、如需子功能号,把

它装入AL;4、按中断号调用DOS或BIOS中断;5、检查或取得返回参数。例:建立文件程序MOVCX,0;normalattributeMOVDX,PATHNAM;pathnameMOVAH,3CH;creatfileINT21H;DOScallJCE

RROR;ifCF=1,error1.键盘I/O(1)BIOS键盘中断(INT16H)AH功能返回参数0从键盘读一字符AL=字符码,AH=扫描码1读键盘缓冲区的字符如ZF=0,AL=字符码,AH=扫描码如ZF=1,缓冲区空2取键盘状

态字节AL=键盘状态字节字符数字键字符码为ASCII码功能键、控制键字符码为0对应一个扫描码(2)DOS键盘中断(INT21H)AH功能调用参数返回参数1从键盘输入一个字符并回显在屏幕上AL=字符6读键盘字符,不回显DL=0FFH若有字符可取,AL=字符,ZF=0若无字符可取

,AL=0,ZF=17从键盘输入一个字符,不回显AL=字符8从键盘输入一个字符,不回显,AL=字符检测Ctrl-BreakA输入字符到缓冲区DS:DX=缓冲区首址B读键盘状态AL=0FFH有键入,AL=00无键入C清

除键盘缓冲区,AL=键盘功能号并调用一种键盘功能(1,6,7,8或A)例:输入字符串到缓冲区STRINGDATASEGMENTMAXLENDB32MAXLENDB32,0,32DUP(?)ACTLENDB?MAXLENDB32,33DUP(?)

STRINGDB32DUP(?)DATAENDS;CODESEGMENT…LEADX,MAXLENMOVAH,0AHINT21H…CODEENDSEND32568H61H70H70H79H0DHMAXLENAC

TLENSTRING

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?