第五章程序设计方法和上机调试_第1页
第五章程序设计方法和上机调试_第2页
第五章程序设计方法和上机调试_第3页
第五章程序设计方法和上机调试_第4页
第五章程序设计方法和上机调试_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、组逬型,本段可以被别的段引用LICDATA,一第五章 程序设计方法和上机调试5.1汇编语言程序设计方法汇编语言设计基本要求:结构化、简明、易读、易调试、易维护(修改、扩充等) 执行速度快: 占用的存储空间少厂相矛盾,根据实际权衡汇编语言程序设计的基本步骤: 分析问题,建数学模型,确左算法 绘制流程图或写出步骤安排 分配空间及寄存器,根拯框图写程序 静态检査 上机调试程序结构类型: 顺序结构 分支结构不同的情况有不同的做法 循环结构重复做的工作 子程序多次重复使用的、具有通用性便于共享的部分。子程序前面应加必要的说明:子程序名称:功能:入口参数:出口参数:所用寄存器例1:査平方表程序一一顺序结构

2、015的平方值存在TABLE开始的16个单元。任给一自然数M在XX单元中。查表求M的平方值,并将结果存入YY单元中。STACK SEGMENT PARA STACK STACKDB 50 DUP (?)STACK ENDSDATA SEGMENT PARA PUBLIC SATATABLE DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81DB 100, 121, 144, 169, 196, 125XX DB 6YY DB ?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA, SS: STACK 段寄存器指向说明CS指向CO

3、DE段START PROC FARPUSH DS MOV AX, 0 核DOS段值和偏移量(零)入栈。皿SHPUMOV AX, DATAMOV DS, AX:当前数据段MOV BX, OFFSET TABLE :取表的偏移量C-MOVAH,0MOVAL,XXADDBX,AXI-MOVAL,BXMOVYY,ALRETSTARTENDPCODEENDSEND START用 MOV AL, XX XLAT代替:取要查数的偏移量:查表 MOV AL, XX BXP67 页粒 XLAT换码指令完成一字节的查表转换AL- (BX+AL)表的首址放入BX,相对首址偏移值入AL。TABLEXXXXYY例2:数

