版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 汇编语言程序设计(二)汇编程序设计设计数据结构表示( 变量、指针)设计程序结构:程序流控制(条件、分支、循环)程序设计方法举例 DOS/BIOS调用 (简单了解)操作数:标号/变量数值表达式/地址表达式运算符(算数、逻辑、关系、分析、合成)格式伪指令1DATA SEGMENT AT 8A00Hdata1 DB 03H,02H,01H,00Hdata2 DB 08HARRAY1 DW 3,4str DB HELLO$合理设计数据结构data1data2ARRAY1str2DATA SEGMENT AT 8A00Hdata1 DB 03H,02H,01H,00Hdata2 DB 08HAR
2、RAY1 DW 3,4str DB HELLO$合理设计数据结构data1data2ARRAY1strMOV AH,data1 ;AH=03H, 等于MOV AH, 0000HMOV AX,data1 ;AX=0203HMOV AH,data1+1 ;AH=02H 地址表达式。MOV AL,data1+2*2 ;AH=08H 标号或变量加/减某个整型 ;常量时仍表示标号或变量。3DATA SEGMENT AT 8A00Hdata1 DB 03H,02H,01H,00Hdata2 DB 08HARRAY1 DW 3,4str DB HELLO$合理设计数据结构data1data2ARRAY1st
3、rINC data2 ;data2所代表的内存单元里的值加1。MOV AL,data2-data1 ;AL=04H。同一段内的两个标号或变量 ;相减,得到的是数值。MOV AL, OFFSET data1+2*2 ;OFFSET优先级高于+号 ;等于MOV AL, 44DATA SEGMENT AT 8A00Hdata1 DB 03H,02H,01H,00Hdata2 DB 08HARRAY1 DW 3,4str DB HELLO$合理设计数据结构data1data2ARRAY1str用变量的偏移地址(字)或全地址(双字)来初始化存储器XX DW str;值为str的偏移地址YY DD str
4、;值为str的全地址段基地址(高字)和偏移地址(低字)5DATA SEGMENT AT 8A00Hdata1 DB 03H,02H,01H,00Hdata2 DB 08HARRAY1 DW 3,4str DB HELLO$合成运算符PTRdata1data2ARRAY1strLEA SI, data1MOV WORD PTR SI,4;0004H存入data1的第一个字。 MOV BX,OFFSET data1JMP DWORD PTR BX;跳转到CS:IP=0001H:0004H。;段间间接转移。04H00H6DP1 DD PRC1,PRC2DATA ENDSCODE SEGMENT;设C
5、S为8B00H PRC1 PROC FAR;8B00:1000:PRC1 ENDPPRC2 PROC FAR;8B00:2C20:PRC2 ENDP00H10H00H8BH20H2CH00H8BHDP18A00:000FH(PRC1)8B00:1000H合理设计数据结构用标号的偏移地址或全地址来初始化存储器7第三章 汇编语言程序设计(二)汇编程序设计设计数据结构表示( 变量、指针)设计程序结构:程序流控制(条件、分支、循环)程序设计方法举例 DOS/BIOS调用 (简单了解)操作数:标号/变量数值表达式/地址表达式运算符(算数、逻辑、关系、分析、合成)格式伪指令8环境与代码运行0000:03F
6、FFFFF:0堆栈段数据段代码段CS:IPDSSS:SP系统起始运行程序中断向量区(系统专用)栈顶最多4个活动段分段结构ES9 汇编语言源程序格式(例) STACK1 SEGMENT PARA STACK STACK DB 512 dup(?) ;定义堆栈段STACK1 512字节STACK1 ENDS DATA SEGMENT ;定义数据段DATAMESSAGE DB This A Sample Program,LFCR$ DB 0DH,0AH,$ACHAR DW ?DATA ENDS ;数据段DATA结束CODE SEGMENT ;定义代码段CODE ASSUME CS:CODE,DS:D
7、ATA; 说明汇编程序活动段范围段名段说明保留字10汇编语言例程 (续1 )MAIN PROC FAR ;MS-DOS 模板语句START:PUSH DS XOR AX,AX PUSH AX ;保存返回指针 DS:0START1:MOV AX,DATA MOV DS,AX CALL PRINT_A_CHAR RET;返回OSMAIN ENDPPRINT_A_CHAR PROC RETPRINT_A_CHAR ENDPCODE ENDS END START;汇编结束子程序, near11汇编语言例程 (续1 )如何返回DOS?方法1:MAIN PROC FARSTART:PUSH DS;开始XO
8、R AX,AXPUSH AX方法2:;结尾MOV AH,4CH ;主过程没有申明为FAR时返回DOS法 INT 21H12汇编语言程序设计方法回顾 设计步骤:分析、建模、算法画流程图判断框 条件?终止框过程/执行框起始/准备框 流程图各框的表示法开发步骤:分配存储空间单元、编程、调试(DEBUG版)-发行(Release)版 设计方法:自顶向下,逐步细化具体小任务; 模块化程序设计:相对独立、功能单一、I/O关系明确、便于排障。13汇编语言程序设计指令回顾置位 OR AL, 00001000B; 复位 AND AL,01110111B; 判位0/1:TEST AL, 00001000B; JZ
9、(0)/JNZ(1) 多位判零CMP AL,0 JZAND AL,AL; OR AX,AX; TEST AL,AL ; JZ程序流控制 标志单元计数器循环14回顾:条件判断与程序跳转控制比较指令(CMP)、测试指令(TEST) 等对标志寄存器中某些位有所改变,判断之从而控制程序跳转CMP AX, 0JCNEXT1 TEST AL, 01H JNZNEXT2NEXT2:小于不等15汇编语言程序设计结构(一)质量评估 内存容量(效率)、速度、源代码(复杂性)、可维护性、可靠性基本结构 (单任务):顺序、分支、循环语句1语句2语句3语句nMOV AX,100MOV BX,200MOV CX,8000
10、ADD BX, CXCMP BX,1000JZ NEXT怎样写出高质量的程序?16汇编语言程序设计分支结构基本结构 (单任务):顺序、分支、循环程序段1程序段2条件?NY CMP AL,100 JZ NEXT1 MOV CX, 2000 JMP N100NEXT1: MOV CX, 3000N100: MOV COUNT, CXif(条件) else 17汇编语言程序设计多分支结构基本结构 (单任务):顺序、分支、循环.程序段1程序段n程序段2程序段n-1多路条件测试条件:数据比较结果散转:程序入口表程序流变化switch (cv) case v1: case v2: break;18汇编语言
11、程序设计循环结构基本结构 (单任务):顺序、分支、循环N程序段1结束循环?Y计数循环条件循环while (.) do . MOV CX,0; CHECK:CMP CX,100; JNC FINISH;CX=100则跳转 INC CX, JMP CHECK;FINISH: 19汇编语言程序设计循环结构基本结构 (单任务):顺序、分支、循环循环体结束?Ndo . while(. )MOV CX,0; CHECK:. INC CX; CMP CX,100, JC CHECK;CX100则跳转FINISH:20循环结构嵌套 DELAY1: MOV DX,50000;延时xx msDELAY2: NOP
12、 NOP DEC DX JNZ DELAY2 DEC CX JNZ DELAY1 RET MOV CX,1000 DELAY: PUSH CX PUSH DX MOV CX,1000POP DXPOP CXLOOP DELAY;CX自动减1RET多重循环:延时程序例21程序设计举例:(1)分支跳转结构: 根据X0 给Y赋值-1,0,1MOV AL, XMOV AH, 1CMP AL, 0JG EXIT;如果AL0则跳转JZ ZEROMOV AH, -1;0JMP EXITZERO: MOV AH, AL;=0EXIT:MOV Y,AH;统一出口22(2)分支:比较测试结构(最大值w) .cod
13、e MOV BX, OFFSET CMPDAT MOV CX, COUNT MOV AX, BX INC BX INC BXCHECK0: CMP AX, BX JNC CHECK1 MOV AX, BX;总是把较大数存入AXCHECK1:INC BX INC BX LOOP CHECK0EXIT: .dataCMPDAT DW 1,2,3,7,6,5COUNT EQU ($-CMPDAT)/2;个数23(3)分支表-散转例题:设有8种产品的产品编号分别为0,1,2,7,各产品的加工子程序名分别为PRO0,PRO1,PRO7。编写由已知编号INDEX序号转至相应加工子程序处理的程序。要点:利用
14、查表跳转简化多分支结构的设计。24 方法1:利用表内地址分支,表的内容是各分支程序入口的偏移地址。 .DATA BASE DW PRO0, PRO1, PRO2, PRO3, PRO4, PRO5, PRO6, PRO7INDEX DB ?.CODESTART:MOV AX,DATAMOV DS,AXPRO0:;处理子程序JMP EXITPRO1:JMP EXITPRO7:JMP EXIT25MOV BL,INDEX;需要跳转的分支程序编号MOV BH,0SHL BX,1;BX值乘以2JMP BASEBX;跳转至相应分支程序 ;基址寻址 EXIT:MOV AX,4C00HINT 21HSTAR
15、T ENDPCODE ENDSEND START26方法2:利用表内指令分支,表的内容是转向各子程序的指令。 MOVAL,INDEX ;取编号MOVAH,0MOVBL,AL ;编号值乘以3ADDAL,ALADDAL,BLMOVBX,OFFSET BASE;取命令表的基址ADDBX,AXJMPBX ;跳转到命令表的相应位置BASE:JMPPRO0 ;BASE是命令表(代码段中),;JMP是3字节指令JMPPRO7PRO0:;子程序JMPEXIT27例:计算!(N=8 WORD; N=12 DWORD)RESULT DW ?MOV AX, N MOV CX, AXDEC CX;循环执行N-1次LP
16、: MUL CX;默认乘数AX,积AXLOOP LPMOV RESULT,AX(4)循环结构28例: 从数组MYDATA开始的10个内存单元(字节型)中,找值等于0的单元个数,存入变量COUNT中。 MOV BX, OFFSET MYDATA-1MOV CX,10;循环次数MOV COUNT, 0AGAIN:INC BXCMPBX, 0LOOPNZ AGAINJCXZOK;此时有两种可能性CX=0 或 ZF=1INC COUNTJMP AGAINOK:指令测试条件LOOP 目标标号CX CX-1CX!=0LOOPE/LOOPZ 目标标号CX CX-1ZF=1且CX!=0LOOPNE/LOOPN
17、Z 目标标号CX CX-1ZF=0且CX!=0JCXZ 目标标号 CX=0(5)循环结构29汇编语言程序设计过程调用过程(子程序)反复使用程序段,简化设计、减少程序空间开销、易读、易维护调试。问题 子程序现场保护/现场恢复;主程序(调用者)完成 PUSH AX PUSH BX CALL SUBRT POP BX POP AX .子程序完成 SUBRT PROCSUNRT: PUSH AX PUSH BX . POP BX POP AX RET 30段内直接/间接调用spsp-2CALL near_proc当前IP压入堆栈,段内跳转reg16/mem16RETspsp+2;近过程返回段间直接/间
18、接调用 spsp-4CALL far_proc当前CS(先):IP(后)压栈,段间跳转mem32RETspsp+4;远过程返回汇编语言程序设计过程调用31过程(子程序,函数, 方法)参数传递方法寄存器传递;内存单元(全局)传递;速度快,但结构差,难维护MOV SI, OFFSET SBuf_head MOV DI, OFFSET Dbuf_head MOV CX,COUNT CALL BLKCHEK堆栈传递-POP取/BP取(子程序采用RET n)(多任务)中断(嵌套):任务通信、协调 BLKCHEK PROC FAR;入参SI、DI、CX,;出参SUMBLKCHEK ENDP汇编语言程序设计
19、过程调用32例:求数组ARRAY中所有元素之和(假定不溢出)并存于SUM中。.DATAARRAYDB d1,d2,d3,dnCOUNTDB $-ARRAYSUMDB ?.CODELEA SI, ARRAYMOV CX, COUNTCALL SUM1;入参为SI、CX,出参为AXMOV SUM, AXIP堆栈段新栈顶下一条指令的偏移地址call前call后 程序设计举例(6):过程/子程序调用与参数传递33SUM1 PROC NEARCMPCX, 0JZEXIT;个数为0MOV AX, 0AGAIN: ADD AL, SIADC AH, 0INC SILOOP AGAINEXIT:RETSUM1
20、ENDP(续)IP堆栈段新栈顶RET后RET前当前IP值;入参为SI、CX,出参为AX34 例: 把内存中某一区域的数据块传送到另一区域中。如果源数据区与目标数据区的一部分地址发生重叠,应考虑从何处开始传统以及传送方向。指令:MOVS 目标,源(DS:SI ES:DI,并根据DF标志自动修改SI和DI)DS:SI=源串首址 ES:DI=目标首址 CX=串长MOVSB ;字节串传送MOVSW ;字串传送DF=0 增方向DF=1 减方向 程序设计举例(7):分块传送35 须从高地址开始传,递减须从低地址开始传,递增 程序设计举例(7):分块传送36(续)DATASEGMENTSTRGDB256 D
21、UP(1,2,3)STG1EQU STRG+7 ;源串STG2EQU STRG+27 ;目标串STRSEEQU 50;串长DATAENDSSSTACKSEGMENTSTACKDB256DUP(?)SSTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATAMAIN:.MOVAX,DATAMOVDS,AX假设都在数据段中37MOVES,AXMOVCX,STRSE;MOV SI,OFFSET STG1; 源串首址MOV DI,OFFSET STG2;目标首址CLD ;增量方式PUSH SI ADD SI,STRSE-1 ;SI=源串末址 CMP SI,DI
22、POP SI JL OK;不重叠 STD;重叠,按减量 ADD SI,STRSE-1 ;指向串末 ADD DI,STRSE-1OK:REP MOVSB ;按增量CODE ENDSEND MAINSTG1STG2STRSESTG1+STRSE(续)38第三章 汇编语言程序设计(二)汇编程序设计设计数据结构表示( 变量、指针)设计程序结构:程序流控制(条件、分支、循环)程序设计方法举例 DOS/BIOS调用 (简单了解)学会使用操作数:标号/变量数值表达式/地址表达式运算符(算数、逻辑、关系、分析、合成)格式伪指令39用户程序控制PC机硬件的方式直接IOBIOS:固化在ROM中的一组外设驱动与管理
23、软件DOS:在BIOS基础上开发了一组IO处理程序高级语言DOS和BIOS调用(Disk OS-Basic I&O system)两组系统服务程序,用户可以通过两者提供的功能程序,来编制直接管理和控制计算机硬件设备的底层软件,完成基本IO(显示器、键盘、硬盘等)、内存和文件管理,以及中断向量、时钟设置等功能。BIOS/MS-DOS功能调用40BIOS/MS-DOS功能调用硬件控制直接IO:移植性差,必须很了解外设BIOS:运行效率高,留驻在ROM中,独立于OSDOS:基于MS-DOS,无须太多了解硬件,移植性好。高级语言:功能少,执行效率慢。移植性:直接IOBIOSDOS 高级语言关键:DOS
24、与设备无关-BIOS与设备相关应用: 软中断指令 INT n,实现系统功能调用概念和使用41BIOS/DOS 功能调用86PC:4种中断:NMI、INTR、内部中断、软中断软中断指令 INT n:INT 10HBIOSINT 21HDOS系统功能调用步骤:确定功能号AH置入参执行INT 21H 分析出参0-3FFH 中断向量表,0255中断号对应中断例程入口n=5H1FH 调用BIOS中的服务程序 P391附录5n=20H3FH调用DOS中的服务程序 P387附录4n=40HFFH自由中断区42 BIOS/DOS (P174-204)功能调用21H号中断的常用功能号:01/02H 单字符输入/
25、输出(带回显)09/0AH 字符串输出/输入特点: (1)不用 CALL;(2)BIOS-ROM固化;(3)用户程序不必与服务程序代码相连,令用户代码简洁、可读性好,调试、使用方便;例:显示字符(DOS仅字符方式) MOV AH, 2 ; AH的值功能号MOV DL,AINT 21H; n=21H中断类型号43 DOS系统功能调用读键盘(阻塞)MOV AH,1INT 21H CMP AL,Y ;出参 返回到DOSMOV AH, 4CHINT 21H 将一个以$结尾的字符串输出到屏幕;入参:令DS:DX指向该字符串MOV AH, 9INT 21H 44 Hello World 与系统调用DATA
26、SEGMENTszHelloDBHello,World!,0dh,0ah,$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOVDS,AXMOV AH,9MOVDX,OFFSET szHelloINT 21HMOV AH,4CHINT 21HCODEENDSEND START45 补充知识1.DOS为层次型模块化结构的操作系统,它由一个引导程序Boot和三个功能模块(输入输出管理模块、文件管理模块、命令处理程序)以及外部命令集(.COM/EXE/.SYS)组成 2.发展(1.06.22+,4.0后为多任务)/IBM PCDOS3.局限性(8086工作在实模式下寻址采用16位段和偏移量,最大分段64KB,最大寻址空
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师版《平行四边形的面积》
- 王守仁知识讲义学习
- 部编人教版八年级历史上册课件:第6课戊戌变法学习
- 幼儿园保教工作管理课件
- 七年X线考题课件
- 骨骼、肌肉的保健课件
- 2025年元旦喜庆红灯笼模板
- 山东省泰安市第一中学2024-2025学年高二上学期11月月考生物学试题(含答案)
- 首师大版三年级科学上册教案
- 湖南省娄底市新化县2024-2025学年八年级上学期12月月考物理试题(含答案)
- 阿里巴巴对新员工培训制度
- SMM英国建筑工程标准计量规则中文 全套
- (中职)经济学基础AB卷期末试卷及答案
- 《林黛玉进贾府》原文
- 刑法学(上册)马工程课件 第4章 犯罪概念与犯罪构成
- 第九课 四川料理は辛いです 课件 【备课精讲精研】 新标准日本语初级上册
- 全国小学数学优质课一等奖《9加几》精品课件
- 羽毛球训练计划以及周计划
- 五年级上册数学说课课件8.1分数四则混合运算∣青岛版五年制 (共24张PPT)
- 备战2022届高考英语 应用文发言稿写作指导 课件(13张PPT)
- 电磁场与电磁波课后习题答案全-杨儒贵
评论
0/150
提交评论