版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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是可选的,并且数量不定 例如: 标识符操作操作数 伪指令:COUNTDB1 指令:MOV AX, 0,标示名称 操作 操作数1n ;注释,伪操作,介绍几个常用的伪操作 PAGE和TITLE SEGMENT PROC END和ENDP ASSUME,标示名称 伪操作 操作数1n ;注释,PAGE和TITLE,程序的开头,PAGE定义程序打印时一页的最大行数和每行最大字符数。 默认50,80 格式:PAGE 60, 132 TITLE为程
4、序产生标题,打印程序时位于第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,堆栈段stack
5、,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 TITLEA04ASM1 (EXE) Move and add operations STACKSEGMENT PARA STACK Stack . STACKENDS ; - DATASEGSEGMENT PARA Data DATASEGENDS ; - CODESEGSEGMENT PARA Code MAINPROC FAR ASSUME SS:STACK, DS:DATASEG, CS:CODESEG MOV AX,DATASEG;Set address of data MOV DS,AX; se
7、gment in DS . MOV AX,4C00H;End processing INT 21H MAINENDP;End of procedure CODESEGENDS;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 表示22,依次类推 MOV AL, DA
9、TAZ+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,132 TITLEA04ASM1 (EX
10、E) Move and add operations STACKSEGMENT PARA STACK Stack DW 32 DUP(0) STACKENDS ; - DATASEGSEGMENT PARA Data FLDDDW 215 FLDEDW 125 FLDFDW ? DATASEGENDS ; - CODESEGSEGMENT PARA Code MAINPROC FAR ASSUME SS:STACK,DS:DATASEG,CS:CODESEG MOV AX,DATASEG;Set address of data MOV DS,AX; segment in DS MOV AX,F
11、LDD;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 MAINENDP;End of procedure CODESEGENDS;End of segment END MAIN;End of program,编写注意,编写建议: 同一小功能段,编写注释 程序识别一般不区分大小写 可读性强,通常所有汇编指令用大写,而注释全部用小写,使用简化的编程框架,.MODEL 自动产生ASSUME语句 .MODEL 通常两种: Tiny:
12、 为.com生成代码 Small: 为.exe生成代码 并且两者代码偏移量限定在64KB内,简化模型举例,page 60,132 TITLEA04ASM2 (EXE) Move and add operations ;- .MODEL SMALL .STACK 64;Define stack .DATA ;Define data FLDDDW 215 FLDEDW 125 FLDFDW ? ;- .CODE;Define code segment MAINPROC FAR MOV AX,data;Set address of data MOV DS,AX; segment in DS MOV
13、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 MAINENDP;End of procedure END MAIN;End of program,2 源程序的编译、连接和执行,Assembly Language Programming,几个文件,源程序:.asm 目标文件:.obj 可执行文件:.exe (.com),编辑源程序.asm,.asm,汇编,.obj,连接,.exe,选项,.LST .CRF,汇编
14、过程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: NUL Libraries .lib: Definitions File nul.def:,注意:该命令编译,生成obj, 连
15、接,生成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 Linker Version 5.31.009 Jul 13 1992 Copyright (C) Microsoft Corp 1
16、984-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:产生映象文件.map /Sn:禁止符号表的列表 /Zd:包含调试信息的行号 /Zi:包含符号的调试信息 大家在实验中,将上述的
17、各个选项应用上编译程序,知道各个选项的含义。,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,编写格式,ASSUME将所有段寄存器初始化为代码段的地址 ORG 100H指明第一条指令的地址为100H偏移量,即IP=100H 注意:定
18、义数据的方法,通常程序一开始即定义,TITLEA05COM1 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 ; - DATAXDW 215;Data definitions DATAYDW 125 DATAZDW ? ; - MAINPROC NEAR MOV AX,DATAX;Move 0215 to A
19、X ADD AX,DATAY;Add 0125 to AX MOV DATAZ,AX;Store sum in DATAZ MOV AX,4C00H;End processing INT 21H MAINENDP CODESEG ENDS END BEGIN,通常格式,TITLEA05COM2 COM program to move and add data .MODEL TINY .CODE ORG 100H;Start at end of PSP BEGIN:JMP MAIN;Jump past data ; - DATAXDW 215;Data definitions DATAYDW 1
20、25 DATAZDW ? ; - MAINPROC 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 MAINENDP END BEGIN,简化格式,.com文件的汇编连接,Assembling and linking .com programs C:ml /AT /Fl /Fm A05COM2.ASM,Microsoft (R) Macro Assembler Version 6.11
21、 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 reserved. Object Modules .obj: A05COM2.obj/t Run File A05COM: A05COM List File nul.map: A05C
22、OM2.map /m Libraries .lib: Definitions File nul.def:,参数:/AT:产生com格式的可执行文件 /Fl:产生列表文件 /Fm:产生映像文件,4 DEBUG程序跟踪调试,Assembly Language Programming,基本命令的使用,DEBUG是我们学习汇编语言的调试工具。 所有的命令不区分大小写 所有的输入数据都默认十六进制的,不用H结尾 C:DEBUG -,C:DEBUG file.exe -,R检查寄存器,C:DEBUG -R,AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI
23、=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方向(减量/增量)DNUP IF中断(允许/关闭)EIDI SF符号(负/正)NGPL ZF零(是/否)ZRNZ AF辅助进位(是/否)ACNA PF奇偶(偶/奇)PEPO CF进位(是/否CYNC,D检查内存内容,使用的格式: - D starting address length 开始的地址:
24、 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,0B00: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
25、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:0106 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
26、 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=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
27、 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 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
28、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改变寄存器的内容,在提示符下敲入寄存器的值 格式 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
29、 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=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汇编用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027届浙江省台州市黄岩区九上化学期末学业水平测试模拟试题含解析
- 营口市重点中学2027届九年级物理第一学期期末教学质量检测模拟试题含解析
- 2027届山东省东营邹平县联考九年级化学第一学期期中复习检测试题含解析
- 2027届江苏省大丰市刘庄镇三圩初级中学物理九年级第一学期期末学业水平测试试题含解析
- 四川省凉山彝族自治州2027届九年级物理第一学期期末统考模拟试题含解析
- 2026中国智能水龙头行业市场供需分析及投资评估规划分析研究报告
- 2026中国涡流泵行业产能过剩与去库存分析报告
- 2026中国网络游戏开发商行业市场竞争现状分析投资评估规划研究报告
- 2026全球生物识别芯片行业供需竞争格局研究及信息安全建设
- 2026乳制品行业国产品牌与进口品牌竞争格局分析评估报告
- 2026年秋季新学期第一次全体教师大会上校长讲话刷屏了:“教育从来都是一地鸡毛但别忘了当初为什么来!”
- 北京经济技术开发区经海第二幼儿园招聘笔试备考试题及答案详解
- 2026年领导干部网络学法用法法律知识竞赛考试题库及答案
- 2026天津石油职业技术学院招聘20人笔试参考题库及答案详解
- 2026年广东省学科名师工作室主持人面试试题(含答案)
- 2026湖南岳阳平江县润恒自来水有限公司招聘9人笔试题库【能力提升】附答案详解
- T∕CCEAS008-2026 建设工程造价咨询成果文件质量标准
- 2026年贵州省事业单位联考真题及答案
- 三年级混合计算练习题
- 海上风电施工简介
- GB/T 19165-2003日光温室和塑料大棚结构与性能要求
评论
0/150
提交评论