4、据块传送一一分支结构将内存中首址为STG1、长度为STRSE的数据块传送到首址为STG2的区域中去。 无重迭 STG1+STRSE-1 :计数器值STGl:数据源指针STG2;目的数据指针 ;增量传送 PUSH SIADD SI, STRSE-1CMP SLSIOKDIOK:GOOCODEPOPJB (STDADDADDREPRETENDPENDSEND GOOSL STRSE-1DI, STRSE-1MOVSB:保护源操作数指针:源最后一个数指针:比较 STG1+STRSE-12STG2.减 :恢复 SI AHCMPAH 30HJLNEXTo小于 转CHPAH, 39HJGABC:大于9转I

5、NC DH:数字个数+1JMP NEXTABC: CMPAH, 41HJLNEXTo 小于 转CHPAH, 5AHJGNEXT:大于它转INCDL;字母个数+1NEXT:INCBX;数组地址+1DECCH;计数-1JNZLP;不为0跳转继续MOVBUF BX, DH:数字个数送内存单元MOVBUF BX+1,DH:字母个数送内存单元MOVAH,NSUBAH, DH;计算其它字符个数SUBAH, DLMOVBUF BX+2,AH:其它字符个数送内存单元RETMAINENDPCODEENDSEND STARTP124例6在一个带符号的字类型的数据串中,找出最大值-循环结构DATA SEGMENTV

6、ALUES DW 2、21, 87, 23, 14, 90; 0002H, 0015H, 0057H, FFE9H, 000EH,005AHCOUNT EQU $ -VALUES :数据串长度字节数,$-(地址il数器值)YY DW?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA, SS: STTSTART PROC FARPUSH DS 入MOV AX, 0 J : DOS交权时,DOS的段值和偏移量入栈。PUSH AXMOV AX, DATA丨指向DS段(当前)MOV DS, AX丁MOV BX, OFFSET VALUES :数拯首址偏移量M

7、OV CX, COUNT/2-1 :量计数器,比较n-l次MOV AX, BX:取第一个放AX中,做初始最大值。FINDM: ADD BX, 2:下移一个数据原来的最大值与现在的比:若原来的大、不变、转移:否则,换新的最大值入AXCMP AX, BX:JG TESTIPMOV AX, BXTESTIP:LOOP FINDM:检査循环是否结束MOV YY, AXRET:将最大值放入单元STARTENDPCODEENDSEND START方法:将第一个数据作为初始最大值,再将后面的数据与其比较.将最大值放入AX 中。P131页 例10在数据段疋义了两个数组,编一个程序实现对两数组分别求和。要求采

8、用子程序调用形式。调用程序用CALL指令调用之前把子程序所需参数入栈,以便子程序运行时使用这些 参数。当子程序返回后,这些参数已不再有用,因此子程序结朿时的RET指令应使用带 常数的返回指令。以便堆栈恢复原态。STACK SEGMENT PARA STACK STACK “SPAE DW 20 DUP (?)TOP EQU LENGTH SPAESTACK ENDSDATASEGMENTARY1DB b 2, 3, 4, 5, 6, 7, 8, 9, 10NUM1EQU $ -ARY1;求数组1长度SUMIDW ?ARY2DB 20, 30, 40, 10, 2h 33NUM2EQU $ -A

9、RY2:求数组2长度SUM2 DW ?DATA ENDSMAIN SEGMENTASSUME CS: MAIN, DS: DATA, SS: STACKSTR:PUSH DSIMOV AX, 0 JDos入栈PUSH AXMOV AX, DATA指向当前数据段MOV DS, AXMOV AX, NUM1PUSH AX:数组长度进栈参数1MOV AX, OFFSETARY1PUSH AX:数组首址偏移量进栈,参数CALL FAR PTRSUM : CS、IP先后进栈MOV AX, NUM2PUSH AXMOV AX, OFFSETARY2PUSH AXCALL FAR PTRSUMHLTMAIN

10、ENDS:主程序结朿:功能:数组求和:入口参数:数组长度、首址偏移量。出口: E :所用寄存器AX、BX、CX、BPPROCE SEGMENTASSUME CS: PROCE , DS: DATA, SS: STACKSUM PROC FARPUSH AXPUSH BXPUSH CXPUSH BPMOV BP, SPPUSHFMOV CX, BP+14:参数1,因在PUSHF之前SP移入BP,所以+14是参1。MOV BX, BP+12:参数2,首址偏移量MOV AX, 0ADN: ADD AL, BXINC BXADC AH, 0:进位加进去LOOPADNMOV BX, AX :数据之和送结

11、果单元POPF:标志出栈 Flag(sp+1, sp), spsp+2POP BPPOP CXPOP BXPOP AXRET 4;舍弃两个参数返回原来参数入栈两次。SUM ENDPPROCE ENDSEND STR 5. 2汇编语言上机调试过程进入用户目录进行程序编辑。loginF:cd userF:user5 /F:user5Edit保存:Alt进入主菜单。Save, save as*MASH/xyz. ASM.Source filename . ASMJ:文件名源文件Object filenamexy乙 OBJ: 目标文件Source Listing NUL. LST:打印文件Cross

12、Reference NOL. CRF/ 交叉索引文件 0 Warning Errors0 Severe ErrorsDOS 状态下 TYPE XYZ. ASMLST连接 Link /均可打印出来汇编程序建立的目标码文件即obj文件必须经过连接以后,才能成为可执行文件。即EXE 文件。Object Modules . OBJ: xyz / 目标文件RON File xyz. EXE: / 可执行文件List FileNUL. MAP:内存分配图文件Libraries . LIB:库文件若有多个要连接的OBJ文件,应一次打入,各OBJ文件名词用“ + ”号相间隔。运行文件XYZ /调用DEBUG程

13、序调试在DOSDEBUGPath filename.user5xyz exe即岀现“一”提示符,说明系统已在DEBUG管理之下。一、显示内存单元命令。D/ 或D地址从地址在显示80H个字节。当前地址开始或一D范围显示80H字节二、修改存储单元内容命令EE 地址显示原来单元内容输入一个字节的16进制数,按空格键,则修改完成。接着显示下一单元的地址和原有内 容。按回车结束此命令。三、检査和修改寄存器内容的命令R-R显示所有寄存器内容R AX显示AX寄存器内容RF显示和修改标志位状态宜位:OY DN El NG ZR AC PE CY复位:NV UP DI PL NZ NA PO NC除跟踪标志T之

14、外。四、运行命令G-G 二执行的起始地址偏移屋断点地址1 断点地址2最多可设置10个断点。五、跟踪命令T (单步)T二指龙地址执行指左地址处的一条指令停下来,显示CPU所有寄存器和标志状态。-T 从CS: IP执行一条指令一二指定地址值鼻行的指令条数.六、反汇编命令U-U显示32个字节的源程序内容U范围P118页例:DATASEGMENTTABLEDB 0, b 4, 9XXDB 2YYODBRESULT:DATAENDSCODESEGMENTASSUME CS: CODE, DS: DATA, SS: STACK段寄存器指向说明CS指向CODE段START PROC FARPUSH DS M

15、OV AX, 0 卜将DOS段值和偏移量(零)入栈匚SHpuMOV AX, DATAMOV DS, AX:当前数据段MOV BX, OFFSET TABLE :取表的偏移量MOVAH, 0:可用 MOV AL, XXMOVAL, XX:XLAT代替ADDBX, AX:取要查数的偏移量MOVAL, BX:查表 MOV AL, XX EBXRETSTARTENDPCODEENDSEND STARTMOV AL, BXr ADD AL, 30H:转换成 ASCII 码值MOV YY, AL加f MOV AH, 9 MOV DX, OFFSET YYO1 INT 21HRET 5. 3宏汇编与条件汇编

16、源程序中若有的程序段要多次使用,可不重复书写,而用一条宏指令来代替。 格式:宏指令名MACRO (形式参呈:表)宏定义体ENDM宏调用格式:宏指令名实元表。例:8位带符号数相乘,结果放入RESULT单元被乘数乘数结果宏定义 MULTPLY MACRO OPRD1 , OPRD2. RESULTPUSH AXMOV AL, OPRD1IMUL OPRD2 : AX-AL*OPRD2MOV RESULT, AXPOP AXENDM宏调用:MULTPLY 240, BL, SAVC 宏展开:即在汇编时产生+ PUSH AX+M0V AL, 240+IMUL BL+M0V SAVC, AX+P0P AX实元可以是常数、寄存器、存储单元名及地址或表达式也可以是操作码。例移位指令都以S打头,后面可以用宏。除了 MACRO之外,还有宏汇编伪指令REPT、IRP、IRPC也都以ENDM作为结束符。二PURGE (用来取消宏左义)与LOCAL格式:PURGE宏指令名,LOCAL用来说明宏体内的标号为局部标号,以免多次调用宏泄义时标号重复而岀错。格式:LOCAL局部标号表三. 宏指令与子程序的区别 宏指令是为了简化源程序的书写,汇编时,

温馨提示

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

最新文档

评论

0/150

提交评论