计算机原理:第三章 汇编语言程序设计1of3_第1页
计算机原理:第三章 汇编语言程序设计1of3_第2页
计算机原理:第三章 汇编语言程序设计1of3_第3页
计算机原理:第三章 汇编语言程序设计1of3_第4页
计算机原理:第三章 汇编语言程序设计1of3_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 1第三章 汇编语言程序设计 3.1概述 机器语言面向硬件,高级语言面向编程员。汇编语言是最接近机器语言的高级语言。用汇编语言编写的程序称汇编语言源程序。源程序要经过汇编、连接、加载成可执行程序。任何可执行程序可反汇编成汇编语言源程序汇编语言源程序汇编(MASM)机器码LINK可执行程序 2希望汇编具有的功能1. 一个程序可用多个文件写成2. 存储器地址用一个名字替代且明确类型3.同一地址可具有不同类型且分别以不同名字区别4.能对给出的表达式进行计算5.具有宏功能。 3汇编语言源程序格式(实验指示书P11)NAME MY_PROGRAMDATA SEGMENTBUFFER1 DB 0,1,2,

2、3,4,5,6,7,8,9,10,11,12DB 13,14,15BUFFER2 DB 10H DUP(0) MESS DB HAVE DONE,0DH,0AH,$ DATA ENDSSTACK SEGMENT STACK;自动安装堆栈段 DB 100 DUP ( ? );堆栈深度100BSTACK ENDS 逻辑数据段逻辑堆栈段 4 CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX ;建立数据段 MOV ES,AX ;数据段,附加数据段重合 LEA SI,BUFFER1;源指针 L

3、EA DI,BUFFER2;目标指针 MOV CX,10H ;计数器NEXT: MOV AL,SI ;取源数据 MOV DI, AL ;存到目标逻辑代码段 5 INC SI ;修改源指针 INC DI ;修改目标指针 DEC CX ;计数减 1 JNZ NEXT ;重复传16字节 LEA DX,MESS MOV AH,9 INT 21H MOV AH,4CH INT 21HCODE ENDSEND START ; 汇编结束,第一句执行的语句 ; START逻辑代码段(续);显示提示信息;返回操作系统 6 一、纵向分成若干逻辑段,段数不限逻辑段 组装成可执行程序的物理段(4个)二、横向分四个域:

4、名字 操作符 操作数 ;注释(一)名字由字母、数字等组成(但不能以数字开头)。1. 例如 段名、过程名、模块名、 变量名、标号名等名字经常表示符号地址,主要是变量、标号 7变量(内存变量)定义在数据段(或附加数据段)的名字。 有两方面属性:地址 (段基址和偏移地址)内容类型 (字节1/字2/双字4)(运算符TYPE)。在汇编操作时对变量引用地址,在执行指令时对变量引用内容。变量一般都按定义的类型引用。DT DB 89H, 12H, 56H MOV AH, DT ; 即为 MOV AH, #; 为直接寻址, 其# 为DT的偏移地址; AH 89H 8标号:(程序标号)定义在程序段(加冒号:)的名

5、字。代表一条指令(首字节)的地址。有两方面属性:地址属性(段基址和偏移地址)。类型属性(远2/近1)。标号在程序中一般可理解成地址。和标号类似的还有过程名:过程名代表一个完整子程序的第一条可执行指令的地址(入口)。 91. 指令助记符:在汇编时变成指令的操作码在执行程序时完成( 二)操作符(必有)由指令助记符等构成的操作和操作码一一对应2. 伪指令(伪操作):指示性操作 指示MASM和LINK程序工作在汇编和连接过程中完成伪指令的操作符本身无机器码对应 103. 宏指令助记符宏指令本身不是CPU原有的指令,用户提前将一段程序(多条指令、伪指令)定义成一条宏指令在源程序中将它当一般指令一样调用,

6、在汇编时展开成 原定义的各条指令的机器码。执行程序时逐条指令完成 。 11(三)操作数(非必须) 基本操作数,或基本操作数再加上运算符构成的表达式。0个、1个或多个,用逗号分隔。用分号引出的说明语句,不被汇编处理。建议开始不要用汉字写注释,以免输入了汉字的标点,汇编时出错。(四)注释 (非必须) 123.2 操作数1. 常数:允许用多种不同数制输入,但汇编后都要变成二进制: 0FFH 1111 1111B 0AH 0000 1010B输入多位BCD数需装扮成 二进制或十六进制20 0001 0100B= 14H20H 0010 0000B 后者按BCD理解是十进制的20。 字符(包括串)汇编成

7、其 ASCII码 A 41H汇编成 13 MOVSI, 0100H MOV DI, 0114H CLC; (CF) 0 MOV CL, 10 N1: MOVAL, SI MOVBL, 10SI ADC AL, BL DAA MOVDI, AL INCSI INCDI DECCL JNZN1 142. 寄存器:执行指令时引用寄存器的内容例如: IN AL , 40H ADD AL , 3 ;AL内容加3伪指令和汇编运算不能引用寄存器的内容。例如: DT1 DB AL MOV BL, AL1都不行!因为伪指令在汇编时完成,汇编时某寄存器的内容和用户程序执行到这一句时的内容是两回事。 153. 标号

