汇编语言硬件知识.ppt

上传人:小飞机 文档编号:6586404 上传时间:2023-11-15 格式:PPT 页数:57 大小:214.16KB
返回 下载 相关 举报
汇编语言硬件知识.ppt_第1页
第1页 / 共57页
汇编语言硬件知识.ppt_第2页
第2页 / 共57页
汇编语言硬件知识.ppt_第3页
第3页 / 共57页
汇编语言硬件知识.ppt_第4页
第4页 / 共57页
汇编语言硬件知识.ppt_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《汇编语言硬件知识.ppt》由会员分享,可在线阅读,更多相关《汇编语言硬件知识.ppt(57页珍藏版)》请在三一办公上搜索。

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

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

3、有的,规定该指令的动作操作数operand是可选的,并且数量不定例如:标识符操作操作数伪指令:COUNTDB1指令:MOV AX,0,标示名称 操作 操作数1n;注释,伪操作,介绍几个常用的伪操作PAGE和TITLESEGMENTPROCEND和ENDPASSUME,标示名称 伪操作 操作数1n;注释,PAGE和TITLE,程序的开头,PAGE定义程序打印时一页的最大行数和每行最大字符数。默认50,80格式:PAGE 60,132TITLE为程序产生标题,打印程序时位于第2行格式:TITLE Assembly program sort,SEGMENT,格式:segment_name SEGME

4、NT align combine class segment_name ENDS解释定位align:指明段开始的边界。通常段为小边界,参数为PARA。组合combine:指明程序连接时,该段是否和其它的段组合在一起(以后解释),参数为STACK,COMMON,PUBLIC堆栈段通常定义segment_name SEGMENT PARA STACK类别class:指明段的类别代码段code,数据段data,堆栈段stack,PROC,定义过程,格式:proc_name PROC FAR proc_name ENDP过程名的操作数为FAR,意味着相应程序的入口点为此过程,在程序中只有一个操作数为F

5、AR的过程。ENDP指明过程的结束,过程的结束在代码段内,即ENDS之前完成。代码段内可以包含任意数量的过程,其它的过程通常使用NEAR的操作数。,END,ENDS段结束ENDP过程结束END完整的程序结束格式:END 过程操作数FAR的PROC,ASSUME,指明程序各个段的用途典型的格式ASSUME DS:dataseg,CS:codeseg,SS:stackseg,上述的次序任意假如需要扩展段ES,也可以加上即可ES:dataseg,程序的框架结构,page 60,132TITLEA04ASM1(EXE)Move and add operationsSTACKSEGMENT PARA S

6、TACK Stack.STACKENDS;-DATASEGSEGMENT PARA DataDATASEGENDS;-CODESEGSEGMENT PARA CodeMAINPROC FARASSUME SS:STACK,DS:DATASEG,CS:CODESEGMOV AX,DATASEG;Set address of data MOV DS,AX;segment in DS.MOV AX,4C00H;End processingINT 21HMAINENDP;End of procedureCODESEGENDS;End of segmentEND MAIN;End of program,

7、解释,段的定义顺序可任意入口过程MAIN的名称可以为其它,例如START等程序结束返回MOV AH,4CH;请求结束处理MOV AL,retcode;设置返回码INT 21H;调用中断处理通常正常返回0,故可写作MOV AX,4C00HINT 21H,编程技巧提示,由于汇编源程序的格式相对不变,故可以把上述的框架保留下来,添加功能代码即可,数据类型 1,名称:对应标识符伪操作Dn:定义数据的类型长度字节DB(1字节)字DW(2字节)双字DD(4字节)表达式:定义数据的数值的常数或者表达式,名称 Dn 表达式,数据定义的格式,数据的定义1,表达式的形式对于尚未初始化的数据,使用?表示常数举例最简

8、单的情形DATAX DB?DATAY DB 25,数据的定义2,数据序列的定义数组数据因素依次用,隔开DATAZ DB 21,22,23,24对DATAZ的数据因素访问,根据数据所处的位置进行DATAZ+0 表示21,DATAZ+1 表示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,字符和字符串的定义字符或者字符串在单引号 或者双引号“”

