东南大学汇编语言.ppt_第1页
东南大学汇编语言.ppt_第2页
东南大学汇编语言.ppt_第3页
东南大学汇编语言.ppt_第4页
东南大学汇编语言.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、1,第三章 汇编语言程序设计(2),格式# 伪指令# DOS/BIOS调用 (简单了解) 重点:数据结构表示 变量、指针 程序结构 程序流控制(条件、分支、循环) 程序设计方法,Assembly Language Programming(2),2,编辑、汇编与链接程序,编辑器(Editor) 程序设计 汇编器(Assembler) 汇编语言(与机器有关) MASM/ASM/TASM 链接器(Linker) 待装配的BIN指令代码 可执行BIN指令代码,(.OBJ, .LIB, etc ),( XXXX.EXE ,(.DLL), ),3,0000:03FF,环境与代码运行,FFFF:0,堆栈段,

2、数据段,代码段,CS:IP,DS,SS:SP,系统起始运行程序,中断向量区 (系统专用),栈底,最多4个活动段,分段结构,ES,4,STACK1 SEGMENT PARA STACK STACK DB 512 dup(?) ;定义堆栈段STACK1 512字节 STACK1 ENDS DATA SEGMENT ;定义数据段DATA MESSAGE DB This A Sample Program, LFCR$ DB 0DH,0AH,$ AnyDATA DW 100,. DATA ENDS ;数据段DATA结束 CODE SEGMENT ;定义代码段CODE ASSUME CS:CODE,DS:

3、DATA; 说明汇编程序活动段范围,汇编语言源程序格式(例),段名,段说明保留字,标号,.286,5,汇编语言例程 (续1 ),MAIN PROC FAR ;MS-DOS 模板语句 START:PUSH DS XOR AX,AX PUSH AX ;保存返回指针 DS:0 START1:MOV AX,DATA MOV DS,AX LEA BX,MESSAGE LOOP1:CMP BYTE PTR BX,$ ; 24H JZ NEXT ;是结束符 CALL PRINT_A CHAR ;输出该字符 INC BX JMP SHORT LOOP1 ; 继续,6,汇编语言例程 (续2 ),NEXT: RE

4、T ;返回OS MAIN ENDP PRINT_A_CHAR PROC MOV AH,5 MOV DL,BX ;子程序,NEAR INT 21H RET PRINT_A_CHAR ENDP . CODE ENDS END START;汇编结束,运行从START开始,7,伪操作命令例1,BV1 DB 30, 20H, 111110B BV2 DB 3 DUP(xx/?) ;DB ?,? BV3 DB This is a example BV4 DB . WV1 DW BV1,BV2,BV3 ;近指针变量 WV2 DD BV4,. ;远指针变量 DWV1 DD WV1,WV2,. ;指针的指针变量

5、 DP1 DD PRC1,PRC2 ;PRC1,PRC2为过程名 BV2L EQU BV4-BV3 MOV BX,MV1+4 MOV AL, BX ; AL=? JMP FAR PTR DP1+4; ;执行?,8,MYDATA SEGMENT AT 8A00H BV1 DB 30,20H,111110B BV2 DB 3 DUP(20H); DB ?,? BV3 DB This is a example$ BV4 DB It is a Problem$ WV1 DW BV1,BV2,BV3 WV2 DW BV4 DWV1 DD WV1,WV2 DW2 DD . MYDATA ENDS BV2的

6、地址=? DW2的地址=?,8A00:0003H,8A00:003AH,;- 0000 ;- 0003H ;- 0006H ;- 0008H ;- 001AH ;- 002AH ;- 0030H ;- 0032H ;- 003AH,伪操作命令例1分析,9,CODE SEGMENT PRC1 PROC FAR ;8B00:0000 : PRC1 ENDP PRC2 PROC FAR ;8B00:2C20 : PRC2 ENDP DP1 DD PRC1,PRC2 ;8B00:3000 ;DP1 内容=? ASSUME CS:CODE, DS:DATA JMP FAR PTR DP1+4; 目标地址

7、=? =,伪操作命令例2分析,00,00,00,8B,20,2C,00,8B,8B00:2C20,JMP FAR PTR CS:3004H,10,汇编语言程序设计方法回顾,步骤:分析、建模-算法 -单任务同其它语言:,存储空间单元-编程-调试(DEBUG版)反复-运行/发行(Release)版 设计方法:自顶向下,逐步细化,层层分解具体小任务; 模块化程序设计:相对独立、功能单一、I/O关系明确:合作、排障;Global/Local 变量(CS:xxx/Auto/Static),11,汇编语言程序设计结构(P166),质量评估 内存容量(效率)、速度、源代码(复杂性)、可维护性、可靠性 基本结

8、构 (单任务):顺序、分支、循环,乱序?,MOV AX,100 MOV BX,200 MOV CX,8000 ADD BX, CX CMP BX,1000 JZ NEXT,12,汇编语言程序设计分支结构,基本结构 (单任务):顺序、分支、循环,CMP AL,100 JZ NEXT MOV CX,2000 NEXT: MOV CX,3000,CMP AL,100 JZ NEXT1 JMP N100 NEXT1: MOV CX,3000 NEXT:,13,汇编语言程序设计分支结构,基本结构 (单任务):顺序、分支、循环,条件:数据比较结果 散转:程序入口表,程序流变化,14,汇编语言程序设计循环结