8、:用于表示JMP / CALL / LOOP等的目标4. 变量:汇编时只能取地址(不能取内容)DATA SEGMENTDT1 DB 9,8DATA ENDS .CODESEGMENT . MOV AL,DT1 ;汇编后是直接寻址 MOV AL , DT1+1 ; 汇编时取地址+1,即等于DT1下一个单元的地址标号和变量合称存储器操作数,有地址、内容两方面的属性:汇编时取地址;执行指令时才能取内容 165. 运算表达式基本操作数再加上运算符 算术运算: + , - , * , / , MOD , SHL , SHR 逻辑运算: AND , OR , XOR , NOT 关系运算: EQ , NE

9、 , LT , LE , GT , GE关系运算的结果:为假 = 0 为真 = -1(汇编中)最后以补码赋给reg / mem ( FFH / FFFFH 等) 17 分析运算(提取内存操作数的属性) OFFSET 提取内存操作数的偏移地址 SEG 提取内存操作数的段基址 TYPE 提取内存操作数的类型 LENGTH 取用DUP定义的变量元素的个数 SIZE 取用DUP定义的变量所占字节数 18 指定内存操作数的类型 PTR 指定临时类型(仅当前语句有效)例:DT1 DB 0FFH,3H INC DT1 INC WORD PTR DT1 ; 3FFH+1 = 400H ; 执行后即有,(DT1

10、)=0, (DT1+1)=4 ; 但这一句之外DT1仍是字节类型; 该指令执行后,; 仅(DT1)=0,(DT1+1)不变 19 THIS 指定多重类型ARWDW 1340H MOVAX , ARW ; AX=1340HMOVBL , ARB ; BL=40H可以反复用这两个名字,以这两种不同类型读写这一共同的内存区域ARBEQU THISBYTE各种运算符的优先级表P 127 表3.2; 不同的名字占用共同的内存兼有不同的类型; 此处THIS与; 伪操作符EQU; 组合完成指定 20多重指定类型举例Hex-table DB 012345678 DB 9ABCDEF .MOV AL, Hex-

11、table ; AL 30H内存变量-MOV AX, Wrd-table ; AX 3130HWrd-table EQU THIS WORDWrd-table内存变量 213.3 伪操作符(伪指令)伪操作符在汇编过程中完成,本身无操作码1.变量定义类功能:定义类型:DB、DW、DD 分配存储器:确定所用存储器 赋予变量初值 DATA DB 100, 0FFH 变量名字 伪操作符 操作数(初值) 22(1) 基本变量定义DB:定义字节类型变量 DT1DB1,7 DT2DB ADF一个变量内含多个字节的元素,多字节顺序排列地址连续。用途:定义字节类型数值。 定义字符串(ASCII码)变量名3个元素

12、 01H 07H 41H 44H 46H DT1DT11 DT2DT21 上一个 数据段DT22 23一个变量内可以包含多个相同类型的元素,元素的类型称TYPE 字节1、字2、双字4.元素的个数称LENGTH变量的总字节数称SIZE SIZE LENGTH TYPE变量名始终指向第一个元素,变量名1、2是偏移地址加,相加后还是地址,既不是元素内容加也不是元素下标的加。例如上页中:MOV AL , DT11 ; AL7,而不是2MOV AL , DT21 ; AL44H,而不是42H 24DB的用途1.定义单字节类型数值 源程序中可写不同进制,汇编后全变为二进制, 多个数值用逗号分隔,顺序存放2

13、.定义字符串 尤其是提示信息 25存储器操作数的引用汇编时只能取存储器操作数地址,汇编运算中对存储器操作数的运算也是地址运算,运算结果一般还是地址。汇编时不能取存储器操作数内容,执行指令时才能取其内容。DT1 DB 9,8 . MOV AL , DT1+1 ; 汇编时取地址+1, ; 执行指令时才能取其内容:AL8 26多重指定类型及地址运算举例Hex-table DB 012345678 DB 9ABCDEF .MOV AL, Hex-table + 10 ; AL 41H-MOV AX, Wrd-table + 10 ; AX 4241HWrd-table EQU THIS WORD Wrd-table Wrd-table+1 27DW:定义字类型变量 以字为单位定义,在存储器中低字节数放在地址较小单元、高字节数放在地址加1单元。反序排列!DT1 DW 5DT2 DW AB DW DT1DT1的偏移地址是0001050042H41H0100DT1DT11DT2DT21上一个地址DT2200010203040506DT23 28DW的用途1.定义双字节类型数值 多个字顺序排列、字内高低字节反序排列 立即数高位的零可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论