




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机原理,电信学院 自动化系 卢伟 ADD:大黑楼B705 TEL:84706161 Email:luwei,计算机原理 2020年6月20日12时21分,2,4.1 概述 4.2 汇编语言源程序的格式 4.3 伪指令操作 4.4 DOS功能调用 4.5 汇编语言程序设计,第四章 汇编语言程序设计,计算机原理 2020年6月20日12时21分,3,机器语言(Machine Language):二进制表示的指令和数据。 汇编语言(Assembly Language): 助记符来编写指令,地址和 数据也可用符号表示。用汇编语言编写的程序必须翻译成机器语言 目标程序(或目标代码)才能执行,这种翻译
2、过程称为汇编。 高级语言:不针对某个具体的计算机,通用性强。但高级语言编 写的源程序同样必须“翻译”成机器语言,计算机才能执行,所用的 系统软件称为编译程序或解释程序。,第四章 汇编语言程序设计,4.1 概述,第四章 汇编语言程序设计,4.1 概述,第四章 汇编语言程序设计,4.1 概述,计算机原理 2020年6月20日12时21分,4,用汇编语言编写源程序,经过汇编程序和连接程序生成目标程序和执行程序。 文件名.ASM 文件名.OBJ 文件名.EXE,汇编语言 源程序,汇编,目标 程序,连接,执行 程序,编辑程序 EDIT.EXE,汇编程序 MASM.EXE,连接程序 LINK.EXE,第四
3、章 汇编语言程序设计,4.1 概述,计算机原理 2020年6月20日12时21分,5,用文本编辑程序编写汇编语言源程序,产生扩展名为.ASM的源文件; 用汇编语言编写的源程序经过汇编程序MASM.EXE自动翻译成目标 程序,产生扩展名为.OBJ的目标文件; 用链接程序LINK.EXE将目标程序链接产生扩展名为.EXE的可执行 程序。 用Debug.EXE进行调试。 编译器可采用Microsoft MASM 或者 Borland TASM,第四章 汇编语言程序设计,4.1 概述,计算机原理 2020年6月20日12时21分,6,汇编程序(MASM.EXE)的主要功能是: 将汇编语言源程序翻译成机
4、器语言; 按程序员指定,分配存储区域(包括程序区,数据区,堆栈区等); 将各种进位制数据转换成二进制数; 把字符转换成ASCII码; 计算出数值表达式的值; 对源程序进行检查,如果有指令错或程序格式错则给出相应提示。,第四章 汇编语言程序设计,4.1 概述,计算机原理 2020年6月20日12时21分,7,在8086/8088汇编语言中,有两类汇编语言指令,一类是执行性指 令,另一类是说明性指令。对执行性指令,汇编程序都为之产生机 器指令代码;而说明性指令的作用仅仅是告诉汇编程序对源程序中 的执行性指令应该如何产生代码,或分配存储区。 1、执行性指令 “执行性指令”又称“指令语句”。这类语句经
5、汇编后总有目标程 序与之对应,按其与汇编后目标程序对应情况又可分为两种类型: 一般性执行性指令和宏指令。执行性指令的功能主要由其对应的目 标程序在运行时来实现。,第四章 汇编语言程序设计,4.1 概述,计算机原理 2020年6月20日12时21分,8,(1)一般性执行指令:这种指令是一条指令对应一条8086/8088的 机器指令,即指令系统中包括的指令。 (2)宏指令:这种指令是由伪操作定义的。宏指令是一般性指令的 扩展。 (3)执行性指令的格式 标号: 前缀 指令助记符 操作数表 ;注释 其中表示根据不同的指令或不同情况可以任选的部分。操作数表 是由逗号分隔开的多个操作数。 标号 代表“:”
6、后指令的存储地址,供JMP,CALL和LOOP等指令 操作使用。除此之外,它还具备一些其他“属性”。,第四章 汇编语言程序设计,4.1 概述,计算机原理 2020年6月20日12时21分,9,前缀 是8086/8088中一些特殊指令,它们同其他指令配合使 用,如“串操作指令”的重复指令REP。 指令助记符 包括8086/8088指令助记符以及用宏定义语句定义 过的宏指令名。 操作数 对8086/8088的一般性执行指令来说,可以是一个或二 个操作数,这时我们称左边的操作数为目标操作数,右边的操作数 为源操作数,对宏指令来说,可能有多个操作数,操作数之间有逗 号隔开。 注释 以“;”开始,用来简
7、要说明该指令在程序中的作用,以提 高程序的可读性。,第四章 汇编语言程序设计,4.1 概述,计算机原理 2020年6月20日12时21分,10,2、说明性指令(伪指令) “说明性指令”又称“指示性语句”。由伪操作符定义,用于程序以 源程序方式同“汇编程序”通信。 程序采用说明性指令表示源程序的起始终止信息、分段情况、 内存结构和变量说明等信息。 说明性指令的功能由汇编程序来完成。说明性指令在汇编时不 产生任何代码。 说明性指令的格式如下: 名字 伪操作指令 操作数表 ;注释 其中“名字”可以是标识符定义的常量名、变量名、过程名、段名 以及结构名*或记录名*等。所谓标识符是由字母、数字、特殊字
8、符(如?或下划线)等组成的字符串。,第四章 汇编语言程序设计,4.1 概述,计算机原理 2020年6月20日12时21分,11,汇编语言源程序的例子,DATA SEGMENT ;定义数据段 DATA1 DB 0F8H,60H, 0ACH,74H,3BH;被加数 DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数 DATA ENDS;数据段结束 CODE SEGMENT;定义代码段 ASSUME CS:CODE,DS:DATA;告诉汇编程序段范围 START: MOV AX,DATA MOV DS,AX ;初始化DS MOV CX,5 ;循环次数送CX MOV SI,0 ;置SI
9、初值为零,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,12,CLC ; 清CF标志 LOOPER:MOV AL,DATA2SI;取一个字节加数 ADC DATA1SI,AL ;与被加数相加 INC SI ;SI加1指向下一字节 DEC CX ;计数器CX减1 JNZ LOOPER ;不等于零,转LOOPER MOV AH,4CH ;系统功能调用,AH=4C INT 21H ; 退出并返回DOS CODE ENDS ;代码段结束 END START;源程序结束,指定起始地址标号,第四
10、章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,13,常用的汇编语言源程序框架: DATA SEGMENT ;定义数据段 VAL1 DB 12H,8EH ;定义变量 DATA ENDS ;数据段结束 STACK SEGMENT STACK STACK ENDS EXTRA SEGMENT EXTRA ENDS,堆栈段,数据段,扩展段,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,14,CODE SEGMENT ;定义代码段 ASSUM
11、E CS:CODE,DS:DATA,ES:EXTRA,SS:STACK ;段属性说明 START: MOV AX,DATA ;初始化DS MOV DS,AX MOV AX,EXTRA ;初始化ES MOV ES,AX MOV AX,STACK ;初始化SS MOV SS,AX MOV AX , 4C00H ;返回DOS INT 21H CODE ENDS ;代码段结束 END START ;源程序结束,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,15,汇编语言的语句 执行/指令性语
12、句:可以产生相应的机器码,与机器指令相对应。 LOOPER: MOV AL,DATASI 指示性语句(伪操作指令):不产生机器码,仅为汇编程序提供汇 编时所需要的信息。 如: datal DW 12abH 该语句将告诉汇编程序data1定义为一个字12abH,汇编程序将为它 分配一个存储器地址,而且把该存储单元与下一个存储单元初始化 为abH和12H。,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,16,宏指令语句 为了书写方便,把一个汇编语句序列用一条指令代替,这种指令 称为宏指令。由宏指令组成的语句称为宏指令语句。在汇编时,凡 是有宏
13、指令的地方将用相应的汇编语句序列取代,所以宏指令可以 产生目标代码。 例如: fun macro x ;x是形式参数 mov ah,x int 21h endm 则 fun为宏指令,使用时直接写成: fun 2 ;其中2是宏参数,汇编时产生: mov ah, 2 int 21h 两条语句,并将它们汇编成目标代码。,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,17,汇编语言语句的格式 指令语句格式 标号:助记符 操作数,操作数;注释 伪指令语句格式 名字 助记符 参数,参数;注释 宏指令语句格式 宏指令名 实参数,实参数 ;注释,第四章
14、汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,18,1、标识符 标识符即标号和名字,标号和名字的区别是标号后面必须跟冒 号,而名字后面没有冒号。一个标号与一条指令的地址的符号名相 联系,即标号是符号地址。 例如上面的示例程序中Start是标号。 名字可以是变量名、段名、过程名等,例如上面的示例程序中 DATA、CODE是段名,Data1、Data2是变量名。,汇编语言中的几个基本概念,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,19,2、保留字 保留字是一个汇编语言中预先保留下来的具有特殊
15、含义的符 号,这些符号不能滥用。 如:SEGMENT ENDS OFFSET SIZE DB DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,20,3、数的表示 常数: 二进(B)、八进(O)、十进(D)和十六进(H)制数,注 意十六进制数若以字母开头,前面要加数字0。缺省情况下是十进 制数,但可用伪指令RADIX n来改变缺省的基数。 字符串常数:用单引号括起来的一个或多个字符组成一个字符串 常数,例如:T
16、he rezult is:在内存中。以字符的ASCII码值存放,注 意一个空格也是一个字符。如The ,在内存中是54H、68H、65H 和20H。,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,21,4、变量 变量是代表存放在某些存储单元的数据。这些数据在程序运行 期间随时可以修改。 变量有三个属性:段属性、偏移属性和类型属性。 变量的定义与预置 定义变量就是给变量分配存储单元,且对该存储单元赋于一个符 号名变量名,同时预置初值。定义变量用数据定义伪指令DB、 DW、DD、DQ、DT等。 例:VAR_DATA SEGMENT data1
17、 DB 12H data2 DW 5678H VAR_DATA ENDS,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,22, 变量的属性 段属性(SEG):表示变量存放在那一个逻辑段中,例如上面定 义的变量名data1和data2存放在VAR_DATA逻辑段中。对它们进行存 取时要先将它们所在段的段基值放在DS中,即执行下面语句: mov ax,VAR_DATA mov ds,ax 段的偏移属性(offset):表示变量在逻辑段中离段起点的字节数 。如上面的data1的偏移量为0,data2的偏移量为1。 变量的段属性和偏移属性构成了变
18、量的逻辑地址。 类型属性(type):表示变量占用存储单元的字节数 DB 1字节,DW 2字节,DD 4字节, DQ 8字节,DT 10字节,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,23, 数据定义伪指令 格式:变量名 伪指令名 表达式1,表达式2, 这里表达式有以下几种情况: 数值表达式 例: DA_BYTE DB 50H,50,0caH DA_WORD DW 0a3f1H,498dH ? 表达式,不带引号的 ?表示可预置任何内容 例: DA_B DB ?,? ;要求分配两个字节单元 DA_W DW ?,? ;要求分配两个字单元
19、字符串表达式 数据项可以写成字符串形式,但只能用DB、DW、DD定义, 而且DW、DD语句定义的串只允许包含两个字符。 参看下面的例子。,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,24,注意:定义多于两个以上字符的字符串时, 只能使用DB伪指令,不能使用DW和DD等伪指令。,例: S1 DB ABCDEF S2 DW AB, CD, EF S3 DD AB, CD 这几个变量在存储器中存放情况如下: S1 41H S2 42H S3 42H 42H 41H 41H 43H 44H 00H 44H 43H 00H 45H 46H 44H
20、 46H 45H 43H 00H 00H,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,25,可以用DW语句把变量或标号的偏移地址存入存储器;也可用DD 语句把变量或标号的段地址和偏移地址都存入存储器,此时低位 字存偏移地址,高位字存段地址,例如:,VAR DW 1234H LABEL:MOV AL, 04H PRV DD VAR PRL DW LABEL PRR DD LABEL ,PRV,PRL,PRR,VAR的偏移地址,VAR的段地址,LABEL的偏移地址,LABEL的偏移地址
21、,LABEL的段地址,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,26, 带DUP表达式,DUP是定义重复数据操作符格式: 变量名 数据定义伪指令 表达式1 DUP(表达式2) 其中表达式1是重复次数,表达式2是重复内容。 例: D_B1 DB 20H DUP(?) ;保留20H个字节 D_B2 DB 10H DUP(ABCD) ;字符串ABCD ;重复10H次 D_W1 DW 10H DUP(4) ;字4重复10H次 ARRAY DB 100 DUP(0,2 DUP(1,2),0,3) ;定义ARRAY700个字节 $符号,表示地址计
22、数器的当前值,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,27,例:ARRAY DW 1,2,$+4,3,4,$+4 如果在汇编时,ARRAY的偏移地址是0074H,则在ARRAY数组 中,两个$+4得到的结果是不同的,这是由于$的值是在不断变化 的。此定义在存储器中的表示如下图所示。 $用在伪操作的参数字段时,和用在指令中的情况是不同的,用 在伪操作中它表示的是地址计数器的当前值。用在指令中它只表示 该指令的首地址,而与$本身所在的字节无关。 例如 指令 JNE $+6 表示满足条件时转移到该指令的首地址加6以后所在的单元。 1000
23、:2543 JNE $+6 则转移地址是2549H.,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,28,01H,00H,03H,00H,04H,00H,82H,00H,ARRAY,00H,02H,00H,7CH,01H,ARRAY,00H,01H,ARRAY,02H,00H,01H,ARRAY,00H,02H,00H,01H,ARRAY,7CH,00H,02H,00H,01H,ARRAY,00H,7CH,00H,02H,00H,01H,ARRAY,03H,00H,7CH,00H,02H,00H,01H,ARRAY,00H,03H,00H
24、,7CH,00H,02H,00H,01H,ARRAY,04H,00H,03H,00H,7CH,00H,02H,00H,01H,ARRAY,00H,04H,00H,03H,00H,7CH,00H,02H,00H,01H,ARRAY,82H,00H,04H,00H,03H,00H,7CH,00H,02H,00H,01H,ARRAY,00H,82H,00H,04H,00H,03H,00H,7CH,00H,02H,00H,01H,ARRAY,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,29,例4-1:下面的数据段定义,COUNT 表示什么? D
25、ATA SEGMENT BUF DB 0123456789ABCD COUNT EQU $ - BUF DATA ENDS 这里,COUNT的值就是数据区的长度,所以COUNT=14 5、标号 标号是一条指令的目标代码的符号地址,它常用作转移指令(或 子程序调用指令)的操作数。 标号有三个属性:段属性、偏移属性和类型属性。 段属性是该标号的段地址,偏移属性是该标号的偏移地址,类 型属性是表示该标号的范围是本段(NEAR)或段间(FAR),或称 为近或远属性。,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,30,6、表达式和运算符 表达式由
26、常数、操作数、操作符和运算符组成。有六种运算 符,即算术运算符、逻辑运算符和关系运算符、分析运算符、综 合运算符和分离运算符。 1、算术运算符 +、*、/、MOD(取余)、SHL(左移)、SHR(右移) 例: 32 MOD 5 ;结果为2 MOV DX,BLOCK+(6-1)*2 2、逻辑运算符(按位操作) AND (与) OR (或) XOR (异或) NOT (非) 例: IN AL,Port_VAL OUT Port_VAL AND OFEH,AL,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,31,3、关系运算符 关系运算是逻辑判
27、定,当为真时结果为全1(0FFFFH),为假时结 果为全0。 EQ (等于) ;若PP=25,则25 EQ PP = 0FFFFH NE (不等于);25 NE PP = 0 LT (小于) ;25 LT 26 = 0FFFFH LE (小于等于) ;25 LE PP = 0FFFFH GT (大于) ; 26 GT PP = 0FFFFH GE (大于等于) ; 24 GE PP = 0 关系运算符一般不单独使用,常与其它运算符结合使用。 例如: ADD AX,(port GT 60)AND 50)OR(port LE 60)AND 70) 当port 的值60时,上述指令汇编为ADD AX
28、,50 当port 的值60时,上述指令汇编为ADD AX,70,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,32,4、分析运算符 把存储器地址操作数分解成它的组成部分。 SEG (求段地址), 格式: SEG 符号名 OFFSET(求偏移地址),格式: OFFSET 符号名 TYPE (求符号名类型值),格式:TYPE 符号名 SIZE 求为符号名分配的字节数 格式: SIZE 符号名 回送分配给该符号名的字节数,但此值是LENGTH的值和TYPE 的值的乘积。,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 20
29、20年6月20日12时21分,33,LENGTH,求为符号名分配的项数。 格式: LENGTH 符号名 这里为符号名定义的数据项必须是用重复格式DUP()定义的。 而对于其他情况则回送1。 例 : K2 DW 10 DUP (?) 则 LENGTH K2 = 10 TYPE K2 = 2 SIZE K2 = 20 例: AARR DW 2,4,6 则 LENGTH AARR = 1, TYPE AARR = 2 SIZE AARR = 2 可以看出: SIZE=(LENGTH)*(TYPE符号名),第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时2
30、1分,34,5、综合运算符 定义符号名为新类型/类型属性操作符 格式: 类型 PTR 符号名 PTR的功能归纳如下: 保证运算时操作数类型的匹配 例: F1 DB 16H,38H F2 DW 1234H,26ABH MOV AX,WORD PTR F1 ;AX=3816H MOV BL,BYTE PTR F2 ;BL=34H,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,35, 通过PTR指明是字单元还是字节单元 例: MOV BYTE PTR BX,10H;BX为字节单元 MOV WORD PTR SI,20H;SI为字单元 用PTR来
31、改变距离属性 例: JMP FAR PTR LLOOP CALL DWORD PTR BX 指定新类型 格式: 符号名 EQU THIS 类型 例:LABC EQU THIS BYTE ;LABC是字节类型 LABD DW 4321H, 2255H ;LABD是字类型 MOV AL , LABC ;AL = 21H MOV AX , LABD ;AX = 4321H,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,36,6、分离运算符 取低字节 格式:LOW 符号名 取高字节 格式:HIGH 符号名 例:设SSY=2050H mov al,
32、 LOW 3080H ; al = 80H mov ah, HIGH SSY ; ah = 20H mov cl, LOW 3a4bH ; cl = 4bH 7、专用运算符 8、其它运算符 如果需要,请参考相关的参考书。 9、汇编运算符的优先级,第四章 汇编语言程序设计,4.2 汇编语言源程序的格式,计算机原理 2020年6月20日12时21分,37,4.3 伪指令操作,伪指令没有对应的机器指令,不是由CPU执行,而是由汇编程 序识别,并完成相应的功能。伪指令越多,应用越方便,MASM86 的伪指令可分为14类。 1、符号定义伪指令 符号名 EQU 表达式 符号名 = 表达式 例 : port
33、1 EQU 78 port2 EQU port1+2 counter EQU cx ;定义为寄存器 cbd EQU DAA ;定义为助记符 A = 6 A = A+2,第四章 汇编语言程序设计,4.3 伪指令操作,第四章 汇编语言程序设计,4.3 伪指令操作,计算机原理 2020年6月20日12时21分,38,= 和 EQU的区别是用=定义的符号名在同一程序中可以重复定 义,而用EQU定义的符号名在同一程序中不允许重复定义。 EQU与特殊运算符PTR或THIS连用,可以给变量或标号定义新 的类型属性并重新命名,但其段属性和偏移属性不变。,例:某一程序段中有以下几条伪指令语句,试分析个变量的属性
34、。 DATA SEGMENT DDBUF EQU THIS DWORD BUF DB 100 DUP(?) DWBUF EQU WORD PTR BUF DATA ENDS FIRST EQU THIS FAR;定义远标号,其段属性和偏移 LEA SI,BUF;属性与紧跟其后指令的存储地址相同 DDBUF,BUF,DWBUF分别是双字类型、字节类型和字类型,它们为同一数据区的 首址。,第四章 汇编语言程序设计,4.3 伪指令操作,计算机原理 2020年6月20日12时21分,39,2、内存数据定义伪指令 DB 定义字节(前面已讲过定义方法) DW 定义字(2字节) DD 定义双字(4字节) D
35、Q 定义8字节 DT 定义10字节 3、段定义伪指令 段名 SEGMENT 定位方式 连接方式 类别名 段名 ENDS 定位方式 PAGE 指定起始地址的低8位是0 PARA 指定起始地址的低4位是0(隐含) WORD 指定起始地址的最低位是0 BYTE 指定起始地址是任意值,第四章 汇编语言程序设计,4.3 伪指令操作,计算机原理 2020年6月20日12时21分,40, 连接方式(组合类型) 组合类型告诉连接程序本段与其它段的关系。有NONE, PUBLIC,COMMON,STACK,MEMORY和AT6种。 缺省下是NONE,表示本段与其他段逻辑上不发生关系。STACK 则指定该段在运行
36、时为堆栈段的一部分。(参看相关参考书)。 类别名 类别名是用单引号括起来的字符串,连接程序只使同类别的段 发生关联。 4、段寄存器说明伪指令 ASSUME 段寄存器:段定义名1,段寄存器:段定义名2, 例:ASSUME CS:CODE, DS:DATA, ES:DATA,SS:STACK,第四章 汇编语言程序设计,4.3 伪指令操作,计算机原理 2020年6月20日12时21分,41,5、过程(子程序)定义伪指令 过程名 PROC NEAR或FAR; NEAR可省略 过程名 ENDP 调用过程的格式为: CALL 过程名 过程返回 RET ;段内返回 RETF ;段间返回,第四章 汇编语言程序
37、设计,4.3 伪指令操作,计算机原理 2020年6月20日12时21分,42,6、定位伪指令 格式: ORG 表达式 这里表达式是一个无符号数,表示以下的程序或数据的开始地址。 例4-2:下面程序段,指出变量BUF和NUM的偏移地址为多少?,DATA SEGMENT ORG 10 BUF DB ABCD ORG $+5 NUM DW 50 DATA ENDS 变量BUF的偏移地址为10;变量NUM的偏移地址为19,第四章 汇编语言程序设计,4.3 伪指令操作,计算机原理 2020年6月20日12时21分,43,7、对准伪操作 格式:EVEN ;使下一个字节地址成为偶数。 8、基数控制伪操作指令
38、 格式:RADIX 表达式 该表达式表示进制的基数值(2-16),注意用十进制表示,其它类型的伪指令及宏指令,请参看相关的参考书。,第四章 汇编语言程序设计,4.3 伪指令操作,计算机原理 2020年6月20日12时21分,44,通常把DOS提供的INT 21H中断服务程序称为DOS功能调用,调 用时根据AH的值来选择子功能。 AH=1 键盘键入并回显, 输入字符的ASCII码在AL中返回 例: MOV AH, 1 INT 21H AH=2 显示输出字符,输出字符的ASCII码放入DL中 例: MOV AH, 2 MOV DL,A INT 21H,AH=7 键盘输入无回显,输入字符的ASCII
39、码在AL中返回 例: MOV AH, 7 INT 21H,第四章 汇编语言程序设计,4.4 DOS功能调用,第四章 汇编语言程序设计,4.4 DOS功能调用,计算机原理 2020年6月20日12时21分,45,AH=9 显示字符串,字符串以$结束,开始位置用DS:DX指示 例: MOV AX, MY_DATA MOV DS, AX LEA DX, String MOV AH, 9 INT 21H AH=4C 程序运行结束,返回操作系统,返回码由AL给出 例: MOV AX, 4C00H INT 21H,第四章 汇编语言程序设计,4.4 DOS功能调用,计算机原理 2020年6月20日12时21
40、分,46,1、程序编制及调试 汇编语言源程序的编制 编辑环境:EDIT、ULTRAEDIT、NOTEPAD等。 存盘形式:ASCII形式 注意:编辑好的源程序必须以扩展名.ASM来命名。 汇编源程序的编译 将汇编源程序转换成目标(OBJ)文件 编译器:MICROSOFT MASM5.0+、BROLAND TASM2.0+ 存盘形式:Binary形式 注意:编译完成后生成扩展名为.OBJ的目标文件。如果源程序 有语法错误,则给出相应的错误提示及错误代码。 连接 将一个目标文件或者多个目标文件连接(再定位)生成可执行文件。,第四章 汇编语言程序设计,4.5 汇编语言程序设计,第四章 汇编语言程序设
41、计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,47,连接器:MICROSOFT LINK5.0+、BROLAND TLINK2.0+ 存盘形式:Binary形式 .COM文件与.EXE文件的区别 1、.COM文件是内存映像文件,执行时直接装入内存即可执行。其中 代码段、数据段、堆栈段等的段地址完全相同。一般程序长度小于64KB。装入执行速度相对较快。 2、.EXE文件不是内存映像文件,执行时需要把代码段、数据段、堆栈段等重新定位,然后才能够执行。程序长度可以大于64KB。装入执行速度相对较慢。 3、不论是.COM文件还是.EXE文件装入内存时都产生一个PSP(程序
42、前缀段),里面是程序运行的一些基本信息,存放在程序的开始位置0-FFH,PSP的长度是256Byte。,调试 调试工具:DEBUG、TDEBUG。,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,48,常用的汇编语言程序框架: DATA SEGMENT ;定义数据段 VAL1 DB 12H , 8EH ;定义变量 DATA ENDS ;数据段结束 STACK SEGMENT STACK STACK ENDS EXTRA SEGMENT EXTRA ENDS CODE SEGMENT ;定义代码段 ASSUME CS:CODE ,DS:DATA,
43、ES:EXTRA,SS:STACK ;段属性说明 START: MOV AX,DATA ;初始化DS MOV DS,AX MOV AX,EXTRA ;初始化ES MOV ES,AX MOV AX,STACK ;初始化SS MOV SS,AX ,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,49,MOV AX , 4C00H ;返回DOS INT 21H CODE ENDS ;代码段结束 END START ;源程序结束,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,50,2、开发调试例程 例
44、4-2 编写一个.EXE文件,显示Hello!并响铃 (Test1.asm) Data segment ;定义数据段 string db Hello!, 7, $ Data ends Stack segment stack ;定义堆栈段 db 256 dup(0) Stack ends Code segment ;代码段开始 assume cs: Code, ds: Data, ss: Stack Start:mov ax, data mov ds, ax lea dx, string ;取String的有效地址 mov ah,09h int 21h ;调用dos的09号功能 mov ah,4
45、c int 21h ;退出 code ends end start,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,51,将程序存盘为Test1.asm d: masm Test1 ;编译程序,不需加 .asm 扩展名 d: link Test1 ;连接程序,不需加 .obj 扩展名,编译时,当执行 d: masm Test1时,屏幕会出现 Object filename Test1.OBJ: Source listing NUL.LST: Cross-reference NUL.CRF: 如果有语法错误,则还会出现类似的错误提示: Test1
46、.ASM(18):error A2056: Immediate mode illegal 编译输入为.ASM文件,输出有三个文件: .OBJ,二进制目标文件 .LST,列表文件,该文件列出源程序和机器码清单,并给出符号表,以便调试。该文件可有可无。 .CRF,用于产生交叉引用表,给出用户定义的所有符号及所在行号。该文件可有可无。,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,52,例2 编写一个.COM文件 code segment assume cs:code,ds:code,ss:code,es:code org 100h ;伪指令, 表
47、示下面代码的偏移地 main proc far ;址从100h处开始 lea dx, string mov ah, 09h int 21h mov ax, 4c00h int 21h main endp string db Hello!,7,$ ;数据定义 code ends end main,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,53,DEBUG调试命令介绍 DEBUG软件是DOS系统下的汇编语言调试分析工具,在DOS下 执行DEBUG.EXE出现提示符-,进入到DEBUG调试环境。默认条 件为: 默认使用十六进制数据,并且不用加后
48、缀H; 地址一般由段地址和偏移量组成,若在命令中不指明段地址, 默认使用DS中的段地址。 进入DEBUG后,可按Q键退出,或按?查看帮助。,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,54,命令介绍 汇编命令 A (Assemble) 一般用法: A ;从当前地址输入汇编源程序 A 地址 ;从指定位置输入汇编程序 反汇编命令 U (Unassemble) 一般用法: -U ;从当前位置将机器码反汇编成源程序 -U 地址 ;从指定位置将机器码反汇编成源程序 -U 地址1 地址2;按照指定位置将机器码反汇编 ;成源程序,地址1为开始位置, ;地
49、址2为结束位置,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,55,Debug环境下执行汇编命令A所见画面,Debug环境下执行反汇编命令U所见画面,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,56,显示内存命令 D (Display) -D ;从当前位置开始显示128个字节的内容 -D 地址 ;从指定位置开始显示128个字节的内容 -D 地址1 地址2 ;功能同上,地址1为起始地址, ;地址2为结束地址 修改内存单元命令 E (Editor) -E 地址 ;显示指定内存单元的内容,并修改
50、 -E 地址 数据 ;修改指定地址的内存单元的内容, ;多个数据可以用空格隔开,用回车 ;完成修改 例: -e 100 Hello 7 $ ;单引号表示输入ASCII码,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,57,Debug环境下执行显示内存命令d后所见画面,Debug环境下执行显示寄存器命令r后所见画面,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,58,显示和修改寄存器命令 R (Register) -R ;显示所有寄存器的内容 -R 寄存器名 ;显示并修改指定寄存器的内容 在D
51、EBUG环境中用一些符号表示标志位,说明如下: 标志 逻辑真 逻辑假 标志 逻辑真 逻辑假 OF OV NV AF AC NA DF DN UP PF PE PO IF EI DI CF CY NC SF NG PL 没有TF:跟踪单步标志 ZF ZR NZ,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,59,执行命令 G (Go) -G ;从当前IP指示的地址开始执行程序 -G=起始地址 ;从指定的地址开始执行程序 -G=起始地址 断点地址 ;从指定的地址开始执行程序,并 ;执行到断点处暂停 单步执行指令 T和P T:跟踪进入子程序 P:不
52、跟踪进入子程序 一般用法: -T ;执行一条指令 -T n ;执行n条指令 其他指令:N(定义名字) W(写磁盘) L(从磁盘装入) 退出命令:Q ;退出DEBUG,返回DOS,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,60,在debug环境下编制汇编程序 写汇编程序 MOV DX, 10C MOV AH, 9;显示字符串,DS:DX=串地址 ;$=结束符 INT 21 ; DOS功能调用 MOV AH, 4C ;带返回码结束,AL=返回码 INT 21 写数据 -E 10C Hello!7$ 运行程序 -G=100 取程序名字 -N T
53、 ;默认存放在当前目录,设置程序长度 -R BX ;设置程序长度 : 0 ;64K的倍数 -R CX ;设置程序长度 :20 ;字节数,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,61,写入磁盘: -W ;存盘,若未指定地址则从CS:0100H开始, ;要写入的文件字节数应先放入BX和CX中 执行: -G=100 或 退出DEBUG后, 在DOS下执行T 装入程序: -N T -L;把文件装入存储器,若未指定地址,则数据从CS:0100H开始,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,
54、62,1、顺序结构程序设计,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,63,例4.3 从键盘输入一个小写字母,转换成大写字母输出。 分析: AH=1, int 21h 从键盘输入一个字符并回显 AH=2, int 21h 输出一个字符,输出字符的ASCII码放在DL中 字符 ASCII码 a - z 61h 7Ah A Z 41h 5Ah ;4_3.asm Data Segment string1 db Please input ( a z ): $ string2 db 0dh,0ah,The result is: $ Data End
55、s,Stack segment stack db 256 dup(?) Stack Ends Code Segment assume cs:code,ss:stack,ds: data main proc far start: mov ax,data,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,64,mov ds, ax lea dx, string1 mov ah, 9 ;显示提示符1 int 21h mov ah, 1 ;输入小写字符 int 21h,sub al, 20h push ax lea dx, string2 mov ah,
56、 9 ;显示提示符2 int 21h pop ax mov ah, 2 ;输出大写字符 mov dl, al int 21h mov ax,4c00h int 21h ;返回DOS main endp code ends end start,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,65,例4.4 在数据段中存放两个32位二进制无符号数DATA1和DATA2,编制一程 序计算两数之和,结果存于RESULT单元中。 分析: ;4_4.asm data segment data1 dd 1565764587 data2 dd 1293773646 result dd ? data ends stack segment stack dw 128 dup(0) stack ends,第四章 汇编语言程序设计,4.5 汇编语言程序设计,计算机原理 2020年6月20日12时21分,66,code segment as
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辅仁高中数学试卷
- 福建8年级下数学试卷
- 定南中学高考数学试卷
- 福建龙岩中学生数学试卷
- 复旦大学招生数学试卷
- 肝功能不全的急诊抢救措施
- 2025至2030唇蜜行业市场深度研究与战略咨询分析报告
- 基础心理学:了解人类行为与心理的基本原理
- 2025至2030乘用车语音识别行业市场深度研究与战略咨询分析报告
- 北京省考2024行测真题及答案
- GA/T 2182-2024信息安全技术关键信息基础设施安全测评要求
- 培训物业客服部礼仪礼节
- 北京海淀区一零一中学2025年八年级英语第二学期期末复习检测模拟试题含答案
- 2025年广东省高考生物试题(含答案解析)
- 院感知识手卫生培训内容
- 章程规范业务管理制度
- 2025年新疆中考数学试卷真题
- QGDW11914-2018电力监控系统网络安全监测装置技术规范
- 新生儿洗澡及皮肤护理
- 保鲜库建设项目可行性研究报告(可编辑)
- 餐饮废弃物管理制度
评论
0/150
提交评论