版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、IBM-PC 汇编语言汇编语言程序设计程序设计什么是汇编语言?什么是汇编语言?v机器特定的编程语言机器特定的编程语言该语言的语句和机器内在语言是一一对应的关系该语言的语句和机器内在语言是一一对应的关系该语言和机器的指令集、系统结构相匹配该语言和机器的指令集、系统结构相匹配v程序设计的级别程序设计的级别机器语言机器语言汇编语言汇编语言高级语言高级语言vIBM-PC 汇编语言汇编语言针对针对 8086, 8088, 80186, 80286, 80386, 80486, and Pentium Processors什么是汇编器?什么是汇编器?v系统级别的程序系统级别的程序负责将汇编语言编写的源代码
2、翻译成机器语言负责将汇编语言编写的源代码翻译成机器语言一般由软件开发商提供,例如我们所使用的一般由软件开发商提供,例如我们所使用的Microsoft 的的MASM 6.11版本的编译器版本的编译器源文件源文件目标文件目标文件可执行文件可执行文件为什么要学习汇编语言?为什么要学习汇编语言?v能够学习到处理器是如能够学习到处理器是如何工作的何工作的v理解计算机的基本系统理解计算机的基本系统结构结构v探究数据和指令的内部探究数据和指令的内部表述表述v能够创建小巧有效的程能够创建小巧有效的程序序v允许程序员绕过高层语允许程序员绕过高层语言的限制编程言的限制编程v有些工作必须用汇编语有些工作必须用汇编语
3、言完成言完成机器语言机器语言v数字表示的机器执行的指令集合,被称为处数字表示的机器执行的指令集合,被称为处理器指令集理器指令集处理器能够执行的基本指令的集合处理器能够执行的基本指令的集合v每个指令被编码成为数字符号每个指令被编码成为数字符号v指令可能占用一个或者多个字节指令可能占用一个或者多个字节v每个数字代表一个机器指令每个数字代表一个机器指令IBM-PC机器指令举例机器指令举例v1011000000000101b or B005hv操作码操作码 = 10110000b含义:拷贝一个字节数据到含义:拷贝一个字节数据到AL寄存器中寄存器中v字节数据由该指令的第二部分代表字节数据由该指令的第二部
4、分代表: 00000101b汇编语言汇编语言 vs机器语言编程机器语言编程v机器语言编程机器语言编程编写一系列的数字符号表示程序执行所需的指令编写一系列的数字符号表示程序执行所需的指令和数据和数据v汇编语言编程汇编语言编程采用符号指令表示,将翻译成机器语言程序和数采用符号指令表示,将翻译成机器语言程序和数据常量据常量第第1部分部分 软硬件基础知识软硬件基础知识 1 数据表示数据表示Assembly Language Programming二进制数字二进制数字v1101101b数位从左到右依次排列数位从左到右依次排列 b6b5b4b3b2b1b0下标表示位值(下标表示位值(place value
5、 )vbi 2iv需要熟记各个位值需要熟记各个位值转换到十进制数的多项式转换到十进制数的多项式vb6*26 + b5*25 +b4*24 +b3*23 +b2*22 +b1*21 + b0*20vIn this case, 1101101b is 64+32+8+4+1 = 109d十进制到二进制的转换十进制到二进制的转换v109d 转换到二进制循环被转换到二进制循环被2除除余数作为数位值余数作为数位值直到直到0为止为止v将余数组合起来将余数组合起来第一位余数作为二进制数的最低位第一位余数作为二进制数的最低位109d = 1101101b109 / 2 = 54 r 154 / 2 = 27
6、r 027 / 2 = 13 r 113 / 2 = 6 r 16 / 2 = 3 r 03 / 2 = 1 r 11 / 2 = 0 r 1十六进制数十六进制数v09, A, B, C, D, E, Fv注意:注意:数字以数字以H结尾结尾v大家思考:大家思考:为何引入十六进制数?为何引入十六进制数?二进制和十六进制二进制和十六进制vBinary Hex4位一组划分位一组划分 (从最低位从最低位开始开始)最后一组不足最后一组不足4位补位补0每组对应的数据转换成每组对应的数据转换成对应的数字对应的数字vHex Binary相反的方法每个数字展相反的方法每个数字展成成4 bitsv可以忽略前面的若
7、干的可以忽略前面的若干的0二进制数据存储二进制数据存储v存储数据的大小定义,通常存储数据的大小定义,通常 字节字节byteDB字字wordDW双字双字double wordDD四字四字quad wordDQv存储器中的每个字节都有唯一的地址存储器中的每个字节都有唯一的地址基本加法基本加法vEasy !v例如例如: c c c c 10101+ 1111100100vHex Example: c c 3CF02 +435C9 804CB0+0 = 00+1 = 11+0 = 11+1 = 101+1+1 = 11Watch Carries基本减法基本减法vHex example: b b FCF
8、02 -435C9 B9939 b b b b b 1101000011 - 1101001 1011011010A borrow adds sixteen字符数据字符数据ASCIIvAmerican Standard Code for Information Interchange (ASCII)7-bit 二进制码表示的二进制码表示的128个字符个字符通常占用通常占用1字节字节v包括一些控制字符包括一些控制字符ASCII码的序列称为码的序列称为ASCII字符串字符串v注:数字字符注:数字字符19的的ASCII码值:码值:3039v大家思考:大家思考:如何将如何将ASCII码值和对应的数字相
9、转换?码值和对应的数字相转换?有符号数和无符号数有符号数和无符号数v无符号数:所有位均为数据位无符号数:所有位均为数据位v有符号数:最左边的位为符号位有符号数:最左边的位为符号位例如:例如:1111 1101 无符号数无符号数252,而有符号数为,而有符号数为-7格式字节字双字Max无符号数255 / 281216-1232-1Max有符号数127 / 27-1215-1231-1理解理解 Twos Complement Code补码的定义:补码的定义:X补补 (M + X) mod M其中:其中:M 2nv正数的编码正数的编码无符号正无符号正数表示数表示v负数的编码负数的编码其值加上其值加上
10、256后对应的正数编码后对应的正数编码Code for +107107d = 1101011bcode: 01101011 (6Bh)Code for -107-107 + 256 = 149149d = 10010101bcode: 10010101b (95h)大家计算大家计算 6Bh + 95h ?二进制补码转换二进制补码转换vc 和和 -c 的二进制补码的二进制补码加和的值等于加和的值等于2的幂的幂8-bit code: c+(-c)=2816-bit code: c+(-c)=216v(-c) = 2n-c = (2n-1)-c+1v求补码的方法求补码的方法1 1:(-c) = 2n
11、-c v求补码的方法求补码的方法2 2: 翻转所有的位翻转所有的位加加 1 1解码二进制补码举例解码二进制补码举例0001,0110,1011,1000bv以以0开头表示正数开头表示正数简单地转换成十进制数简单地转换成十进制数1110,1001,0100,1000bv以以1开头表示负数开头表示负数应用转换规则应用转换规则转换成十进制数转换成十进制数 - 0001,0110,1011,1000b不要忘记负号!补码的加减运算补码的加减运算v加法运算加法运算 1111,0000,1101 + 0111,0110,1001 0110,0111,0110结果为正数结果为正数v减法运算减法运算 F23C
12、F23C - 2CF0 + D310 ? C54C结果为负数结果为负数检验检验 Binary Dec 1111,0000,1101 -243+0111,0110,1001 +1897 0110,0111,0110 1654负数解码负数解码1111,0000,1101-(0000,1111,0011)-243 Hex Decimal F23C (-3524) - 2CF0 - 11504 C54C - 15028对对F23C解码解码:1111,0010,0011,1100-(0000,1101,1100,0100)-3524算术进位算术进位v算术进位算术进位+1CF = 1, OF = 0+无效
13、+有效无符号数 有符号数算术溢出算术溢出v溢出的两情形:溢出的两情形:+CF = 0, OF = 1+无效+有效无符号数 有符号数情形1:当符号位有进位输入,而没有进位输出时情形2:当进位输出不是由进位输入产生时+CF = 1, OF = 1无效+无符号数 有符号数1+无效2 IBM-PC 硬件硬件Assembly Language Programming处理器处理器v8x86各种处理器的速度,寻址空间,寄存各种处理器的速度,寻址空间,寄存器以及总线数据宽度不同。器以及总线数据宽度不同。v808616bits registers, 1MB 内存空间,总线内存空间,总线8位位v808816位数据
14、总线位数据总线v8038632位寄存器,位寄存器,32位总线,寻址位总线,寻址4GBvPentium 32位寄存器,位寄存器,64位数据总线位数据总线Intel 8086处理器的结构处理器的结构8086 寄存器寄存器v寄存器寄存器 处理器中临时存储数据的地方处理器中临时存储数据的地方数据寄存器数据寄存器 (16-bit)vAX, BX, CX, DX地址寄存器地址寄存器 (16-bit)v段寄存器段寄存器: CS, SS, DS, ESv指针寄存器指针寄存器: SP, BP, IPv变址寄存器变址寄存器: SI, DI状态寄存器状态寄存器 flag (16-bit)通用数据寄存器通用数据寄存器
15、v都是用来保存数据的,都是用来保存数据的,因此称为通用寄存器因此称为通用寄存器v但各有用途但各有用途AX : 累加累加BX : 基址基址CX : 计数计数DX : 数据数据v各个寄存器的对应高低各个寄存器的对应高低字节可单独使用字节可单独使用AH, AL, BH, etc. AX BX CX DX AH AL BH BL CH CL DH DL 高8位 低8位内存组织内存组织v8086寻址范围寻址范围1MB (220 bytes)v每个字节的地址从每个字节的地址从00000h 到到 FFFFFh编码,并且编编码,并且编址是唯一确定的址是唯一确定的 10011111 00100110 01001
16、000 10000011 01011100 10100010 物理地址10000H10001H10002H10003H 10004H10005H数据寻址方式数据寻址方式v段:偏移量寻址段:偏移量寻址段段segment:一个存储区域,起始地址为能够被:一个存储区域,起始地址为能够被16整除的地址,即后整除的地址,即后4位为位为0(通常不写)(通常不写)偏移量:段范围内的存储单元相对于段起始地址偏移量:段范围内的存储单元相对于段起始地址的数量,偏移量的范围从的数量,偏移量的范围从0000H到到FFFFH段:偏移量寻址段:偏移量寻址逻辑地址逻辑地址 = = 段地址:偏移地址段地址:偏移地址物理地址段
17、地址物理地址段地址16 16 偏移偏移量量逻辑地址段地址 : 偏移地址 1000 : 0000H 1000 : 0001H1000 : 0002H1000 : 0003H1000 : 0004H1000 : 0005H 10011111 00100110 01001000 10000011 01011100 10100010 物理地址10000H10001H10002H10003H 10004H10005H逻辑地址逻辑地址 vs. 物理地址物理地址 16 位 段 地 址 16 位 偏 移 地 址 0000+ 20 位 物 理 地 址段寄存器段寄存器代码段代码段CSCSv对应执行的指令,起始对应
18、执行的指令,起始地址对应第一条可执行地址对应第一条可执行的指令的指令数据段数据段DSDSv对应程序的数据、常量对应程序的数据、常量等等堆栈段堆栈段SSSSv对应暂存任何数据,包对应暂存任何数据,包括子程序所用的数据括子程序所用的数据扩展段扩展段ESESv对应于特殊的数据和操对应于特殊的数据和操作使用作使用 存储器存储器 8KB代码 2KB数据 256堆栈02000H04800H04000H0200H0400H0480HCSDSSSESCS寄存器和寄存器和IP寄存器寄存器vCS register表示程序代码段的起始地址表示程序代码段的起始地址vIP寄存器包含要执行的下一指令的地址的偏寄存器包含要
19、执行的下一指令的地址的偏移量,和移量,和CS寄存器相关联寄存器相关联vIP寄存器的内容是程序中不能修改的寄存器的内容是程序中不能修改的SS寄存器和寄存器和SP寄存器寄存器vSS寄存器保存了暂时的数据和地址段的起寄存器保存了暂时的数据和地址段的起始地址始地址vSP堆栈指针保存了堆栈段的段内的偏移量,堆栈指针保存了堆栈段的段内的偏移量,也就是堆栈的当前顶部地址也就是堆栈的当前顶部地址v上述两者结合起来上述两者结合起来v扩展数据段一般用于字符串操作的寻址扩展数据段一般用于字符串操作的寻址v一般和一般和DI寄存器相关联寄存器相关联ES寄存器寄存器BP 和和 变址寄存器变址寄存器vBP为基址寄存器为基址
20、寄存器可指定为任何段的可指定为任何段的偏移量,但缺省指偏移量,但缺省指的是堆栈段的是堆栈段vSI 和和 DI 称为变址寄存器称为变址寄存器作用作用1 1:保存相对于任何段:保存相对于任何段的偏移量,但通常缺省保存的偏移量,但通常缺省保存相对于数据段的偏移量相对于数据段的偏移量作用作用2 2:有时保存相对于数:有时保存相对于数组地址的索引数据组地址的索引数据标志寄存器标志寄存器v标志寄存器保存了当前程序的执行状态标志寄存器保存了当前程序的执行状态 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZFAF PF CFOF 溢出标志 DF 方向
21、标志 SF 符号标志 IF 中断标志ZF 零标志 TF 陷阱标志CF 进位标志 PF 奇偶标志AF 辅助进位标志8086的系统启动的系统启动v重置系统状态,执行的第一条指令位于重置系统状态,执行的第一条指令位于FFFF0HCS = FFFFhIP = 0000h其余各个寄存器清零其余各个寄存器清零v执行执行ROM中指令,进入中指令,进入BIOS程序的处理程序的处理系统内存检查系统内存检查初始化中断向量表和相关数据初始化中断向量表和相关数据v从磁盘中载入操作系统从磁盘中载入操作系统位于磁盘的启动扇区位于磁盘的启动扇区DOSv载入执行载入执行80 x86寄存器寄存器80 x86的程序可见寄存器组通
22、用寄存器专用寄存器段寄存器 AH AX AL AH AX AL BH BX BL BH BX BL CH CX CL CH CX CL DH DX DL DH DX DL SP SP BP BP SI SI DI DI IP IP FLAGS FLAGS CS CS DS DS SS SS ES ES8086 /8086 /8088 /8088 /8028680286 寄寄 存存 器器EAXEAXEBXEBXECXECXEDXEDXESPESPEBPEBPESIESIEDIEDIEIPEIP EFLAGS EFLAGS FSFSGSGS 31 16 15 8 7 0中断中断v中断:某些事件使得
23、处理器挂起当前的操作并中断:某些事件使得处理器挂起当前的操作并为引起中断的原因去作一些事情。为引起中断的原因去作一些事情。有些原因是正常的,例如键盘输入请求;有些原因是正常的,例如键盘输入请求;有些是非法的,例如除数为有些是非法的,例如除数为0 0的操作。的操作。v中断服务程序中断服务程序堆栈堆栈StackvLIFO 数据结构数据结构支持支持 PUSH 和和 POP 操作操作v作用作用发生中断处理和过程调用时,保护当前执行的现发生中断处理和过程调用时,保护当前执行的现场;场;过程返回时,依据堆栈保存的地址继续执行过程返回时,依据堆栈保存的地址继续执行堆栈的构造堆栈的构造v堆栈是通过堆栈段寄存器
24、和偏移量访问的一堆栈是通过堆栈段寄存器和偏移量访问的一段内存区域段内存区域SS SS :指向了堆栈的开始地址:指向了堆栈的开始地址SP SP :指向了堆栈的顶部:指向了堆栈的顶部SP:000CSS:0340Stack Size: 000C动作动作vPUSH: 压栈操作,减少压栈操作,减少SPPOP: 出栈操作,增加出栈操作,增加SPSP:0008SS:0340Stack Size: 000CPUSHvPUSH sourcesource 指的是任何指的是任何16/32位通用或者段寄存器,位通用或者段寄存器,或者字或者字/双字的地址双字的地址vPUSHF 将标志寄存器的内容压栈将标志寄存器的内容压
25、栈v动作:动作:SP减去减去2/4在在SS:SP地址存放地址存放source数据数据PUSH 举例举例PUSH AX3C 09 A4 40 2C FF A2 432A 09 46SP:000807 06 4CSS:0340Stack Size: 000C3C 09 A4 40 2C FF A2 232A 09 46SP:000601 06 4CSS:0340AX: 0123POPvPOP destinationdestination指的是任何指的是任何16/32位通用或者段寄存位通用或者段寄存器,或者字器,或者字/双字的地址双字的地址vPOPF or POPFD将标志寄存器的内容出栈,存入标志
26、寄存器将标志寄存器的内容出栈,存入标志寄存器v动作:动作:将将 SS:SP 地址的数据拷贝到地址的数据拷贝到destinationSP加加2/4POP 举例举例POP ES3C 09 A4 40 2C FF A2 232A 09 46SP:000801 06 4CSS:03403C 09 A4 40 2C FF A2 232A 09 46SP:000601 06 4CSS:0340ES: 0123第第2部分部分 汇编语言基础知识汇编语言基础知识 1 汇编语言汇编语言的编码要求的编码要求Assembly Language Programming基本特征基本特征程序注释程序注释保留字保留字标识符标
27、识符语句语句伪操作伪操作v汇编程序的基本框架汇编程序的基本框架数据类型数据类型v简单的程序举例简单的程序举例注释注释v注释利用注释利用 ; 开始开始v可自成一行,也可在指令之后的同一行里可自成一行,也可在指令之后的同一行里v例如例如ADD AX,BX ; ; 计算总量计算总量保留字保留字v在特殊情况下使用,具有固定用途而保留的某些名在特殊情况下使用,具有固定用途而保留的某些名字,称为保留字。主要类型:字,称为保留字。主要类型:v指令指令如如MOV, ADD等计算机可执行的操作等计算机可执行的操作v伪操作伪操作如如END, SEGMENT,为编译程序提供信息的语句,为编译程序提供信息的语句v操作
28、符操作符如如FAR, SIZE,在表达式中使用,在表达式中使用v预定义符号预定义符号如如data, model等,在编译期间向程序返回信息等,在编译期间向程序返回信息标识符标识符1v用户定义的符号名称,包括两类:用户定义的符号名称,包括两类:数据项的名称:表示数据项的地址数据项的名称:表示数据项的地址v如如COUNTER DB 0标号:表示指令、过程或者段的地址标号:表示指令、过程或者段的地址v MAIN PROC FARvB30: ADD BL, 25标识符标识符2v定义规则定义规则第一个字符必须是字母或者不为的特第一个字符必须是字母或者不为的特殊字符殊字符长度限定在长度限定在1 13131
29、之间之间不能和保留字相冲突不能和保留字相冲突不区分大小写不区分大小写v例如例如合法:合法:vTATAL, QTY25, $P80非法:非法:v5P, .TY字母: AZ和az数字:09特殊: ? _ .$语句语句v语句包括两类:语句包括两类:指令指令具有对应的机器码具有对应的机器码v例如:例如:ADD, MOV伪指令伪指令只在程序汇编过程起作用,产生机器只在程序汇编过程起作用,产生机器不可执行的代码不可执行的代码v例如:例如:v定义数据项定义数据项DB, DW指令指令v指令指令机器指令机器指令v操作操作operation是必有的,规定该指令的动是必有的,规定该指令的动作作v操作数操作数oper
30、and是可选的,并且数量不定是可选的,并且数量不定v例如:例如: 标识符标识符操作操作操作数操作数伪指令伪指令:COUNTDB1指令:指令:MOV AX, 0标示名称 操作 操作数1n ;注释伪操作伪操作v介绍几个常用的伪操作介绍几个常用的伪操作PAGE和和TITLESEGMENTPROCEND和和ENDPASSUME标示名称 伪操作 操作数1n ;注释PAGE和和TITLEv程序的开头,程序的开头,PAGE定义程序打印时一页的定义程序打印时一页的最大行数和每行最大字符数。最大行数和每行最大字符数。v默认默认50,80v格式:格式:PAGE 60, 132vTITLE为程序产生标题,打印程序时
31、位于第为程序产生标题,打印程序时位于第2行行v格式:格式:TITLE Assembly program sortSEGMENTv格式:格式:segment_name SEGMENT align combine class segment_name ENDSv解释解释定位定位align:指明段开始的边界。:指明段开始的边界。v通常段为小边界,参数为通常段为小边界,参数为PARA。组合组合combine:指明程序连接时,该段是否和其它的段:指明程序连接时,该段是否和其它的段组合在一起(以后解释),参数为组合在一起(以后解释),参数为STACK, COMMON, PUBLICv堆栈段通常定义堆栈段通
32、常定义segment_name SEGMENT PARA STACK类别类别class:指明段的类别:指明段的类别v代码段代码段code,数据段,数据段data,堆栈段,堆栈段stackPROCv定义过程,格式:定义过程,格式:proc_name PROC FAR proc_name ENDPv过程名的操作数为过程名的操作数为FAR,意味着相应程序的入口点为此过,意味着相应程序的入口点为此过程,在程序中只有一个操作数为程,在程序中只有一个操作数为FAR的过程。的过程。vENDP指明过程的结束,过程的结束在代码段内,即指明过程的结束,过程的结束在代码段内,即ENDS之前完成。之前完成。v代码段内
33、可以包含任意数量的过程,其它的过程通常使用代码段内可以包含任意数量的过程,其它的过程通常使用NEAR的操作数。的操作数。ENDvENDS段结束段结束vENDP过程结束过程结束vEND完整的程序结束完整的程序结束格式格式: vEND 过程操作数过程操作数FAR的的PROCASSUMEv指明程序各个段的用途指明程序各个段的用途典型的格式典型的格式ASSUME DS:dataseg, CS:codeseg, SS:stackseg, v上述的次序任意上述的次序任意v假如需要扩展段假如需要扩展段ES,也可以加上即可,也可以加上即可ES:dataseg程序的框架结构程序的框架结构page 60,132T
34、ITLEA04ASM1 (EXE) Move and add operationsSTACKSEGMENT PARA STACK Stack.STACKENDS; -DATASEG SEGMENT PARA DataDATASEG ENDS; -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 21HMAINEND
35、P;End of procedureCODESEGENDS;End of segmentEND MAIN;End of program解释解释v段的定义顺序可任意段的定义顺序可任意v入口过程入口过程MAIN的名称可以为其它,例如的名称可以为其它,例如START等等v程序结束返回程序结束返回MOV AH, 4CH ;请求结束处理;请求结束处理MOV AL, retcode ;设置返回码;设置返回码INT 21H;调用中断处理;调用中断处理通常正常返回通常正常返回0,故可写作,故可写作MOV AX, 4C00HINT 21H编程技巧提示编程技巧提示v由于汇编源程序的格式相对不变,故可以把由于汇编源
36、程序的格式相对不变,故可以把上述的框架保留下来,添加功能代码即可上述的框架保留下来,添加功能代码即可数据类型数据类型 1v名称:对应标识符名称:对应标识符v伪操作伪操作Dn:定义数据的类型长度:定义数据的类型长度字节字节DB(1字节)字节)字字DW(2字节)字节)双字双字DD(4字节)字节)v表达式:定义数据的数值的常数或者表达表达式:定义数据的数值的常数或者表达式式名称 Dn 表达式 数据的定义数据的定义1v表达式的形式表达式的形式对于尚未初始化的数据,使用对于尚未初始化的数据,使用 ?表示表示常数常数v举例举例最简单的情形最简单的情形DATAX DB ?DATAY DB 25数据的定义数据
37、的定义2v数据序列的定义数据序列的定义数组数组数据因素依次用数据因素依次用 , 隔开隔开DATAZ DB 21, 22, 23, 24v对对DATAZ的数据因素访问,根据数据所处的的数据因素访问,根据数据所处的位置进行位置进行DATAZ+0 表示表示21, DATAZ+1 表示表示22,依次类,依次类推推MOV AL, DATAZ+3数据的定义数据的定义3v重复数据序列的定义重复数据序列的定义v举例举例DW 10 DUP(?)DB 5 DUP(12)DB 3 DUP (5 DUP(4) )DB 4 DUP(3 DUP (0,1), 2 DUP($)名称 Dn 重复个数 DUP(表达式)请大家思
38、考:上述的数据是什么?数据的定义数据的定义4v字符和字符串的定义字符和字符串的定义字符或者字符串在单引号字符或者字符串在单引号 或者双引号或者双引号“”“” 内定义内定义数据类型常用的是数据类型常用的是DB举例举例DB Computer cityv若串中含有若串中含有 “”“”,以下处理,以下处理DB Crazy sam”s CDDB “Crazy sams CD”page 60,132TITLEA04ASM1 (EXE) Move and add operationsSTACKSEGMENT PARA STACK StackDW 32 DUP(0)STACKENDS; -DATASEGSEG
39、MENT PARA DataFLDDDW 215FLDEDW 125FLDFDW ?DATASEGENDS; -CODESEGSEGMENT PARA CodeMAINPROC FARASSUME SS: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 processingIN
40、T 21HMAINENDP;End of procedureCODESEGENDS;End of segmentEND MAIN;End of program完完整整的的源源程程序序举举例例编写注意编写注意v编写建议:编写建议:同一小功能段,编写注释同一小功能段,编写注释程序识别一般不区分大小写程序识别一般不区分大小写可读性强,通常所有汇编指令用大写,而注释全可读性强,通常所有汇编指令用大写,而注释全部用小写部用小写使用简化的编程框架使用简化的编程框架v.MODEL 自动产生自动产生ASSUME语句语句v.MODEL 本教程通常两种:本教程通常两种:vTiny: 为为.com生成代码生成代码v
41、Small: 为为.exe生成代码生成代码v并且两者代码偏移量限定在并且两者代码偏移量限定在64KB内内page 60,132TITLEA04ASM2 (EXE) Move and add operations;-.MODEL SMALL.STACK 64;Define stack.DATA ;Define dataFLDDDW 215FLDEDW 125FLDFDW ?;-.CODE;Define code segmentMAINPROC FARMOV AX,data;Set address of dataMOV DS,AX; segment in DSMOV AX,FLDD;Move 02
42、15 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几个文件几个文件v源程序:源程序:.asmv目标文件:目标文件:.objv可执行文件:可执行文件:.exe (.com)编辑源程序.asm.asm汇编.obj连接.exe选项.LS
43、T.CRF汇编过程汇编过程1vML 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 File nul.def:注意:该命令编译,生成obj
44、, 连接,生成exe同时完成汇编过程汇编过程2vE:srcCH04ML /c a04asm1.asmMicrosoft (R) Macro Assembler Version 6.11Copyright (C) Microsoft Corp 1981-1993. All rights reserved. Assembling: a04asm1.asmvE:srcCH04LINK a04asm1.objMicrosoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992Copyright (C) Microsoft Corp
45、 1984-1992. All rights reserved.Run File a04asm1.exe: a04asm1.exeList File nul.map:Libraries .lib:Definitions File nul.def:注意:该命令编译,生成obj, 连接,生成exe分别完成执行执行vE:srcCH04a04asm1.exevE:srcCH04ML其它注意的汇编选项其它注意的汇编选项v除了除了/c/c只汇编程序外,还要知道只汇编程序外,还要知道:v/Fl/Fl:产生列表文件:产生列表文件.lst.lstv/Fr/Fr:产生映象文件:产生映象文件.map.mapv/Sn
46、/Sn:禁止符号表的列表:禁止符号表的列表v/Zd/Zd:包含调试信息的行号:包含调试信息的行号v/Zi/Zi:包含符号的调试信息:包含符号的调试信息大家在实验中,将上述的各个选项应用上编译程序,大家在实验中,将上述的各个选项应用上编译程序,知道各个选项的含义。知道各个选项的含义。3 编写编写.COM汇编程序汇编程序Assembly Language Programming.COM程序程序程序通常较为小巧,最大不超过程序通常较为小巧,最大不超过64KB,适合作为常驻内存的程序适合作为常驻内存的程序v代码段和数据段在一个段内代码段和数据段在一个段内.v堆栈段由装入程序在段尾自动创建堆栈段由装入程
47、序在段尾自动创建v头头100H为为Program Segment Prex.exe vs. .comPSP堆栈段数据段代码段ESSSDSCSPSP代码段堆栈段ESDSCSSS编写格式编写格式vASSUME将所有段寄存器初始化为代码段的将所有段寄存器初始化为代码段的地址地址vORG 100H指明第一条指令的地址为指明第一条指令的地址为100H偏偏移量,即移量,即IP=100Hv注意:定义数据的方法,通常程序一开始即注意:定义数据的方法,通常程序一开始即定义定义TITLEA05COM1 COM program to move and add dataCODESEG SEGMENT PARA Cod
48、eASSUME 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,AX;Store sum in DATAZMOV AX,4C00H;End processingINT 21HMAINE
49、NDPCODESEG ENDSEND BEGINTITLEA05COM2 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 AXADD AX,DATAY;Add 0125 to AXMOV DATAZ,AX;Store sum in DATAZMOV A
50、X,4C00H;End processingINT 21HMAINENDPEND BEGIN.com文件的汇编连接文件的汇编连接vAssembling and linking .com programsvC:ml /AT /Fl /Fm A05COM2.ASMMicrosoft (R) Macro Assembler Version 6.11Copyright (C) Microsoft Corp 1981-1993. All rights reserved.Assembling: A05COM2.ASMMicrosoft (R) Segmented Executable Linker Ver
51、sion 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程序程序跟踪调试跟踪
52、调试Assembly Language Programming基本命令的使用基本命令的使用vDEBUG是我们学习汇编语言的调试工具。是我们学习汇编语言的调试工具。所有的命令不区分大小写所有的命令不区分大小写所有的输入数据都默认十六进制的,不用所有的输入数据都默认十六进制的,不用H结尾结尾vC:DEBUGv-C:DEBUG file.exe-R检查寄存器检查寄存器vC:DEBUGv-RAX=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 U
53、P EI PL NZ NA PO NC0AC4:0100 F6C280 TEST DL,80RF标记寄存器标记寄存器v-RFv列举出标志寄存器的各个位状态列举出标志寄存器的各个位状态OF溢出(是/否) OV NV DF方向(减量/增量)DNUPIF中断(允许/关闭)EIDISF符号(负/正)NGPLZF零(是/否)ZRNZAF辅助进位(是/否)ACNAPF奇偶(偶/奇)PEPOCF进位(是/否CYNCD检查内存内容检查内存内容v使用的格式:使用的格式: - D starting address lengthv开始的地址:开始的地址:segment:offset 采用默认采用默认DS的偏移地址的
54、偏移地址offsetv例如:例如:-D 0000-D DS:0000-D 0100 L5E编辑机器指令程序编辑机器指令程序vC:DEBUGv-E CS:100 B8 23 01 05 25 00v-E CS:106 8B D8 03 D8 8B CBv-E CS:10C 2b c8 2b c0 eb eev-D CS:1000B00: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.debug-n A
55、05COM2.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:01
56、0B 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第第3部分部分 常用指令和寻址方式常用指令和寻址方式 1 常用基本操作常用基本操作Assembly Language Programming 伪操作伪操作v格式:格式:名称名称 = = 表达式表
57、达式赋值操作赋值操作将表达式的数值指派给名称将表达式的数值指派给名称表达式一定为数值表达式一定为数值名称的值可被多次指派名称的值可被多次指派v例如:例如:MAXINT = 7FFFHCOUNT = 1COUNT = COUNT * 2EQU 伪操作伪操作v格式:格式:名称名称 EQU 表达式表达式利用名称替代表达式利用名称替代表达式表达式可以为数值,也可为字符串表达式可以为数值,也可为字符串使用使用 代表字符串代表字符串一旦赋值完成,不能再次改变一旦赋值完成,不能再次改变v举例:举例:Sample EQU 7FhaString EQU message EQU MPY EQU MUL 利用利用M
58、PY替代替代MUL指令指令注意注意vEQU伪操作中的表达式名是不允许重复定义伪操作中的表达式名是不允许重复定义的,而的,而=伪操作则允许重复定义。伪操作则允许重复定义。v上述两个伪操作和数据定义上述两个伪操作和数据定义DB/DW/DD等不等不同之处,主要体现在:同之处,主要体现在:EQU和不分配内存空间,仅仅定义了数据,编和不分配内存空间,仅仅定义了数据,编译时用定义的数据替换标识符译时用定义的数据替换标识符数据定义伪指令数据定义伪指令DB/DW/DD分配相应的内存空间分配相应的内存空间通用数据传输指令通用数据传输指令v传送指令传送指令 MOVv数据交换指令数据交换指令 XCHGv地址偏移量加
59、载地址偏移量加载 LEAMOV指令指令vMOV target, sourcereg, regmem, regreg, memmem, immedreg, immedv存储器操作数之间不能相互传值存储器操作数之间不能相互传值v两个操作数的类型须一致两个操作数的类型须一致v段寄存器和立即数之间不能相互段寄存器和立即数之间不能相互传值传值vCSCS不能作为目标寄存器使用不能作为目标寄存器使用合法指令举例合法指令举例v寄存器传送寄存器传送MOV EDX, ECXMOV ES, AXMOV BYTEFLD, AHMOV DI, BXv立即数传送立即数传送MOV CX, 40HMOV BYTEFLD, 2
60、5HMOV WORDFLDBX, 16Hv直接存储器传送直接存储器传送MOV CH, BYTEFLDMOV CX, WORDFLDBXv段寄存器传送段寄存器传送MOV AX, DSMOV WORDFLD, DS非法非法MOV指令指令vMOV DL, WORD_VALvMOV DX, BYTE_VALv注:注:PTR的使用的使用MOV DL, WORD PTR WORD_VALMOV DX, BYTE PTP BYTE_VALvMOV BYTE_VAL1, BYTE_VAL2 存储器之间不能之间传送存储器之间不能之间传送vMOV ES, 23 立即数到段寄存器不能直接传送立即数到段寄存器不能直接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度模特时尚品牌代言聘用合同-@-15
- 2025年度事业单位网络安全管理员劳动合同范本3篇
- 二零二五年度内墙涂料研发生产与品牌营销承包合同
- 2025年度智能晾晒系统配套个人木工装修合同3篇
- 2025年度个人闲置物品转让合同范本3篇
- 2025年度个人投资理财咨询服务合同范本8篇
- 2025年度个人住房贷款质押合同标准文本及贷款逾期处理规定3篇
- 2025年度个人房地产抵押借款合同电子签名版
- 二零二五年度农家乐民宿设施使用权转让合同4篇
- 2025年度个人股权收购与转让合同(资产重组版)3篇
- 射频在疼痛治疗中的应用
- 和平精英电竞赛事
- 四年级数学竖式计算100道文档
- “新零售”模式下生鲜电商的营销策略研究-以盒马鲜生为例
- 项痹病辨证施护
- 职业安全健康工作总结(2篇)
- 怀化市数字经济产业发展概况及未来投资可行性研究报告
- 07FD02 防空地下室电气设备安装
- 教师高中化学大单元教学培训心得体会
- 弹簧分离问题经典题目
- 部编版高中历史中外历史纲要(下)世界史导言课课件
评论
0/150
提交评论