第2部分汇编语言基础知识.ppt

上传人:本田雅阁 文档编号:2577260 上传时间:2019-04-11 格式:PPT 页数:57 大小:284.01KB
返回 下载 相关 举报
第2部分汇编语言基础知识.ppt_第1页
第1页 / 共57页
第2部分汇编语言基础知识.ppt_第2页
第2页 / 共57页
第2部分汇编语言基础知识.ppt_第3页
第3页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第2部分汇编语言基础知识.ppt》由会员分享,可在线阅读,更多相关《第2部分汇编语言基础知识.ppt(57页珍藏版)》请在三一文库上搜索。

1、第2部分 汇编语言基础知识,Assembly Language Programming,1 汇编语言的编码要求,Assembly Language Programming,基本特征,程序注释 保留字 标识符 语句 伪操作 汇编程序的基本框架 数据类型 简单的程序举例,注释,注释利用 ; 开始 可自成一行,也可在指令之后的同一行里 例如 ADD AX,BX ; 计算总量,保留字,在特殊情况下使用,具有固定用途而保留的某些名字,称为保留字。主要类型: 指令 如MOV, ADD等计算机可执行的操作 伪操作 如END, SEGMENT,为编译程序提供信息的语句 操作符 如FAR, SIZE,在表达式中

2、使用 预定义符号 如data, model等,在编译期间向程序返回信息,标识符1,用户定义的符号名称,包括两类: 数据项的名称:表示数据项的地址 如COUNTER DB 0 标号:表示指令、过程或者段的地址 MAIN PROC FAR B30: ADD BL, 25,标识符2,定义规则 第一个字符必须是字母或者不为.的特殊字符 长度限定在131之间 不能和保留字相冲突 不区分大小写 例如 合法: TATAL, QTY25, $P80 非法: 5P, .TY,字母: AZ和az 数字:09 特殊: ? _ . $,语句,语句包括两类: 指令具有对应的机器码 例如:ADD, MOV 伪指令只在程序

3、汇编过程起作用,产生机器不可执行的代码 例如: 定义数据项DB, DW,指令,指令机器指令 操作operation是必有的,规定该指令的动作 操作数operand是可选的,并且数量不定 例如: 标识符 操作 操作数 伪指令:COUNT DB 1 指令: MOV AX, 0,标示名称 操作 操作数1n ;注释,伪操作,介绍几个常用的伪操作 PAGE和TITLE SEGMENT PROC END和ENDP ASSUME,标示名称 伪操作 操作数1n ;注释,PAGE和TITLE,程序的开头,PAGE定义程序打印时一页的最大行数和每行最大字符数。 默认50,80 格式:PAGE 60, 132 TI

4、TLE为程序产生标题,打印程序时位于第2行 格式:TITLE Assembly program sort,SEGMENT,格式: segment_name SEGMENT align combine class segment_name ENDS 解释 定位align:指明段开始的边界。 通常段为小边界,参数为PARA。 组合combine:指明程序连接时,该段是否和其它的段组合在一起(以后解释),参数为STACK, COMMON, PUBLIC 堆栈段通常定义 segment_name SEGMENT PARA STACK 类别class:指明段的类别 代码段code,数据段data,堆栈段

5、stack,PROC,定义过程,格式: proc_name PROC FAR proc_name ENDP 过程名的操作数为FAR,意味着相应程序的入口点为此过程,在程序中只有一个操作数为FAR的过程。 ENDP指明过程的结束,过程的结束在代码段内,即ENDS之前完成。 代码段内可以包含任意数量的过程,其它的过程通常使用NEAR的操作数。,END,ENDS段结束 ENDP过程结束 END完整的程序结束 格式: END 过程操作数FAR的PROC,ASSUME,指明程序各个段的用途 典型的格式 ASSUME DS:dataseg, CS:codeseg, SS:stackseg, 上述的次序任意

6、 假如需要扩展段ES,也可以加上即可ES:dataseg,程序的框架结构,page 60,132 TITLE A04ASM1 (EXE) Move and add operations STACK SEGMENT PARA STACK Stack . STACK ENDS ; - DATASEG SEGMENT PARA Data DATASEG ENDS ; - CODESEG SEGMENT PARA Code MAIN PROC FAR ASSUME SS:STACK, DS:DATASEG, CS:CODESEG MOV AX,DATASEG ;Set address of data

7、MOV DS,AX ; segment in DS . MOV AX,4C00H ;End processing INT 21H MAIN ENDP ;End of procedure CODESEG ENDS ;End of segment END MAIN ;End of program,解释,段的定义顺序可任意 入口过程MAIN的名称可以为其它,例如START等 程序结束返回 MOV AH, 4CH ;请求结束处理 MOV AL, retcode ;设置返回码 INT 21H ;调用中断处理 通常正常返回0,故可写作 MOV AX, 4C00H INT 21H,编程技巧提示,由于汇编源程

