版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、mov ax,12hcall displayjmp 1234h主要内容:l汇编语言源程序的结构l汇编语言语句格式l伪指令l功能调用l汇编语言程序设计 (1)二进制数形式的指令和数据。 b0 64 是什么意思?这就是机器语言。既不直观,又不易理解和记忆. mov al,64h ;很容易记忆理解,这就是。 (2)用便于记忆的英语单词表示的指令操作码。它反映了指令的功能和主要特征,便于人们理解和记忆。 操作数可能放在存储器中,这就涉及操作数的地址。程序中遇到转移指令或调用指令,也需要知道转移地址,若采用具体地址就很不方便,一旦有错,改动也很麻烦。于是人们,例: : mov ax, loop (3)指
2、令助记符,符号地址,标号,伪指令等语言元素的集合以及这些元素使用的规则。 用汇编语言编写的程序叫。 指令除了操作码以外,还有一个操作数问题。汇编程序(翻译程序)源程序的编译程序源程序的编译程序汇编程序汇编程序汇编语言汇编语言源程序源程序机器语言机器语言目标程序目标程序 汇编源程序需翻译成机器语言,变成可执行文件,机器才能执行,这个翻译过程叫。高级语言中称该过程为“解释”或“编译”。执行翻译的程序称为“”。汇编语言程序设计与执行过程l输入汇编语言源程序 /notepad等 源文件 .asml汇编(编译) 等 目标文件 .objl链接 等 可执行文件 .exel调试 debug/td等 最终正确的
3、程序.exe 目前都把上述的软件集成在统一的环境下,以方便用户使用。4.1.1 汇编语言源程序的结构 汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由3个(或4个)逻辑段组成:l一个基本的汇编语言程序框架如下: segment para db 100 dup() ends segment ends segment assume cs, ds, es mov ax, mov ds, ax mov es, ax mov al, 4ch int 21h ends end 堆栈段数据段代码段真指令0000:03ff环境与代码运行环境与代码运行ffff:0堆栈段堆栈段数据段数据段代码段代码段c
4、s:ipdsss:sp系统起始运行程序系统起始运行程序中断向量区中断向量区(系统专用)(系统专用)栈底最多4个活动段分段结构分段结构es由执行,每一条指令性语句都有一条机器码指令与其对应;执行。它指出汇编程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无机器码指令与其相对应。 注意: 语句的构成元素:汇编语言的一个实例: hello.asm hello db hello, world!,0dh,0ah,$ assume cs:prog,ds:datastart: mov ax,data mov ds,ax lea dx,hello;取字符串首地址 mo
5、v ah,9 int 21h;显示字符串 mov ah,4ch int 21h;退回dos名字标号 (操作数的形式)包括有三个属性:指令或数据所在内存单元的符号地址如如 start : mov ax, data jmp/call start hello db 06h,45h,44hptr 变量即内存中的存储单元或数据区。 变量名是存储单元(数据区)的符号地址 或 名字。如如 start : mov ax, dataptrl标号和变量名的使用规则:表达式是常数、寄存器、标号、变量与运算符的组合。有数字表达式和地址表达式两种。汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变
6、。表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类。如如 start : mov ax, 用于数字表达式, 例: +、-、*、/,mod逻辑运算符只能用于数字表达式中。 例: mov cl,36h and 0fh 经汇编后:mov cl,06h注意: 不要把逻辑运算符与逻辑运算指令混淆: 例:and ax, 3fc0h and 0ff00h 汇编后源操作数被翻译为:3f00h,所以上述指令与 and ax, 3f00h等价。 and、or、xor、not关系运算的结果是一个逻辑值:或eq、ne、lt、gt、le、geseg: 取变量/标号的段地址offset:取变量/标号的偏移地址
7、注意: 下面两条指令的异同: mov bx, offset var lea bx, varseg、offsetltype 取取llength 取所定义取所定义的长度的长度 (即(即中元素的个数)中元素的个数)lsize 取所定义存储区的字节数取所定义存储区的字节数 (=type * length)例:例:var dw 1,2,3,4,5 type、length、sizeptr用来指定地址操作数的类型。例:movbyte ptrdi,0 ;字节类型 movword ptrdi,0 ;字类型 movdi,0b5h ;类型不定4.2 伪指令l数据定义 伪指令l符号定义 伪指令l段定义和段寄存器指定伪
8、指令l过程定义 伪指令l结束 伪指令4.2.1 数据定义伪指令 用于定义变量,即内存单元或数据区。数据定义伪指令的格式为:data_b db 10,5,10hdata_w dw 100h,-4data_d dd 0fffbh汇编后的内存分配情况如右图所示。05h10h00h01hfchffhfbhffh00h00h0ah操作数可以是字符串,例如 汇编后的情况如图:strhello注意注意: :下面两个定义的不同之处:dbab ;41h在低字节,42h在高字节(先a后b)dw ab ;42h在低字节,41h在高字节(先b后a)48h45h4ch4ch4fh 操作数 用来保留存储空间,但不存入数据
9、. table db 10 dup(?) buffer dw table,$+3设table的偏移地址为0080h,则汇编后如下图所示:buffer0080h80htable008ah008bh008ch008dh.8dh00h00h0089h10 bytes4.2.2 符号定义伪指令 把一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示。类似于c语言中的#define。 符号定义伪指令有两种:用定义的符号未清除前,不能重新定义。清除equ定义可用伪指令。用” ”定义的符号可在任何时候进行重定义。均不占用存储空间,仅是给符号赋值 例:five equ 5 count equ
10、cx ten equ 10 dist = byte ptrsi+bp goto = jmp mov ax, ten mov cx, count add dist, five dist = word ptrsi+bp+1 add dist, ax goto label 定义定义引用引用4.2.3 段定义伪指令汇编语言程序是按段来组织程序和数据的。 和存储器的物理段相对应,汇编语言程序中的段称为逻辑段。汇编连接后被映射到物理段中。3/4类段:代码(程序)、数据/附加数据、堆栈段定义伪指令:这两个伪指令总是成对出现,二者前面的段名应一致。segment说明了一个段的开始,ends说明了一个段的结束。
11、 对数据段和堆栈段,段中的语句一般是变量定义。 对代码段则是指令语句。如: data segment data ends 和在代码段中,还必须明确段和段寄存器的关系,这由语句来指定。如 : assume伪指令只是告知汇编程序有关段寄存器与段的关系,并没有给段寄存器赋予实际的初值。故下面的语句 movax,data movds,ax moves,ax movax,stack movss,ax。如果程序中用到堆栈段,则ss也需装入实际的初值。不需要程序员装入cs寄存器,而由操作系统(负责装入。逻辑段从一个节节 (16个字节) 的边界开始。即段的起始地址应能被16整除, 或这说段起始物理地址应为0h
12、。默认类型逻辑段从字节字节边界开始,即段可以从任何地址开始。逻辑段从字字边界开始。即段的起始地址必须是偶数。逻辑段从页页边界开始。256字节称为一页,故段的起始物理地址应为00h。也即:也即:page(页边界页边界) - 能被能被256除;除;para(段边界段边界) -能能被被16除除; word(字边界字边界) - (能被能被2除除);byte (字节边界字节边界) 段名段名 segment 定位类型定位类型 组合类型组合类型 类别类别 说明不同模块中不同模块中同名段同名段的组合方式,的组合方式,共共6种种: public: 所有此类型的同名段同名段组合成一个逻辑段,公用一个段地址,运行时
13、装入同一个物理段中。 common : 所有此类型的同名段具有相同的起始地址(覆盖),共享相同的存储区域。 at : 按绝对地址定位,段地址就是表达式的值。 stack : 专用于说明堆栈段,组合方式同public none : 不组合不组合 memory :置于地址最高处,多个时取第一个,其余作置于地址最高处,多个时取第一个,其余作为为common 用。如:在模块1中有段定义: seg1 segment para stack stack seg1 ends 在模块2中有段定义: seg2 segment para stack stack seg2 ends则连接时这两个段被安排在一起。汇编语
14、言源程序的结构汇编语言源程序的结构简化的段定义简化的段定义 在在masm5.0以上的版本以上的版本中中, 提供了简化的段定提供了简化的段定义伪指令,使用指定的内存模式编程。义伪指令,使用指定的内存模式编程。.586.model small.data.stack 100.code.startup.exitend;选择指令系统选择指令系统;内存模式内存模式说明说明;定义;定义数据段数据段;定义;定义堆栈段堆栈段;定义;定义代码段代码段;指示;指示程序开始程序开始,初始化,初始化ds,ss寄存器寄存器;结束程序结束程序,返回操作系统,返回操作系统内存模式内存模式tiny 程序和数据在程序和数据在64k字节段内字节段内small 独立的代码段和独立的数据段独立的代码段和独立的数据段medium 单个数据段,多个代码段单个数据段,多个代码段compac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026安徽省第二人民医院专业技术人员招聘1人考试备考试题及答案解析
- 沙砾填料施工方案(3篇)
- 淤泥基础施工方案(3篇)
- 牛排促销活动策划方案(3篇)
- 白水启动应急预案(3篇)
- 花池刷漆施工方案(3篇)
- 连队防暴应急预案(3篇)
- 铝板墙板施工方案(3篇)
- 2026重庆数字资源集团有限公司招聘人工智能菁英工程师20人考试备考题库及答案解析
- 2026年阳光学院单招职业适应性测试题库及参考答案详解
- (完整版)英语常用词素表
- 5循证医学基础证据 课件
- 华东理工大学分析化学第2章-分析化学中的数据处理及评价课件
- 电厂工程热工专业施工方案
- DB32T 4111-2021 预应力混凝土实心方桩基础技术规程
- 自然灾害情况统计制度解读课件
- xx银行安防监控工程施工方案与维保方案
- 胆囊切除胆总管切开取石护理查房
- 压力管道无损检测通用实用工艺
- 基于MATLAB的数字PID直流电机调速系统
- 五四制新青岛版五年级科学下册第二单元《4我们的脑》课件
评论
0/150
提交评论