




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言的要素汇编语言的要素Chap3 Elements of Assembly Language2上章回顾上章回顾nHardwareMemory & memory address CPU registersChap3 Elements of Assembly Language3本章内容本章内容n汇编语言汇编语言n程序的汇编、链接和运行程序的汇编、链接和运行n指令中的操作数指令中的操作数nI/O.H中宏的输入中宏的输入/输出输出 3.1 汇编语言汇编语言n一个汇编语言的源代码文件包含了一一个汇编语言的源代码文件包含了一系列语句。系列语句。n语句要求每行少于语句要求每行少于80个字符。个字符。(
2、MASM6.1还允许不长于还允许不长于512个字符的句子,在每行的行尾用个字符的句子,在每行的行尾用斜杠斜杠“”将一条语句拆分成多行)。将一条语句拆分成多行)。n注释语句,开头用注释语句,开头用“;”。 Mov eax,0 ;初始化数据为;初始化数据为0n不区分大小写不区分大小写Chap3 Elements of Assembly Language43.1 汇编语言汇编语言n汇编语言的语句有三种类型:汇编语言的语句有三种类型:n指令性语言(指令性语言(instruction)n指示性语言(指示性语言(directive)n宏(宏(macro)Chap3 Elements of Assembly
3、 Language5指令性语言(指令性语言(instruction)n指令性语句要通过汇编器翻译成目标指令性语句要通过汇编器翻译成目标代码(机器代码),在运行时执行。代码(机器代码),在运行时执行。每一条指令都被唯一地翻译成每一条指令都被唯一地翻译成80*86CPU可以执行的操作。可以执行的操作。nMov number1, eaxnAdd eax, number2nAdd ebx, -1nChap3 Elements of Assembly Language6指示性语言(指示性语言(directive)n一条指示性语句告诉汇编器做某种操一条指示性语句告诉汇编器做某种操作。这种操作并不会产生机器
4、指令,作。这种操作并不会产生机器指令,也不会对目标代码有任何影响。也不会对目标代码有任何影响。n.code n. 386n.nolistnInclude io.hChap3 Elements of Assembly Language7宏(宏(macro)n一个宏语句是一系列语句的缩写,它一个宏语句是一系列语句的缩写,它们可以是指令性语句、指示性语句或们可以是指令性语句、指示性语句或者宏。者宏。Chap3 Elements of Assembly Language89汇编语言的格式汇编语言的格式n由汇编语言编写的源程序是由许多语句由汇编语言编写的源程序是由许多语句(也也可称为汇编指令可称为汇编指
5、令)组成的。每个语句由组成的。每个语句由14个部分组成,其格式是:个部分组成,其格式是: 名字名字 指令助记符指令助记符 操作数操作数 ;注解;注解 1.名字:名字:给指令或某一存储单元地址所起的名字。给指令或某一存储单元地址所起的名字。可由下列可由下列字符组成:字符组成: 字母:字母:A z ; 数字:数字:0 9 ; 特殊字符:特殊字符:?、 、_、$ 。数字数字不能不能作标识符的作标识符的第一个字符第一个字符,而,而圆点圆点不能不能用作用作第一个第一个字符字符。标识符最长为。标识符最长为247个字符。个字符。n名字域的用处之一是在程序汇编和链名字域的用处之一是在程序汇编和链接后,代表指令
6、在内存中的地址。其接后,代表指令在内存中的地址。其他的指令就可以很容易地找到这个被他的指令就可以很容易地找到这个被标识的指令,如果一条加法指令需要标识的指令,如果一条加法指令需要在程序中循环执行,那么就可以这样在程序中循环执行,那么就可以这样写:写:naddloop: add eax,158nJmp addloopnJmp是跳转指令。是跳转指令。Chap3 Elements of Assembly Language10Chap3 Elements of Assembly Language11Exercises 3.1For each combination of characters belo
7、w, determine whether or not it is an allowable label (name). If not, give a reason(a) repeat(b) exit(c) more(d) EndIf(e) 2much(f) add(g) if(h) add2汇编语言的格式汇编语言的格式名字名字 指令助记符指令助记符 操作数操作数 ;注解;注解 2.指令助记符:指令助记符:表示不同操作的指令表示不同操作的指令3.操作数:操作数: 指令执行的对象。指令执行的对象。依指令的依指令的要求,可能有一个、两个或者没有。要求,可能有一个、两个或者没有。4.注解:注解:该项
8、可有可无,是为源程序所该项可有可无,是为源程序所加的注解,用于提高程序的可读性。加的注解,用于提高程序的可读性。ZeroCount:mov eax,0 ;初始化数据初始化数据为为0 Chap3 Elements of Assembly Language123.2一个完整的实例一个完整的实例n从键盘输入两个数据,得到两个数据从键盘输入两个数据,得到两个数据的和,显示出来。的和,显示出来。Chap3 Elements of Assembly Language13Chap3 Elements of Assembly Language14C program#include main() long a,
9、b,c; printf(Enter first number: ); scanf(%ld,&a); printf(nEnter second number: ); scanf(%ld,&b); c=a+b; printf(nnThe sum is %ld n,c);汇编语言设计:汇编语言设计:n输入第一个数字;输入第一个数字;n输入代表第一个数字的输入代表第一个数字的ASCII码字符;码字符;n将此字符转化为二进制补码的双字;将此字符转化为二进制补码的双字;n存储第一个数字;存储第一个数字;n输入第二个数字;输入第二个数字;n输入代表第二个数字的输入代表第二个数字的ASCII码字符;码字符;n
10、将此字符转化为二进制补码的双字;将此字符转化为二进制补码的双字;n将第一数字加到第二个数字上去;将第一数字加到第二个数字上去;n将和转化为将和转化为ASCII码字符;码字符;n显示标号及代表和的字符。显示标号及代表和的字符。Chap3 Elements of Assembly Language15程序清单Chap3 Elements of Assembly Language16Directives(1)n.386指明指令集指明指令集n.model flat程序工作模式程序工作模式, flat为为Windows程序使用的模式程序使用的模式(代码和数据使用同一个代码和数据使用同一个4GB段段)nE
11、xitProcess proto near32 stdcall , dwExitCode:dword 是一个指示性语句。是一个指示性语句。Proto用来产生一个函数,用来产生一个函数,函数名字是:函数名字是:ExitProcess,用于结束程序的系,用于结束程序的系统函数。它有一个参数统函数。它有一个参数Dword类型的。类型的。Chap3 Elements of Assembly Language17Directives (2)nInclude io.h指示汇编器拷贝一文件指示汇编器拷贝一文件io.h到程序中到程序中n.stack指示汇编器运行时堆栈要保留多少字节,通常指示汇编器运行时堆栈要
12、保留多少字节,通常是保留是保留4096个字节。个字节。n.data程序数据段的开始,该数据段中保留了变量的程序数据段的开始,该数据段中保留了变量的内存空间。内存空间。 n.code标识这个程序的入口,即第一条要执行的语句标识这个程序的入口,即第一条要执行的语句的地址。的地址。Chap3 Elements of Assembly Language18Directives (3)nEQU符号赋值语句,用符号代替数值使用。符号赋值语句,用符号代替数值使用。cr equ odhnDwordnByte指示数据的存储以双字和字节的方式。指示数据的存储以双字和字节的方式。Number1 dword ?Cha
13、p3 Elements of Assembly Language19Directives (4)nInvoke调用子过程调用子过程ExitProcess的指令,它的功的指令,它的功能是终止这个程序。能是终止这个程序。nPublic文件中的名字通常只有在文件中可以看文件中的名字通常只有在文件中可以看到,该语句使得其后的名字可以在文件到,该语句使得其后的名字可以在文件外可见,外可见,_start是连接器可以识别执行的是连接器可以识别执行的第一条指令。第一条指令。nEnd 表示程序的结束,其后不能跟任何语句表示程序的结束,其后不能跟任何语句Chap3 Elements of Assembly Lan
14、guage20Instructions nMov是一条指令性语句,是一条指令性语句,mov代表代表“move”,但是该指令实际上是完成一个复制操作。但是该指令实际上是完成一个复制操作。 mov number1, eax 指令把寄存器中的数值复制到地址为指令把寄存器中的数值复制到地址为number1的内存双字中。的内存双字中。nAdd将第二个数字加到第一个数字上。将第二个数字加到第一个数字上。 add eax,number2 Chap3 Elements of Assembly Language21Macros nOutput显示存储在显示存储在prompt1地址中的字符串,使用空字地址中的字符
15、串,使用空字符串(符串(00)字节来结束显示)字节来结束显示 nInput让机器暂停,等待用户从键盘输入字符,直到让机器暂停,等待用户从键盘输入字符,直到敲回车来结束输入敲回车来结束输入nAtod扫描制定的内存,然后将其中的扫描制定的内存,然后将其中的ASCII代码转换代码转换为相应的二进制补码的双字,将结果存储在为相应的二进制补码的双字,将结果存储在eax寄存器中。寄存器中。nDtoa将双字整数转换为将双字整数转换为ASCII码码Chap3 Elements of Assembly Language223.3程序的汇编、链接和运行程序的汇编、链接和运行Source file(Text fil
16、e .asm)Object file(Machine code, .obj)Assembler(masm)List file(Text file, .lst)Executable file(Machine code, .exe)Linker(link)Debuger(windbg)Text editor(edit)汇编语言的过程Chap3 Elements of Assembly Language23需要的软件需要的软件nText EditorsnAssemblernLinkernDebuger nEditnMasm 6.11nWindbg cmdChap3 Elements of Assem
17、bly Language24DOS promptnAssemble ml /c /coff /Zi example.asm /c 只编译不连接只编译不连接 /coff 生成生成COFF格式的目标文件格式的目标文件 /Zi 告诉汇编器在输出时添加调试信息告诉汇编器在输出时添加调试信息nLink link /debug /subsystem:console /entry:start /out:example.exe example.obj io.obj kernel32.lib /subsystem:console 连接器的参数,用来指定程序连接器的参数,用来指定程序的入口函数,的入口函数,con
18、sole是是win32 字符模式应用程序字符模式应用程序nRun examplenDebug Windbg example.exeChap3 Elements of Assembly Language25Chap3 Elements of Assembly Language263.4 汇编器清单文件汇编器清单文件(.lst)nML汇编器在汇编过程中会产生一个清汇编器在汇编过程中会产生一个清单文件单文件.lst,这个文件显示源代码、转,这个文件显示源代码、转换的目标代码以及附近信息换的目标代码以及附近信息. 汇编时需汇编时需要二维复交转换器要二维复交转换器 /Fl, 生产清单文件生产清单文件 m
19、l /c /coff / Fl /Zi example.asmexample.lstChap3 Elements of Assembly Language273.5 常数操作数常数操作数n数据的表示方式数据的表示方式nBYTE directivenWORD directivenDWORD directiveChap3 Elements of Assembly Language28数据的表示方式数据的表示方式Suffix Base Number System H 16 hexadecimal B 2 binary O or Q 8 octal none 10 decimal Chap3 Elem
20、ents of Assembly Language29Example of the use of suffixes预留一个字节内存空间,初始化为预留一个字节内存空间,初始化为7D 1) mask BYTE 01111101B 2) mask BYTE 7dH 3) mask BYTE 125 4) mask BYTE 175Q等价于下面三条指示性语句等价于下面三条指示性语句11111012 = 7D16 = 12510 = 1758 Chap3 Elements of Assembly Language30BYTE directiven一条一条Byte指示性语句为数据与预留了指示性语句为数据与
21、预留了一个或多个字节的存储空间。如果数一个或多个字节的存储空间。如果数据是数字的,那么可以被看作为有符据是数字的,那么可以被看作为有符号数据或者无符号数。号数据或者无符号数。n无符号数据无符号数据的表示范围的表示范围0 to 255n有符号数据有符号数据的表示的表示 128 to 127 Chap3 Elements of Assembly Language31Example of byte byte1 BYTE 255; valueisFFbyte2 BYTE 127; valueis7Fbyte3 BYTE 91; valueis5Bbyte4 BYTE 0; valueis00byte5
22、 BYTE -1; valueis FFbyte6 BYTE -91; valueisA5byte7 BYTE -128 ; valueis80Chap3 Elements of Assembly Language32DWORD directiven预留了一个双字空间预留了一个双字空间n有符号数据有符号数据的表示范围的表示范围-2,147,483,648 to 2,147,483,647 n无符号数据无符号数据的表示范围的表示范围0 to 4,294,967,295Chap3 Elements of Assembly Language33Example of wordword1 WORD 65
23、535 ;value isFFFFword2 WORD 32767;value is7FFFword3 WORD 1000;value is03E8word4 WORD 0;value is0000word5 WORD -1;value isFFFFword6 WORD -1000;value isFC18word7 WORD -32768 ;value is 8000Chap3 Elements of Assembly Language34WORD directiven预留了一个字空间预留了一个字空间n有符号数的范围有符号数的范围 -32,768 to32,767 n无符号数的范围无符号数的
24、范围 0 to 65,535Chap3 Elements of Assembly Language35Example of dworddouble1 DWORD 4294967295 ; value is FFFFFFFFdouble2 DWORD 4294966296 ; value is FFFFPC18double3 DWORD 0 ; value is 00000000double4 DWORD -1 ; value is FFFFFFFFdouble5 DWORD -1000 ; value is FFFPFC18double6 DWORD -2147483648 ; value i
25、s 80000000Chap3 Elements of Assembly Language36Other exampleschar1 BYTE m ; value is 6D char2 BYTE 6dh ; value is 6D string1 BYTE Joe ; value is 4A 6F 65 string2 BYTE Joes ; value is 4A 6F 65 27 73 words WORD 10, 20, 30, 40 stars BYTE 50 DUP (1) Dblarry1 Dword 50 DUP (999) Dblarry2 word 50 DUP ?Othe
26、r examplesnGross Word 144nGross Word 12*12nGross word 10*15-7+1nByte、Dword、Word以及其他语句中操作数以及其他语句中操作数可以是一个包含算数符或者其他运算符的表可以是一个包含算数符或者其他运算符的表达式。达式。在汇编时在汇编时,汇编器会对这个表达式进,汇编器会对这个表达式进行行求值求值。nChar Byte xnMov ax charn汇编时,会出现错误。寄存器汇编时,会出现错误。寄存器Ax是一个字长是一个字长,而,而char的存储空间却是一个单字节。的存储空间却是一个单字节。Chap3 Elements of Ass
27、embly Language37(1) dwA DWORD 5 dup (3 dup (?) (2) wdA WORD 30, -165, 8800 (3) byteA BYTE 33H, 10101110B, 200, -126 (4) promptA BYTE I am a farmer!, 0 (5) charA BYTE 1, A, 4 dup( 4) Chap3 Elements of Assembly Language393.6 指令中的操作数指令中的操作数 n指令中的操作数的类型指令中的操作数的类型n80 x86 寻址方式寻址方式Chap3 Elements of Assembl
28、y Language40Instructions n指令中的操作数有三种基本类型:常数、指定的指令中的操作数有三种基本类型:常数、指定的CPU寄存器以及存储器操作数。寄存器以及存储器操作数。n 许多指令有两个操作数。通常第一个操作数给出许多指令有两个操作数。通常第一个操作数给出了操作的目的地址,第二个操作数为该数据提供了操作的目的地址,第二个操作数为该数据提供源数据,但绝对不会是目的地址。源数据,但绝对不会是目的地址。例如:例如:nMov al, /n该句执行的时候,字节该句执行的时候,字节2F会被放入会被放入AL寄存器,第寄存器,第一个操作数一个操作数al,是指定寄存器。第二个操作数,是指定
29、寄存器。第二个操作数/表明这是个常量数据源表明这是个常量数据源。Chap3 Elements of Assembly Language41指令中有两个操作数指令中有两个操作数add eax, number1 For example:执行该条语句时,声明双字节数的执行该条语句时,声明双字节数的number1与与eax寄存器里的值相加,结果保存在寄存器里的值相加,结果保存在eax寄寄存器,覆盖原来存器,覆盖原来eax寄存器以前的内容。第一寄存器以前的内容。第一个操作数既是数据源,又是和的目的地址,个操作数既是数据源,又是和的目的地址,而而number1则是双字加法的另一个加数。则是双字加法的另一个
30、加数。Chap3 Elements of Assembly Language4280 x86 寻址方式寻址方式方式数据所在地址立即数立即数寄存器寄存器存储器存储器指令操作数就是该数据指令操作数就是该数据数据放在某一寄存器中数据放在某一寄存器中数据放在某一内存地址中数据放在某一内存地址中对于立即寻址方式的操作数,通常操作数是常数,他的寻址方式就是立即数。寄存器寻址方式,需要指定一个寄存器 Mov ax, 16寄存器寻址立即数寻址存储器寻址方式存储器寻址方式存储器寻址方式数据所在地址直接寻址直接寻址寄存器间接寻址寄存器间接寻址在一内存地址中,其偏移量为指令在一内存地址中,其偏移量为指令 中的操作数
31、中的操作数寄存器的值作为数据的地址寄存器的值作为数据的地址Chap3 Elements of Assembly Language43Chap3 Elements of Assembly Language44直接寻址直接寻址n 直接寻址方式操作数在指令中是一个直接寻址方式操作数在指令中是一个32位位地址。地址。nadd eax, number2 ;05 00000004n这条语句来自代码段这条语句来自代码段3-1的示例,第一个操的示例,第一个操作数是寄存器寻址方式,第二操作数为直作数是寄存器寻址方式,第二操作数为直接寻址方式,地位为接寻址方式,地位为00000004,也就是,也就是number2
32、在该数据段中的偏移量。在该数据段中的偏移量。nadd eax, 00000004h等价Chap3 Elements of Assembly Language45寄存器间接寻址寄存器间接寻址n间接寻址寄存器存储的值作为数据的地址。间接寻址寄存器存储的值作为数据的地址。nAdd eax,edxn第一个操作数为寄存器寻址方式,第二个操作数为第一个操作数为寄存器寻址方式,第二个操作数为寄存器间接寻址方式。寄存器间接寻址方式。00000004该内存单元的地址为00000004Chap3 Elements of Assembly Language46Other examples mov ebx, 0上述语
33、句中,汇编器会上述语句中,汇编器会出错信息出错信息,因,因为没有说明地址是单字节,还是双字为没有说明地址是单字节,还是双字节,或者是双字。如果它是单字节:节,或者是双字。如果它是单字节: mov byte ptr ebx, 0如果它是字则用如果它是字则用word ptr,双字则,双字则Dword ptr课堂练习课堂练习(1) 说明下列指令中源操作数的寻址方式?说明下列指令中源操作数的寻址方式? 如果如果BX2000H,内存地址,内存地址1234h存放着字数据存放着字数据1000h,内存地址,内存地址2000h存放着字数据存放着字数据1001h,给出,给出DX的值。的值。(1) mov dx,1
34、234h (2) mov dx,1234h (3) mov dx,bx (4) mov dx,bx 课堂练习课堂练习(2)num equ 80.datastring byte student,0number1 word ?number2 word ?n目的操作数的寻址方式目的操作数的寻址方式 (1) sub number1,cx (2) mov ebx, ax (3) mov cx, num (4) mov ax, number2 (5) cmp string, 41hChap3 Elements of Assembly Language493.7 IO.H中宏的输入中宏的输入/输出输出nIO.H文件提供了一组宏定义,用来实现输文件提供了一组宏定义,用来实现输入、输出以及简单明了的数值转换。每个宏入、输出以及简单明了的数值转换。每个宏看起来像一条
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度融资担保合同印花税税率调整与风险防范
- 二零二五年度车辆过户与税费结算合同协议
- 2025年度生物制药企业股权投资协议
- 2025年度美容美发技术培训学徒合同
- 2025年度珠宝店国际市场拓展与合作协议
- 二零二五年度劳动合同下员工健康管理与福利保障协议
- 2025河南天缘精工模具股份有限公司招聘16人笔试参考题库附带答案详解
- 教学微视频设计与开发知到智慧树章节测试课后答案2024年秋浙江工业大学
- 健身减压与形体修塑知到智慧树章节测试课后答案2024年秋西安文理学院
- 第25课+中华人民共和国成立和向社会主义的过渡+高一上学期统编版(2019)必修中外历史纲要上
- 第5章液相传质步骤动力学
- 高考新材料作文——如何处理材料作文所给材料
- GJB 国军标标准对应名称解析
- 2019版人教版新课标高中英语必修1第一册单词表
- [考研英语]商志英语作文模板
- 小学交通安全主题班会:《一盔一带 安全出行》
- 上海住房租赁企业信息记载表
- 模拟追溯演练报告(成品到原料)
- 常用一线降压药一览表
- IATF16949-2016内部审核方案
- 医用耗材分类目录 (低值 ╱ 高值)
评论
0/150
提交评论