资源描述
Dalian University of Technology计算机原理 电信学院 自动化系 卢伟ADD:大黑楼B705 TEL:84706161 Email: 计算机原理 2021年5月3日21时10分2 4.1 概述4.2 汇编语言源程序的格式4.3 伪指令操作4.4 DOS功能调用4.5 汇编语言程序设计 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分3 机器语言(Machine Language):二进制表示的指令和数据。汇编语言(Assembly Language): 助记符来编写指令,地址和数据也可用符号表示。用汇编语言编写的程序必须翻译成机器语言目标程序(或目标代码)才能执行,这种翻译过程称为汇编。高级语言:不针对某个具体的计算机,通用性强。但高级语言编写的源程序同样必须“翻译”成机器语言,计算机才能执行,所用的系统软件称为编译程序或解释程序。第 四 章 汇 编 语 言 程 序 设 计第 四 章 汇 编 语 言 程 序 设 计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分4 用汇编语言编写源程序,经过汇编程序和连接程序生成目标程序和执行程序。 文件名.ASM 文件名.OBJ 文件名.EXE汇 编 语 言源 程 序 汇 编 目 标程 序 连 接 执 行程 序编 辑 程 序EDIT.EXE 汇 编 程 序MASM.EXE 连 接 程 序LINK.EXE第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分5 用文本编辑程序编写汇编语言源程序,产生扩展名为.ASM的源文件;用汇编语言编写的源程序经过汇编程序MASM.EXE自动翻译成目标程序,产生扩展名为.OBJ的目标文件;用链接程序LINK.EXE将目标程序链接产生扩展名为.EXE的可执行程序。用Debug.EXE进行调试。编译器可采用Microsoft MASM 或者 Borland TASM第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分6 汇编程序(MASM.EXE)的主要功能是:将汇编语言源程序翻译成机器语言;按程序员指定,分配存储区域(包括程序区,数据区,堆栈区等);将各种进位制数据转换成二进制数;把字符转换成ASCII码;计算出数值表达式的值;对源程序进行检查,如果有指令错或程序格式错则给出相应提示。 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分7 在8086/8088汇编语言中,有两类汇编语言指令,一类是执行性指令,另一类是说明性指令。对执行性指令,汇编程序都为之产生机器指令代码;而说明性指令的作用仅仅是告诉汇编程序对源程序中的执行性指令应该如何产生代码,或分配存储区。1、执行性指令 “执行性指令”又称“指令语句”。这类语句经汇编后总有目标程序与之对应,按其与汇编后目标程序对应情况又可分为两种类型:一般性执行性指令和宏指令。执行性指令的功能主要由其对应的目标程序在运行时来实现。 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分8 (1)一般性执行指令:这种指令是一条指令对应一条8086/8088的机器指令,即指令系统中包括的指令。(2)宏指令:这种指令是由伪操作定义的。宏指令是一般性指令的扩展。(3)执行性指令的格式 标号: 前缀 指令助记符 操作数表 ;注释其中表示根据不同的指令或不同情况可以任选的部分。操作数表是由逗号分隔开的多个操作数。标号 代表“:”后指令的存储地址,供JMP,CALL和LOOP等指令操作使用。除此之外,它还具备一些其他“属性”。第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分9 前缀 是8086/8088中一些特殊指令,它们同其他指令配合使用,如“串操作指令”的重复指令REP。指令助记符 包括8086/8088指令助记符以及用宏定义语句定义过的宏指令名。操作数 对8086/8088的一般性执行指令来说,可以是一个或二个操作数,这时我们称左边的操作数为目标操作数,右边的操作数为源操作数,对宏指令来说,可能有多个操作数,操作数之间有逗号隔开。注释 以“;”开始,用来简要说明该指令在程序中的作用,以提高程序的可读性。第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分10 2、说明性指令(伪指令) “说明性指令”又称“指示性语句”。由伪操作符定义,用于程序以源程序方式同“汇编程序”通信。 程序采用说明性指令表示源程序的起始终止信息、分段情况、内存结构和变量说明等信息。 说明性指令的功能由汇编程序来完成。说明性指令在汇编时不产生任何代码。 说明性指令的格式如下: 名字 伪操作指令 操作数表 ;注释 其中“名字”可以是标识符定义的常量名、变量名、过程名、段名以及结构名*或记录名*等。所谓标识符是由字母、数字、特殊字 符(如?或下划线)等组成的字符串。 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分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初 值 为 零第 四 章 汇 编 语 言 程 序 设 计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分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; 源 程 序 结 束 , 指 定 起 始 地 址 标 号第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分13 常用的汇编语言源程序框架: DATA SEGMENT;定义数据段 VAL1 DB 12H,8EH ;定义变量 DATA ENDS ;数据段结束 STACK SEGMENT STACK STACK ENDS EXTRA SEGMENT EXTRA ENDS 堆 栈 段数 据 段扩 展 段第 四 章 汇 编 语 言 程 序 设 计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分14 CODE SEGMENT; 定 义 代 码 段 ASSUME 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 21HCODE ENDS ; 代 码 段 结 束END START; 源 程 序 结 束第 四 章 汇 编 语 言 程 序 设 计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分15 汇编语言的语句执行/指令性语句:可以产生相应的机器码,与机器指令相对应。 LOOPER: MOV AL,DATASI指示性语句(伪操作指令):不产生机器码,仅为汇编程序提供汇编时所需要的信息。如: datal DW 12abH该语句将告诉汇编程序data1定义为一个字12abH,汇编程序将为它分配一个存储器地址,而且把该存储单元与下一个存储单元初始化为abH和12H。第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分16 宏指令语句 为了书写方便,把一个汇编语句序列用一条指令代替,这种指令称为宏指令。由宏指令组成的语句称为宏指令语句。在汇编时,凡是有宏指令的地方将用相应的汇编语句序列取代,所以宏指令可以产生目标代码。例如: fun macro x ;x是形式参数 mov ah,x int 21h endm则 fun为宏指令,使用时直接写成: fun 2 ;其中2是宏参数,汇编时产生: mov ah, 2 int 21h 两条语句,并将它们汇编成目标代码。 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分17 汇编语言语句的格式 指令语句格式 标号:助记符 操作数,操作数;注释 伪指令语句格式 名字 助记符 参数,参数;注释 宏指令语句格式 宏指令名 实参数,实参数 ;注释第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分18 1、标识符 标识符即标号和名字,标号和名字的区别是标号后面必须跟冒号,而名字后面没有冒号。一个标号与一条指令的地址的符号名相联系,即标号是符号地址。 例如上面的示例程序中Start是标号。 名字可以是变量名、段名、过程名等,例如上面的示例程序中DATA、CODE是段名,Data1、Data2是变量名。汇编语言中的几个基本概念第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分19 2、保留字 保留字是一个汇编语言中预先保留下来的具有特殊含义的符号,这些符号不能滥用。 如:SEGMENT ENDS OFFSET SIZE DB DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分20 3、数的表示 常数: 二进(B)、八进(O)、十进(D)和十六进(H)制数,注意十六进制数若以字母开头,前面要加数字0。缺省情况下是十进制数,但可用伪指令RADIX n来改变缺省的基数。字符串常数:用单引号括起来的一个或多个字符组成一个字符串常数,例如:The rezult is:在内存中。以字符的ASCII码值存放,注意一个空格也是一个字符。如The ,在内存中是54H、68H、65H和20H。 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分21 4、变量 变量是代表存放在某些存储单元的数据。这些数据在程序运行期间随时可以修改。 变量有三个属性:段属性、偏移属性和类型属性。变量的定义与预置定义变量就是给变量分配存储单元,且对该存储单元赋于一个符号名变量名,同时预置初值。定义变量用数据定义伪指令DB、DW、DD、DQ、DT等。 例:VAR_DATA SEGMENT data1 DB 12H data2 DW 5678H VAR_DATA ENDS第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分22 变量的属性 段属性(SEG):表示变量存放在那一个逻辑段中,例如上面定义的变量名data1和data2存放在VAR_DATA逻辑段中。对它们进行存取时要先将它们所在段的段基值放在DS中,即执行下面语句: mov ax,VAR_DATA mov ds,ax 段的偏移属性(offset):表示变量在逻辑段中离段起点的字节数。如上面的data1的偏移量为0,data2的偏移量为1。 变量的段属性和偏移属性构成了变量的逻辑地址。 类型属性(type):表示变量占用存储单元的字节数 DB 1字节,DW 2字节,DD 4字节, DQ 8字节,DT 10字节第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分23 数据定义伪指令 格式:变量名 伪指令名 表达式1,表达式2, 这里表达式有以下几种情况: 数值表达式 例: DA_BYTE DB 50H,50,0caH DA_WORD DW 0a3f1H,498dH ? 表达式,不带引号的 ?表示可预置任何内容 例: DA_B DB ?,? ;要求分配两个字节单元 DA_W DW ?,? ;要求分配两个字单元 字符串表达式 数据项可以写成字符串形式,但只能用DB、DW、DD定义, 而且DW、DD语句定义的串只允许包含两个字符。 参看下面的例子。第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分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 46H 45H 43H 00H 00H 第 四 章 汇 编 语 言 程 序 设 计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分25 可以用DW语句把变量或标号的偏移地址存入存储器;也可用DD语句把变量或标号的段地址和偏移地址都存入存储器,此时低位字存偏移地址,高位字存段地址,例如:VARDW1234H LABEL:MOV AL, 04H PRV DD VARPRL DW LABEL PRR DD LABEL PRVPRLPRRVAR的 偏 移 地 址VAR的 段 地 址LABEL的 偏 移 地 址LABEL的 偏 移 地 址LABEL的 段 地 址 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分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个字节$符号,表示地址计数器的当前值 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分27 例:ARRAY DW 1,2,$+4,3,4,$+4 如果在汇编时,ARRAY的偏移地址是0074H,则在ARRAY数组中,两个$+4得到的结果是不同的,这是由于$的值是在不断变化的。此定义在存储器中的表示如下图所示。 $用在伪操作的参数字段时,和用在指令中的情况是不同的,用在伪操作中它表示的是地址计数器的当前值。用在指令中它只表示该指令的首地址,而与$本身所在的字节无关。例如 指令 JNE $+6表示满足条件时转移到该指令的首地址加6以后所在的单元。 1000:2543 JNE $+6 则转移地址是2549H.第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分28 01H00H03H00H04H00H82H00HARRAY00H02H00H7CH01HARRAY00H01HARRAY02H00H01HARRAY00H02H00H01HARRAY7CH00H02H00H01HARRAY00H7CH00H02H00H01HARRAY03H00H7CH00H02H00H01HARRAY00H03H00H7CH00H02H00H01HARRAY04H00H03H00H7CH00H02H00H01HARRAY00H04H00H03H00H7CH00H02H00H01HARRAY82H00H04H00H03H00H7CH00H02H00H01HARRAY00H82H00H04H00H03H00H7CH00H02H00H01HARRAY第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分29 例4-1:下面的数据段定义,COUNT 表示什么? DATA SEGMENT BUF DB 0123456789ABCD COUNT EQU $ - BUF DATA ENDS这里,COUNT的值就是数据区的长度,所以COUNT=145、标号 标号是一条指令的目标代码的符号地址,它常用作转移指令(或子程序调用指令)的操作数。 标号有三个属性:段属性、偏移属性和类型属性。 段属性是该标号的段地址,偏移属性是该标号的偏移地址,类型属性是表示该标号的范围是本段(NEAR)或段间(FAR),或称为近或远属性。第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分30 6、表达式和运算符 表达式由常数、操作数、操作符和运算符组成。有六种运算符,即算术运算符、逻辑运算符和关系运算符、分析运算符、综合运算符和分离运算符。1、算术运算符+、*、/、MOD(取余)、SHL(左移)、SHR(右移) 例: 32 MOD 5 ;结果为2 MOV DX,BLOCK+(6-1)*22、逻辑运算符(按位操作) AND (与) OR (或) XOR (异或) NOT (非) 例: IN AL,Port_VAL OUT Port_VAL AND OFEH,AL第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分31 3、关系运算符关系运算是逻辑判定,当为真时结果为全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,50当port 的值60时,上述指令汇编为ADD AX,70第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分32 4、分析运算符把存储器地址操作数分解成它的组成部分。 SEG (求段地址), 格式: SEG 符号名 OFFSET(求偏移地址),格式: OFFSET 符号名 TYPE (求符号名类型值),格式:TYPE 符号名 SIZE 求为符号名分配的字节数 格式: SIZE 符号名 回送分配给该符号名的字节数,但此值是LENGTH的值和TYPE的值的乘积。 类 型byteworddwordqwordtbyteNEARFAR类 型 值124810-1 (FFH)-2 (FEH)第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分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符号名)第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分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第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分35 通过PTR指明是字单元还是字节单元 例: MOV BYTE PTR BX,10H;BX为字节单元 MOV WORD PTR SI,20H;SI为字单元 用PTR来改变距离属性 例: 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第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分36 6、分离运算符 取低字节 格式:LOW 符号名 取高字节 格式:HIGH 符号名 例:设SSY=2050H mov al, LOW 3080H ; al = 80H mov ah, HIGH SSY ; ah = 20H mov cl, LOW 3a4bH ; cl = 4bH7、专用运算符 8、其它运算符 如果需要,请参考相关的参考书。9、汇编运算符的优先级第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时10分37 伪指令没有对应的机器指令,不是由CPU执行,而是由汇编程序识别,并完成相应的功能。伪指令越多,应用越方便,MASM86的伪指令可分为14类。 1、符号定义伪指令 符号名 EQU 表达式 符号名 = 表达式 例 : port1 EQU 78 port2 EQU port1+2 counter EQU cx ;定义为寄存器 cbd EQU DAA ;定义为助记符 A = 6 A = A+2 第 四 章 汇 编 语 言 程 序 设 计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分38 = 和 EQU的区别是用=定义的符号名在同一程序中可以重复定义,而用EQU定义的符号名在同一程序中不允许重复定义。 EQU与特殊运算符PTR或THIS连用,可以给变量或标号定义新的类型属性并重新命名,但其段属性和偏移属性不变。例:某一程序段中有以下几条伪指令语句,试分析个变量的属性。 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分别是双字类型、字节类型和字类型,它们为同一数据区的 首址。 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分39 2、内存数据定义伪指令 DB 定义字节(前面已讲过定义方法) DW 定义字(2字节) DD 定义双字(4字节) DQ 定义8字节 DT 定义10字节3、段定义伪指令 段名 SEGMENT 定位方式 连接方式 类别名 段名 ENDS 定位方式 PAGE 指定起始地址的低8位是0 PARA 指定起始地址的低4位是0(隐含) WORD 指定起始地址的最低位是0 BYTE 指定起始地址是任意值第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分40 连接方式(组合类型) 组合类型告诉连接程序本段与其它段的关系。有NONE,PUBLIC,COMMON,STACK,MEMORY和AT6种。 缺省下是NONE,表示本段与其他段逻辑上不发生关系。STACK则指定该段在运行时为堆栈段的一部分。(参看相关参考书)。 类别名 类别名是用单引号括起来的字符串,连接程序只使同类别的段发生关联。 4、段寄存器说明伪指令 ASSUME 段寄存器:段定义名1,段寄存器:段定义名2, 例:ASSUME CS:CODE, DS:DATA, ES:DATA,SS:STACK第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分41 5、过程(子程序)定义伪指令 过程名 PROC NEAR或FAR; NEAR可省略 过程名 ENDP调用过程的格式为: CALL 过程名 过程返回 RET ;段内返回 RETF;段间返回第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分42 6、定位伪指令 格式: ORG 表达式 这里表达式是一个无符号数,表示以下的程序或数据的开始地址。例4-2:下面程序段,指出变量BUF和NUM的偏移地址为多少? DATASEGMENT ORG 10 BUF DBABCD ORG $+5 NUM DW50 DATAENDS 变 量BUF的 偏 移 地 址 为10; 变 量NUM的 偏 移 地 址 为19第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分43 7、对准伪操作 格式:EVEN ;使下一个字节地址成为偶数。8、基数控制伪操作指令 格式:RADIX 表达式 该表达式表示进制的基数值(2-16),注意用十进制表示 其 它 类 型 的 伪 指 令 及 宏 指 令 , 请 参 看 相 关 的 参 考 书 。第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分44 通常把DOS提供的INT 21H中断服务程序称为DOS功能调用,调用时根据AH的值来选择子功能。AH=1 键盘键入并回显, 输入字符的ASCII码在AL中返回 例: MOV AH, 1 INT 21HAH=2 显示输出字符,输出字符的ASCII码放入DL中 例: MOV AH, 2 MOV DL,A INT 21HAH=7 键盘输入无回显,输入字符的ASCII码在AL中返回 例: MOV AH, 7 INT 21H第 四 章 汇 编 语 言 程 序 设 计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分45 AH=9 显示字符串,字符串以$结束,开始位置用DS:DX指示 例: MOV AX, MY_DATA MOV DS, AX LEA DX, String MOV AH, 9 INT 21HAH=4C 程序运行结束,返回操作系统,返回码由AL给出 例: MOV AX, 4C00H INT 21H第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分46 1、程序编制及调试汇编语言源程序的编制 编辑环境:EDIT、ULTRAEDIT、NOTEPAD等。存盘形式:ASCII形式注意:编辑好的源程序必须以扩展名.ASM来命名。汇编源程序的编译将汇编源程序转换成目标(OBJ)文件编译器:MICROSOFT MASM5.0+、BROLAND TASM2.0+存盘形式:Binary形式 注意:编译完成后生成扩展名为.OBJ的目标文件。如果源程序有语法错误,则给出相应的错误提示及错误代码。连接将一个目标文件或者多个目标文件连接(再定位)生成可执行文件。第 四 章 汇 编 语 言 程 序 设 计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分47 连接器:MICROSOFT LINK5.0+、BROLAND TLINK2.0+ 存盘形式:Binary形式.COM文件与.EXE文件的区别1、.COM文件是内存映像文件,执行时直接装入内存即可执行。其中 代码段、数据段、堆栈段等的段地址完全相同。一般程序长度小于64KB。装入执行速度相对较快。2、.EXE文件不是内存映像文件,执行时需要把代码段、数据段、堆栈段等重新定位,然后才能够执行。程序长度可以大于64KB。装入执行速度相对较慢。3、不论是.COM文件还是.EXE文件装入内存时都产生一个PSP(程序前缀段),里面是程序运行的一些基本信息,存放在程序的开始位置0-FFH,PSP的长度是256Byte。调试 调试工具:DEBUG、TDEBUG。 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分48 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分49 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分50 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分51 将程序存盘为Test1.asmd: masm Test1 ;编译程序,不需加 .asm 扩展名d: link Test1 ;连接程序,不需加 .obj 扩展名编译时,当执行 d: masm Test1时,屏幕会出现Object filename Test1.OBJ:Source listing NUL.LST:Cross-reference NUL.CRF:如果有语法错误,则还会出现类似的错误提示: Test1.ASM(18):error A2056: Immediate mode illegal编译输入为.ASM文件,输出有三个文件:.OBJ,二进制目标文件.LST,列表文件,该文件列出源程序和机器码清单,并给出符号表,以便调试。该文件可有可无。.CRF,用于产生交叉引用表,给出用户定义的所有符号及所在行号。该文件可有可无。第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分52 例2 编写一个.COM文件 code segment assume cs:code,ds:code,ss:code,es:code org 100h ;伪指令, 表示下面代码的偏移地 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 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分53 DEBUG调试命令介绍 DEBUG软件是DOS系统下的汇编语言调试分析工具,在DOS下执行DEBUG.EXE出现提示符-,进入到DEBUG调试环境。默认条件为: 默认使用十六进制数据,并且不用加后缀H; 地址一般由段地址和偏移量组成,若在命令中不指明段地址,默认使用DS中的段地址。进入DEBUG后,可按Q键退出,或按?查看帮助。第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分54 命令介绍汇编命令 A (Assemble)一般用法: A ;从当前地址输入汇编源程序 A 地址 ;从指定位置输入汇编程序反汇编命令 U (Unassemble)一般用法: -U ;从当前位置将机器码反汇编成源程序 -U 地址 ;从指定位置将机器码反汇编成源程序 -U 地址1 地址2;按照指定位置将机器码反汇编 ;成源程序,地址1为开始位置, ;地址2为结束位置第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分55 Debug环境下执行汇编命令A所见画面Debug环境下执行反汇编命令U所见画面第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分56 显示内存命令 D (Display) -D ;从当前位置开始显示128个字节的内容 -D 地址 ;从指定位置开始显示128个字节的内容 -D 地址1 地址2 ;功能同上,地址1为起始地址, ;地址2为结束地址修改内存单元命令 E (Editor) -E 地址;显示指定内存单元的内容,并修改 -E 地址 数据 ;修改指定地址的内存单元的内容, ;多个数据可以用空格隔开,用回车 ;完成修改 例: -e 100 Hello 7 $ ;单引号表示输入ASCII码第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分57 Debug环境下执行显示内存命令d后所见画面Debug环境下执行显示寄存器命令r后所见画面第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分58 显示和修改寄存器命令 R (Register) -R ;显示所有寄存器的内容 -R 寄存器名 ;显示并修改指定寄存器的内容 在DEBUG环境中用一些符号表示标志位,说明如下: 标志 逻辑真 逻辑假 标志 逻辑真 逻辑假 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第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分59 执行命令 G (Go) -G ;从当前IP指示的地址开始执行程序 -G=起始地址 ;从指定的地址开始执行程序 -G=起始地址 断点地址 ;从指定的地址开始执行程序,并 ;执行到断点处暂停单步执行指令 T和P T:跟踪进入子程序 P:不跟踪进入子程序 一般用法: -T ;执行一条指令 -T n ;执行n条指令其他指令:N(定义名字) W(写磁盘) L(从磁盘装入)退出命令:Q ;退出DEBUG,返回DOS第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分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 ;默认存放在当前目录设 置 程 序 长 度 -R BX ; 设 置 程 序 长 度 : 0 ;64K的 倍 数 -R CX ; 设 置 程 序 长 度 :20 ; 字 节 数第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分61 写入磁盘: -W ;存盘,若未指定地址则从CS:0100H开始, ;要写入的文件字节数应先放入BX和CX中执行: -G=100 或 退出DEBUG后, 在DOS下执行T装入程序: -N T -L;把文件装入存储器,若未指定地址,则数据从CS:0100H开始第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分62 1、顺序结构程序设计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分63 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分64 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分65 data1data2result+ 高 16位 低 16位CF第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分66 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分67 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分68 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分69 2、分支结构程序设计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分70 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分71 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分72 变 量 control 转 入 子 程 序00000001 subr100000010 subr200000100 subr300001000 subr400010000 subr500100000 subr601000000 subr710000000 subr8第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分73 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分74 3、循环程序设计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分75 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分76 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分77 子程序的描述(注释用) 子程序的功能描述 入口参数的描述 出口参数的描述子程序中用到的寄存器应用堆栈进行保护例: subr1 proc push ax pop ax ret subr1 endp4、子程序设计第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分78 子程序的参数传递 通过寄存器传递参数 通过全局变量传递参数 通过堆栈传递参数 通过代码段来传递参数第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分79 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分80 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分81 BCD1 BCD0BCD3 BCD2data1 低 8位高 8位第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分82 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分83 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分84 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分85 5、字符串处理第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分86 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分87 6、数码转换第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分88 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分89 第 四 章 汇 编 语 言 程 序 设 计 计算机原理 2021年5月3日21时11分90 第 四 章 汇 编 语 言 程 序 设 计
展开阅读全文