9、内定义数据类型常用的是DB举例DB Computer city若串中含有“”,以下处理DB Crazy sam”s CDDB“Crazy sams CD”,完整的源程序举例,page 60,132TITLEA04ASM1(EXE)Move and add operationsSTACKSEGMENT PARA STACK StackDW 32 DUP(0)STACKENDS;-DATASEGSEGMENT PARA DataFLDDDW 215FLDEDW 125FLDFDW?DATASEGENDS;-CODESEGSEGMENT PARA CodeMAINPROC FARASSUME SS:

10、STACK,DS:DATASEG,CS:CODESEGMOV AX,DATASEG;Set address of data MOV DS,AX;segment in DS MOV AX,FLDD;Move 0215 to AXADD AX,FLDE;Add 0125 to AXMOV FLDF,AX;Store sum in FLDFMOV AX,4C00H;End processingINT 21HMAINENDP;End of procedureCODESEGENDS;End of segmentEND MAIN;End of program,编写注意,编写建议:同一小功能段,编写注释程序

11、识别一般不区分大小写可读性强,通常所有汇编指令用大写,而注释全部用小写,使用简化的编程框架,.MODEL 自动产生ASSUME语句.MODEL 通常两种:Tiny:为.com生成代码Small:为.exe生成代码并且两者代码偏移量限定在64KB内,简化模型举例,page 60,132TITLEA04ASM2(EXE)Move and add operations;-.MODEL SMALL.STACK 64;Define stack.DATA;Define dataFLDDDW 215FLDEDW 125FLDFDW?;-.CODE;Define code segmentMAINPROC FA

12、RMOV AX,data;Set address of dataMOV DS,AX;segment in DSMOV AX,FLDD;Move 0215 to AXADD AX,FLDE;Add 0125 to AXMOV FLDF,AX;Store sum in FLDFMOV AX,4C00H;End processingINT 21HMAINENDP;End of procedureEND MAIN;End of program,2 源程序的编译、连接和执行,Assembly Language Programming,几个文件,源程序:.asm目标文件:.obj可执行文件:.exe(.c

13、om),编辑源程序.asm,.asm,汇编,.obj,连接,.exe,选项,.LST.CRF,汇编过程1,ML a04asm1.asmMicrosoft(R)Segmented Executable Linker Version 5.31.009 Jul 13 1992Copyright(C)Microsoft Corp 1984-1992.All rights reserved.Object Modules.obj:a04asm1.objRun File a04asm1.exe:a04asm1.exeList File nul.map:NULLibraries.lib:Definitions

14、 File nul.def:,注意:该命令编译,生成obj,连接,生成exe同时完成,汇编过程2,E:srcCH04ML/c a04asm1.asmMicrosoft(R)Macro Assembler Version 6.11Copyright(C)Microsoft Corp 1981-1993.All rights reserved.Assembling:a04asm1.asmE:srcCH04LINK a04asm1.objMicrosoft(R)Segmented Executable Linker Version 5.31.009 Jul 13 1992Copyright(C)Mi

15、crosoft Corp 1984-1992.All rights reserved.Run File a04asm1.exe:a04asm1.exeList File nul.map:Libraries.lib:Definitions File nul.def:,注意:该命令编译,生成obj,连接,生成exe分别完成,执行,E:srcCH04a04asm1.exeE:srcCH04,ML其它注意的汇编选项,除了/c只汇编程序外,还要知道:/Fl:产生列表文件.lst/Fr:产生映象文件.map/Sn:禁止符号表的列表/Zd:包含调试信息的行号/Zi:包含符号的调试信息大家在实验中,将上述的各

16、个选项应用上编译程序,知道各个选项的含义。,3 编写.COM汇编程序,Assembly Language Programming,.COM程序,.com程序通常较为小巧,最大不超过64KB,适合作为常驻内存的程序代码段和数据段在一个段内.堆栈段由装入程序在段尾自动创建头100H为Program Segment Prex,.exe ,PSP堆栈段数据段代码段,ESSSDSCS,PSP代码段堆栈段,ESDSCSSS,编写格式,ASSUME将所有段寄存器初始化为代码段的地址ORG 100H指明第一条指令的地址为100H偏移量,即IP=100H注意:定义数据的方法,通常程序一开始即定义,TITLEA0