9、构,基本结构 (单任务):顺序、分支、循环,N,结束循环?,Y,计数循环 条件循环,for(i=0;i100;i+) do while() while () do ,15,汇编语言程序设计结构,过程(子程序)反复使用程序段,简化设计、减少程序空间开销、易读、易维护调试。-函数, 方法 ENTRY/ EXIT/USED指明传递和保护(变量/寄存器) 问题 保护现场/恢复现场(主程序(调用者)/子程序均可);,主程序(调用者)完成 PUSH AX PUSH BX CALL SUBRT;(不保护) POP BX POP AX . SUBRT PROC,子程序完成 SUNRT: PUSH AX PUS

10、H BX . POP BX POP AX RET,16,汇编语言程序设计结构,过程(子程序,函数, 方法)参数传递 寄存器传递;内存单元(全局)传递; 速度快,但结构差,难维护 MOV SI, OFFSET SBuf_head MOV DI, OFFSET Dbuf_head MOV CX,COUNT CALL BLKCHEK 堆栈传递-POP取/BP取(子RET n/主ADD SP+2*n) int BLKCHEK(amount:int, *destp:char, *srcp:char); C (多任务)中断(嵌套):任务通信、协调,;PUSH SI ;PUSH DI ;PUSH CX ;A

11、DD SP,6 ;C,17,汇编语言程序设计处理与判别,比较 CMP AL,A;41H,65 JZ/JNZ ; CMP CX,BUFSI JC(JNC) JG/JL 缓冲区/指针 初始化(DB/DW静态) XOR AX,AX; MOV BUF,AX; MOV BUFPT,0 ;OFFSET Buf_head INC BUFPT 修正计数(指针) CMP BUFPT, BUFEND ; full? OFFSET Buf_tail,18,汇编语言程序设计处理与判别,判零 AND AL,AL; OR AX,AX, TEST AL,AL ; OR AL,CL? CMP AL,0 JZ 置位 OR AL

12、, 00001000B; OR AL, 8 ;B3=1 复位 AND AL,01110111B; AND AL,77H; B7,B3=0 判位0/1:TEST AL, 00001000B; JZ(0)/NZ(1) 多位 程序流控制 标志单元计数器位循环816次,19,顺序程序举例,计算f(x)=5x3+4x2-3x+12=(5x+4)*x-3)*x+12 计算f(6) FXCALC PROC; ENTRY X=x,EXIT=f(x);Used:AX, DX MOV AX,5 MUL X ADD AX,4; MUL X;() SUB AX,3 ;() MUL X ADD AX,12 MOV RE

13、SULT,AX RET FXCALC ENDP ;?传递方式 : XDW 6; MOV X,6 存储变量传递参数,调用: MOV X,6 ; CALL FXCALC,20,分支:比较测试结构,跳转结构(P169) 根据X0 给Y赋值-1,0,1 MOV AL, XX MOV AH, 1 CMP AL, 0 JG EXIT;X0, AH=1 JZ ZERO MOV AH, -1;0 JMP EXIT ZERO: MOV AH, AL; 0 EXIT: MOV YY,AH,21,分支:比较测试结构(最大值w),MOV BX, OFFSET CMPDAT MOV CX,COUNT MOV AX,BX

14、 INC BX INC BX CHECK0: CMP AX,BX JNC CHECK1 MOV AX,BX CHECK1:INC BX INC BX LOOP CHECK0 EXIT:,22,分支表(跳转结构)-散转,表内:入口地址:SUB0-L/H,SUB1-L/H,.表内无条件转移指令 JMP SUB0,JMP SUB1,. 按INDEX序号跳转到相应子程序 DSEG SEGEMNT TABLE DW SUB0,SUB1,SUB2,SUB3,SUB4 INDEXDW ? RESULT DW ? X DW 2102 . MOV AX, DSEG ;SEG TABLE MOV DS,AX ,2

15、3,MOV BX,OFFSET TABLE MOV SI,INDEX ADD SI,SI JMP WORD PTR BX+SI; 转不同分支,分支表(跳转结构)-散转(续1),SUB2: MOV AX,100 MOV RESULT,AX RET,SUB1: MOV AX,X SAR AX,1 ;ADD AX,AX MOV RESULT,AX RET,SUB0: MOV AX, X ; ;不同分支程序 SHL,AX,1;X*2 MOV RESULT,AX RET,24,循环结构,条件控制法先判断后工作while .do; MOV CX,0; CHECK:CMP CX,100; JNC FINISH; INC CX, JMP CHECK; FINISH:,先工作后判断条件 do ( )while MOV CX,0; CHECK:. INC CX; CMP CX,100, JC CHECK; FINISH:,25,循环结构(续2),DELAY: MOV CX,1000 ; ; PUSH CX, ; PUSH DX, ; MOV CX,1000 DELAY1: MOV DX,50000;延时xx ms DELAY2: NOP NO

温馨提示

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

评论

0/150

提交评论