




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、14.14.1汇编程序功能汇编程序功能汇编语言程序的建立及汇编过程:编辑程序PROGR.ASM 文件汇编程序连接程序PROGR.OBJ 文件PROGR.EXE 文件EDIT.exeNotepad.exeMASM.exeLINK.exeEXE程序还需经DEBUG的调试2在计算机上运行汇编语言程序的步骤是:用编辑程序建立源文件: ex_movs.asm1);例:把40个字母a的字符串从源缓冲区传送到目的缓冲区。;PROGRAM TITLE GOES HERE-ex-movs;*data segment;define data segmentsource_buffer db 40 dup(a)dat
2、a ends;*extra segment;define extra segmentdest_buffer db 40 dup(?)extra ends3code segment;define code segment;-main proc far;main part of programassume cs: code, ds: data, es: extra start:;starting execution address;set up stack for returnpush ds;save old data segmentsub ax,ax;put zero in AXpush ax;
3、save it on stack;set DS register to currentmov ax,data;data segment addrmov ds,ax;into DS register;set ES register to current extra segmentmov ax,extra;extra segment addrmov es,ax;into ES register 4 ;MAIN PART OF PROGRAM GOES HERElea si,source_buffer;put offset addr of source buffer in SIlea di,dest
4、_buffer;put offset addr of dest buffer in DIcld;set DF flag to forwardmov cx,40;put count in CXrep movsb;move entire stringret;return to DOSmain endp;end of main part of program;-code ends;end of code segment;*end start;end of assembly5用MASM程序把ASM文件转换成OBJ文件;2)6用LINK程序把OBJ文件转换成EXE文件;3)74)经DEBUG的调试891
5、011助记符(Mnemonic)字段说明所用伪操作的数据类型,常用的有以下几种:双字(32位)字(16位)四个字(64位),存放双精度浮点数。DB:字节(8位)DW:DD:DQ:十个字节,形成压缩的BCD码。DT:格式:变量名Mnemonic Oprand,Oprand;Comments操作数(Oprand)把数据放入指定的单元12数据定义伪操作:把数据存入存储单元;分配空间;DW和DD可存储偏移地址或完整的地址。 下面举例说明:0 A0 41 06 40 00 00 1F BF F3 C0 0F DF F0 00 00 00 010d10h4100d100h-560d0FFFDh例:例: 操
6、作数可以是常数,或者操作数可以是常数,或者表达式(根据表达式可以求得一表达式(根据表达式可以求得一个常数),如个常数),如 DATA_BYTE DB 10,4,10HDATA_WORD DW 100,100H,-5DATA_DW DD 3*20,0FFFDH汇编程序在汇编期间在存储器中存入数据,如图所示13例例 :操作数也可以是字符串,如:操作数也可以是字符串,如: MESSAGE DB HELLO 例例 :操作数?可以保留存储空间,但不存入数据。:操作数?可以保留存储空间,但不存入数据。 如:如: ABC DB 0,?,?,?,0 DFF DW ?,52,? 例:DATADWAB, CD注意
7、:1、不能写为DWABCD 2、用DB与DW来定义字符串的区别14操作数可以使用操作数可以使用复制操作符复制操作符来复制某个操作数。来复制某个操作数。其格式为:其格式为: repeat_count DUP(operand,operand)repeat_countrepeat_count:可以是一个表达式,它的值应该:可以是一个表达式,它的值应该是一个正整数,用来指定括号中的操作数的重复次数。是一个正整数,用来指定括号中的操作数的重复次数。例例 :DUPDUP操作可以嵌套,操作可以嵌套, ARRAY3 DB 100 DUP(0,2 DUP(1,2),0,3)例:ARRAY1DB100DUP(?)
8、15 可以用可以用DWDW或或DDDD伪操作把变量或标号的偏移地址伪操作把变量或标号的偏移地址(DWDW)或整个地址(或整个地址(DDDD)存入存储器。存入存储器。用用DDDD操作存入地址时:操作存入地址时:第一个字第一个字为偏移地址,为偏移地址,第二个字第二个字为段地址。为段地址。例例 : PARAMETER_TABLE DW PAR1 DW PAR2 DW PAR3 INTERSEG_DATA DD DATA1 DD DATA2则汇编后的存储情况如图所示(点击出现)16PAR1的偏移地址PAR2的偏移地址PAR3的偏移地址DATA1的偏移地址DATA2的偏移地址DATA1的段地址DATA2
9、的段地址PARAMETER_TABLEINTERSEG_DATA例的汇编结果17 OPER1 DB ?,? OPER2 DW ?,? MOV OPER1,0MOV OPER2,0则第一条指令应为字节指令,而第二条应为字指令。 OPER1 DB 1,2 OPER2 DW 1234H,5678H MOV AX,OPER1+1MOV AL,OPER2例例这段程序将指示出错:这两条MOV指令中的两个操作数的类型不匹配。例注意:变量的类型18 例:JNE$+6例:ARRAYDW1,2,$+4,4,$+4ORG伪操作:用来设置地址计数器的值。ORGEXP例:ORG100H DATA1DW10 DUP ($
10、), 1000H,$+200H1920举例如下:举例如下: DATA_SEG SEGMENT EVEN WORD_ARR DW 100 DUP(?) DATA_SEG ENDS21举例如下:举例如下: DATA_SEG SEGMENT ALIGN 4 ARR DB 100 DUP(?) DATA_SEG ENDS22Expression_name EQU Expression举例如下:举例如下: CONSTANT EQU 256 DATA EQU HEIGHT+12;地址表达式 ALPHA EQU 7 BETA EQU ALPHA-2 ADDR EQU VAR+BETA B EQU BP+8
11、P8 EQU DS:BP+8表达式:有效的常数表达式,有效的助记符23下面是应用时必须注意的几点:下面是应用时必须注意的几点: (1)EQU表达式中:有变量或标号的表达式,则应先定义如: AB EQU DATA_ONE+2 则必须放在DATA_ONE的定义之后才行。 (2)与EQU 相类似的=伪操作,作为赋值使用。区别是:EQU 伪操作中的表达式名是不允许重复定义的,= 伪操作则允许重复定义。24segment name ENDS 此外,还必须明确段和段寄存器的关系,这可用ASSUME伪操作来实现,其格式为: 其中ASSUME说明分配情况,其格式为: ASSUME assignment, as
12、signmentsegment register name:segment name25data segmentdata segment a dw 1,2,$+4,4,$+4 c dw 5 dup($) b equ 10data endsdata endscode segmentcode segmentmain proc far assume cs:code,ds:datastart: mov ax,data mov ds,ax lea ax,a mov bx,type start mov cx,b retmain endpcode endscode ends end start26data_
13、seg1 segment ;define data segmentdata_seg1 ends 段寄存器:是CS,DS,ES和SS中的一个; 段名:是由SEGMENT定义的段名. data_seg2 segment ;define extra segmentdata_seg2 ends程序格式举例说明如下程序格式举例说明如下:27 assume cs:code_seg,ds:data_seg1,es:data_seg2start:;set DS register to current data segment mov ax,data_seg1 ;data segment addr mov ds
14、,ax ;into DS register;set ES register to current extra segment mov ax,data_seg2 ;extra segment addr mov es,ax ;into ES register code_seg ends ;end of segmentend startcode_seg segment; define code segment28:RET*方法2: Main proc farMOVAH,4CHINT21H Main endpMain endp29汇编程序在遇END时结束汇编,而程序将从START开始执行NAME mo
15、dule_nameTITLE text表示源程序结束的伪操作的格式为:END start30名字项可以是标号或变量。标号:段属性: 偏移属性:类型属性:标号在代码段中定义,后面跟冒号:。标号有三种属性:段,偏移及类型。定义标号的段起始位置。标号的偏移地址是16/32位无符号数。指出该标号是在本段中引用还是在其他段中引用的。段内称NEAR,对16位段 指针长2字节,32位4字节;段外称FAR,对16位段 指针长4字节,32位6字节。31代码段外的其他段中定义,不跟冒号。常在 操作数段出现。有段,偏移及类型三种属性。段属性:偏移属性:类型属性:16/32位无符号数,从段的起始地址到变量地址之间的字节数。在段内变量的偏移值等于当前地址计数器的值,可以用$来表示。操作项可以是指令,伪操作或是宏指令的助记符。变量:变量的段起始位置,在一个段寄存器中定义该变量所占用的字节数。属性可用:SEG,OFFSET,TYPE来获取32 +、-、/和MOD。AND、OR、XOR和NOT。EQ(相等)、NE(不等)、LT(小于)、GT(大于)LE(小于或等于)、GE(大于或等于)6种。33TYPE Variable或labelLENGTH VariableSIZE VariableOFFSET Variable或labelSEG Variable或labelTYPELENGTHSIZEOFFSET
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年js技术基础测试题及答案
- 2025-2030年中国长短咀两用吹尘枪数据监测研究报告
- 2025年高考语文一轮复习诗歌鉴赏之表达技巧
- 2025年高考物理二轮专题复习讲义:第4专题 带电粒子在电场和磁场中的运动
- 部编版一年级语文下册第一单元练习题 (含答案)
- 体育类培训服务合同
- 互联网电商平台运营协议
- 合同之劳动合同五险一金
- 2025年商业流通仓储服务合作协议书
- 长宁区家庭卫生间施工方案
- 5.2 做自强不息的中国人 (课件)-2024-2025学年统编版道德与法治七年级下册
- 《材料科学与工程专业生产实习》课程教学大纲
- 陵园墓地代理居间
- 2025年宁夏警官职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 从入门到精通:2025年化妆基本步骤
- 移动传输汇聚机房施工项目
- 顶管选型及适应性评估方案
- 热性惊厥诊断治疗与管理专家共识(2017版)
- 防腐工安全操作规程范文(2篇)
- 2025年湖北日报传媒集团招聘笔试参考题库含答案解析
- 绿化养护项目管理服务机构设置方案、运作流程、管理方式及计划
评论
0/150
提交评论