17、5COM1 COM program to move and add dataCODESEG SEGMENT PARA CodeASSUME CS:CODESEG,DS:CODESEG,SS:CODESEG,ES:CODESEGORG 100H;Start at end of PSPBEGIN:JMP MAIN;Jump past data;-DATAXDW 215;Data definitionsDATAYDW 125DATAZDW?;-MAINPROC NEARMOV AX,DATAX;Move 0215 to AXADD AX,DATAY;Add 0125 to AXMOV DATAZ,A

18、X;Store sum in DATAZMOV AX,4C00H;End processingINT 21HMAINENDPCODESEG ENDSEND BEGIN,通常格式,TITLEA05COM2 COM program to move and add data.MODEL TINY.CODEORG 100H;Start at end of PSPBEGIN:JMP MAIN;Jump past data;-DATAXDW 215;Data definitionsDATAYDW 125DATAZDW?;-MAINPROC NEARMOV AX,DATAX;Move 0215 to AXA

19、DD AX,DATAY;Add 0125 to AXMOV DATAZ,AX;Store sum in DATAZMOV AX,4C00H;End processingINT 21HMAINENDPEND BEGIN,简化格式,.com文件的汇编连接,Assembling and programsC:ml/AT/Fl/Fm A05COM2.ASM,Microsoft(R)Macro Assembler Version 6.11Copyright(C)Microsoft Corp 1981-1993.All rights reserved.Assembling:A05COM2.ASMMicros

20、oft(R)Segmented Executable Linker Version 5.31.009 Jul 13 1992Copyright(C)Microsoft Corp 1984-1992.All rights reserved.Object Modules.obj:A05COM2.obj/tRun File A05COM:A05COMList File nul.map:A05COM2.map/mLibraries.lib:Definitions File nul.def:,参数:/AT:产生com格式的可执行文件/Fl:产生列表文件/Fm:产生映像文件,4 DEBUG程序跟踪调试,A

21、ssembly 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=0000 DI=0000DS=0AC4 ES=0AC4 SS=0AC4 CS=0AC4 IP=0100 NV UP EI PL NZ NA PO NC0AC4:0100 F6C280 TEST DL,80,RF标记寄存器,-RF列举

22、出标志寄存器的各个位状态,OF溢出(是/否)OV NV DF方向(减量/增量)DNUPIF中断(允许/关闭)EIDISF符号(负/正)NGPLZF零(是/否)ZRNZAF辅助进位(是/否)ACNAPF奇偶(偶/奇)PEPOCF进位(是/否CYNC,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 8

23、B 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 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 1000B05:0100 B82301 MOV AX,01230

24、B05:0103 052500 ADD AX,00250B05:0106 8BD8 MOV BX,AX0B05:0108 03D8 ADD BX,AX0B05:010A 8BCB MOV CX,BX0B05:010C 2BC8 SUB CX,AX0B05:010E 2BC0 SUB AX,AX0B05:0110 EBEE JMP 01000B05:0112 3E DS:0B05:0113 3299C606 XOR BL,BX+DI+06C60B05:0117 3499 XOR AL,99,T跟踪执行指令,命令T执行CS:IP指向的一条指令,-RAX=0000 BX=0290 CX=0148 D

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

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

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

28、S=0B05 IP=0100 NV UP EI PL ZR NA PE NC0B05: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,10Dxxxx:0104 ADD CX,1Axxxx:0107 MOV 1

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

30、自动设置C:debug,-n A05COM2.COM-l-RAX=0000 BX=0000 CX=0017 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0C2E ES=0C2E SS=0C2E CS=0C2E IP=0100 NV UP EI PL NZ NA PO NC0C2E:0100 EB06 JMP 0108-u 1000C2E:0100 EB06 JMP 01080C2E:0102 D7 XLAT0C2E:0103 007D00 ADD DI+00,BH0C2E:0106 0000 ADD BX+SI,AL0C2E:0108 A10201 MOV AX,01020C2E:010B 03060401 ADD AX,01040C2E:010F A30601 MOV 0106,AX0C2E:0112 B8004C MOV AX,4C000C2E:0115 CD21 INT 210C2E:0117 E65F OUT 5F,AL0C2E:0119 7D5F JGE 017A0C2E:011B BB5FA1 MOV BX,A15F0C2E:011E 3437 XOR AL,37-r-t,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号