8、序的格式相对不变,故可以把上述的框架保留下来,添加功能代码即可,数据类型 1,名称:对应标识符 伪操作Dn:定义数据的类型长度 字节DB(1字节) 字DW(2字节) 双字DD(4字节) 表达式:定义数据的数值的常数或者表达式,名称 Dn 表达式,数据定义的格式,数据的定义1,表达式的形式 对于尚未初始化的数据,使用 ?表示 常数 举例 最简单的情形 DATAX DB ? DATAY DB 25,数据的定义2,数据序列的定义数组 数据因素依次用 , 隔开 DATAZ DB 21, 22, 23, 24 对DATAZ的数据因素访问,根据数据所处的位置进行 DATAZ+0 表示21, DATAZ+1

9、 表示22,依次类推 MOV AL, DATAZ+3,数据的定义3,重复数据序列的定义 举例 DW 10 DUP(?) DB 5 DUP(12) DB 3 DUP (5 DUP(4) ) DB 4 DUP(3 DUP (0,1), 2 DUP($),名称 Dn 重复个数 DUP(表达式),请大家思考:上述的数据是什么?,数据的定义4,字符和字符串的定义 字符或者字符串在单引号 或者双引号“” 内定义 数据类型常用的是DB 举例 DB Computer city 若串中含有 “”,以下处理 DB Crazy sam”s CD DB “Crazy sams CD”,完整的源程序举例,page 60

10、,132 TITLE A04ASM1 (EXE) Move and add operations STACK SEGMENT PARA STACK Stack DW 32 DUP(0) STACK ENDS ; - DATASEG SEGMENT PARA Data FLDD DW 215 FLDE DW 125 FLDF DW ? DATASEG ENDS ; - CODESEG SEGMENT PARA Code MAIN PROC FAR ASSUME SS:STACK,DS:DATASEG,CS:CODESEG MOV AX,DATASEG ;Set address of data M

11、OV DS,AX ; segment in DS MOV AX,FLDD ;Move 0215 to AX ADD AX,FLDE ;Add 0125 to AX MOV FLDF,AX ;Store sum in FLDF MOV AX,4C00H ;End processing INT 21H MAIN ENDP ;End of procedure CODESEG ENDS ;End of segment END MAIN ;End of program,编写注意,编写建议: 同一小功能段,编写注释 程序识别一般不区分大小写 可读性强,通常所有汇编指令用大写,而注释全部用小写,使用简化的编

12、程框架,.MODEL 自动产生ASSUME语句 .MODEL 本教程通常两种: Tiny: 为.com生成代码 Small: 为.exe生成代码 并且两者代码偏移量限定在64KB内,简化模型举例,page 60,132 TITLE A04ASM2 (EXE) Move and add operations ;- .MODEL SMALL .STACK 64 ;Define stack .DATA ;Define data FLDD DW 215 FLDE DW 125 FLDF DW ? ;- .CODE ;Define code segment MAIN PROC FAR MOV AX,da

13、ta ;Set address of data MOV DS,AX ; segment in DS MOV AX,FLDD ;Move 0215 to AX ADD AX,FLDE ;Add 0125 to AX MOV FLDF,AX ;Store sum in FLDF MOV AX,4C00H ;End processing INT 21H MAIN ENDP ;End of procedure END MAIN ;End of program,2 源程序的编译、连接和执行,Assembly Language Programming,几个文件,源程序:.asm 目标文件:.obj 可执行

14、文件:.exe (.com),编辑源程序.asm,.asm,汇编,.obj,连接,.exe,选项,.LST .CRF,汇编过程1,ML a04asm1.asm Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992 Copyright (C) Microsoft Corp 1984-1992. All rights reserved. Object Modules .obj: a04asm1.obj Run File a04asm1.exe: “a04asm1.exe“ List File nul.map:

15、NUL Libraries .lib: Definitions File nul.def:,注意:该命令编译,生成obj, 连接,生成exe同时完成,汇编过程2,E:srcCH04ML /c a04asm1.asm Microsoft (R) Macro Assembler Version 6.11 Copyright (C) Microsoft Corp 1981-1993. All rights reserved. Assembling: a04asm1.asm E:srcCH04LINK a04asm1.obj Microsoft (R) Segmented Executable Lin

16、ker Version 5.31.009 Jul 13 1992 Copyright (C) Microsoft Corp 1984-1992. All rights reserved. Run File a04asm1.exe: a04asm1.exe List File nul.map: Libraries .lib: Definitions File nul.def:,注意:该命令编译,生成obj, 连接,生成exe分别完成,执行,E:srcCH04a04asm1.exe E:srcCH04,ML其它注意的汇编选项,除了/c只汇编程序外,还要知道: /Fl:产生列表文件.lst /Fr:

17、产生映象文件.map /Sn:禁止符号表的列表 /Zd:包含调试信息的行号 /Zi:包含符号的调试信息 大家在实验中,将上述的各个选项应用上编译程序,知道各个选项的含义。,3 编写.COM汇编程序,Assembly Language Programming,.COM程序,.com程序通常较为小巧,最大不超过64KB,适合作为常驻内存的程序 代码段和数据段在一个段内. 堆栈段由装入程序在段尾自动创建 头100H为Program Segment Prex,.exe vs. .com,PSP 堆栈段 数据段 代码段,ES SS DS CS,PSP 代码段 堆栈段,ES DS CS SS,编写格式,A

18、SSUME将所有段寄存器初始化为代码段的地址 ORG 100H指明第一条指令的地址为100H偏移量,即IP=100H 注意:定义数据的方法,通常程序一开始即定义,TITLE A05COM1 COM program to move and add data CODESEG SEGMENT PARA Code ASSUME CS:CODESEG,DS:CODESEG,SS:CODESEG,ES:CODESEG ORG 100H ;Start at end of PSP BEGIN: JMP MAIN ;Jump past data ; - DATAX DW 215 ;Data definition

19、s DATAY DW 125 DATAZ DW ? ; - MAIN PROC NEAR MOV AX,DATAX ;Move 0215 to AX ADD AX,DATAY ;Add 0125 to AX MOV DATAZ,AX ;Store sum in DATAZ MOV AX,4C00H ;End processing INT 21H MAIN ENDP CODESEG ENDS END BEGIN,通常格式,TITLE A05COM2 COM program to move and add data .MODEL TINY .CODE ORG 100H ;Start at end

20、of PSP BEGIN: JMP MAIN ;Jump past data ; - DATAX DW 215 ;Data definitions DATAY DW 125 DATAZ DW ? ; - MAIN PROC NEAR MOV AX,DATAX ;Move 0215 to AX ADD AX,DATAY ;Add 0125 to AX MOV DATAZ,AX ;Store sum in DATAZ MOV AX,4C00H ;End processing INT 21H MAIN ENDP END BEGIN,简化格式,.com文件的汇编连接,Assembling and li

21、nking .com programs C:ml /AT /Fl /Fm A05COM2.ASM,Microsoft (R) Macro Assembler Version 6.11 Copyright (C) Microsoft Corp 1981-1993. All rights reserved. Assembling: A05COM2.ASM Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992 Copyright (C) Microsoft Corp 1984-1992. All rights r

22、eserved. Object Modules .obj: A05COM2.obj/t Run File A05COM: “A05COM“ List File nul.map: “A05COM2.map“ /m Libraries .lib: Definitions File nul.def:,参数:/AT:产生com格式的可执行文件 /Fl:产生列表文件 /Fm:产生映像文件,4 DEBUG程序跟踪调试,Assembly Language Programming,基本命令的使用,DEBUG是我们学习汇编语言的调试工具。 所有的命令不区分大小写 所有的输入数据都默认十六进制的,不用H结尾 C:

23、DEBUG -,C:DEBUG file.exe -,R检查寄存器,C:DEBUG -R,AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0AC4 ES=0AC4 SS=0AC4 CS=0AC4 IP=0100 NV UP EI PL NZ NA PO NC 0AC4:0100 F6C280 TEST DL,80,RF标记寄存器,-RF 列举出标志寄存器的各个位状态,OF 溢出(是/否) OV NV DF 方向(减量/增量) DN UP IF 中断(允许/关闭) EI DI SF 符号(负/正) NG PL

24、ZF 零(是/否) ZR NZ AF 辅助进位(是/否) AC NA PF 奇偶(偶/奇) PE PO CF 进位(是/否 CY NC,D检查内存内容,使用的格式: - D starting address length 开始的地址: segment:offset 采用默认DS的偏移地址offset 例如: -D 0000 -D DS:0000 -D 0100 L5,E编辑机器指令程序,C:DEBUG -E CS:100 B8 23 01 05 25 00 -E CS:106 8B D8 03 D8 8B CB -E CS:10C 2b c8 2b c0 eb ee -D CS:100,0B0

25、0:0100 B8 23 01 05 25 00 8B D8-03 D8 8B CB 2B C8 2B C0 .#%.+.+. 0B00:0110 EB EE C3 75 05 80 CF 80-EB D4 3C 0D 34 00 EF 0A .u.4. 0B00:0120 01 3A 06 02 96 75 03 E9-17 01 B2 3A 38 14 75 1D .:.u.:8.u.,U反汇编,采用U反汇编机器程序 例如,反汇编刚才的机器指令 -U 100 0B05:0100 B82301 MOV AX,0123 0B05:0103 052500 ADD AX,0025 0B05:010

26、6 8BD8 MOV BX,AX 0B05:0108 03D8 ADD BX,AX 0B05:010A 8BCB MOV CX,BX 0B05:010C 2BC8 SUB CX,AX 0B05:010E 2BC0 SUB AX,AX 0B05:0110 EBEE JMP 0100 0B05:0112 3E DS: 0B05:0113 3299C606 XOR BL,BX+DI+06C6 0B05:0117 3499 XOR AL,99,T跟踪执行指令,命令T执行CS:IP指向的一条指令,-R AX=0000 BX=0290 CX=0148 DX=0000 SP=FFFE BP=0000 SI=

27、0000 DI=0000 DS=0B05 ES=0B05 SS=0B05 CS=0B05 IP=0100 NV UP EI PL ZR NA PE NC 0B05:0100 B82301 MOV AX,0123 -T AX=0123 BX=0290 CX=0148 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0B05 ES=0B05 SS=0B05 CS=0B05 IP=0103 NV UP EI PL ZR NA PE NC 0B05:0103 052500 ADD AX,0025 -T AX=0148 BX=0290 CX=0148 DX=0000

28、 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0B05 ES=0B05 SS=0B05 CS=0B05 IP=0106 NV UP EI PL NZ NA PE NC 0B05:0106 8BD8 MOV BX,AX -T AX=0148 BX=0148 CX=0148 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0B05 ES=0B05 SS=0B05 CS=0B05 IP=0108 NV UP EI PL NZ NA PE NC 0B05:0108 03D8 ADD BX,AX,R改变寄存器的内容,命令R改变寄存器的内容,

29、在提示符下敲入寄存器的值 格式 R regname,-R AX=0000 BX=0290 CX=0148 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0B05 ES=0B05 SS=0B05 CS=0B05 IP=0100 NV UP EI PL ZR NA PE NC 0B05:0100 B82301 MOV AX,0123 -R AX AX 0000 :1234 -R AX=1234 BX=0290 CX=0148 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0B05 ES=0B05 SS=0B05 CS=

30、0B05 IP=0100 NV UP EI PL ZR NA PE NC 0B05:0100 B82301 MOV AX,0123,装入可执行文件,装入可执行文件进行调试 命令n指定文件的名称 命令l装入文件 -N -L,G指定的断点调试,命令G执行正在调试的程序,一直到指定的断点 格式:G =开始地址 断点1 断点2 默认的段寄存器CS 例如: -G 11A 从IP的当前指令开始,直到11A,A汇编用户输入的程序,-A 起始地址 默认的地址为 CS:100H 例如: 输入以下的一段程序,汇编跟踪执行 -A xxxx: 0100 MOV CX,10D xxxx: 0104 ADD CX, 1

31、A xxxx: 0107 MOV 10D, CX xxxx: 010B JMP 100 xxxx: 010D 2500 xxxx: -u -r -t,如何保存A或E编辑完成的程序,对于刚才的程序,利用下面的命令保存 -n 给出文件名称 -r bx 利用 BX:CX 给出文件的大小 BX 0290 :0000 -r cx CX 0148 :0008 -w Writing 00012 bytes 给文件的大小要注意,该值十六进制,并且最后一个指令可能大于一个字节,上机实验,编辑讲课的例子,形成源文件.asm 上机利用MASM编译通过各个例子,形成.exe和.com文件 使用DEBUG跟踪调试例子

32、 结合指令片断,练习使用debug的各种命令,调试过程举例,注意SP由装入程序自动设置 C:debug,-n A05COM2.COM -l -R AX=0000 BX=0000 CX=0017 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0C2E ES=0C2E SS=0C2E CS=0C2E IP=0100 NV UP EI PL NZ NA PO NC 0C2E:0100 EB06 JMP 0108 -u 100 0C2E:0100 EB06 JMP 0108 0C2E:0102 D7 XLAT 0C2E:0103 007D00 ADD DI+00,BH 0C2E:0106 0000 ADD BX+SI,AL 0C2E:0108 A10201 MOV AX,0102 0C2E:010B 03060401 ADD AX,0104 0C2E:010F A30601 MOV 0106,AX 0C2E:0112 B8004C MOV AX,4C00 0C2E:0115 CD21 INT 21 0C2E:0117 E65F OUT 5F,AL 0C2E:0119 7D5F JGE 017A 0C2E:011B BB5FA1 MOV BX,A15F 0C2E:011E 3437 XOR AL,37 -r -t,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1