第4章 汇编语言程序设计
第4章 汇编语言程序设计
4.1汇编语言程序的汇编 4.1.1程序设计语言简介 1机器语言 1110010100110000 0010010101000000 1111010101010000 2汇编语言 MOV A 30H ADD A, 40H MOV 50HA 3高级语言 FORTAN、BASC、C语等和过程的语言。如: 级语言是一种面向算氵
4.1 汇编语言程序的汇编 4.1.1 程序设计语言简介 1.机器语言 11100101 00110000 00100101 01000000 11110101 01010000 2.汇编语言 MOV A,30H ADD A,40H MOV 50H,A 3.高级语言 高级语言是一种面向算法和过程的语言。如: FORTAN、BASIC、C语言
4.1.2人工汇编 人工汇编就是根据指令表,将源程序由指令逐条翻译 成指令代码,并把这些代码以字节为单元从起始地址依次 排列成目标程序。 人工汇编分两步进行 第一步:确定各条指令(第一字节)的地址并翻译出各 条指令的机器码 第二步:将第一步未处理的标号进行代替,即求出标号 所代表的具体地址值或地址偏移量,形成代码
4.1.2 人工汇编 人工汇编就是根据指令表,将源程序由指令逐条翻译 成指令代码,并把这些代码以字节为单元从起始地址依次 排列成目标程序。 人工汇编分两步进行: 第一步:确定各条指令(第一字节)的地址并翻译出各 条指令的机器码。 第二步:将第一步未处理的标号进行代替,即求出标号 所代表的具体地址值或地址偏移量,形成代码
〔例4-1)将下列程序进行人工汇编 ORG 1000H START. SETB P DL MOV 30H #03H DLO. MOV 31H, #OFOH DLI: DJNZ 31H DLl DJNZ 30H DLO CPL P AJMP DI END
〔例4-1〕 将下列程序进行人工汇编 ORG 1000H START: SETB P1.1 DL: MOV 30H,#03H DLO:MOV 31H,#0F0H DL1: DJNZ 31H,DL1 DJNZ 30H,DLO CPL P1.1 AJMP DL END
表4-1第一步汇编结果 地址指令代码 标号助记符 ORG 1000H 1000HD291 START: SETB P 1002H753003 DL. MOV 30H #03H 1005H7531F0 DLO. MOV 31H #OFOH 1008H D5 31 rell DLI: DNZ 31H DLI 100BH D5 30 re12 DJNZ 30H DLO 100EHB291 CPL P 1010H AJMPDL AJMP DL END
地址 指令代码 标号 助记符 1000H D2 91 1002H 75 30 03 1005H 75 31 F0 1008H D5 31 100BH D5 30 100EH B2 91 1010H ORG 1000H START: SETB P1.1 DL: MOV 30H,#03H DL0: MOV 31H,#0F0H DL1: DJNZ 31H,DL1 DJNZ 30H,DLO CPL P1.1 AJMP DL END AJMPDL rel1 rel2 表4-1 第一步汇编结果
第二步:计算偏移量 (rel1=1008H-100BH=-3H 以补码表示:rel=0FDH ②rel2=1005H-100EH=9H 以补码表示:rel2=0F7H ③指令中 AJMP DL中D=1002H其低11为0000000,所 该指令的代码为:01H,02H 表4-2第二步汇编结果 地址 指令代码 标号助记符 ORG 1000H 1000H D291 START: SETB PLI 1002H 753003 DL. MOV 30H #03H 1005H 7531F0 DLO: MOV 31H #OFOH 1008H D5 31 FD DLI DJNZ 31H DLl 100BH D530F7 DJNZ 30H DLO 100EH B291 CPL PLL 1010H 0102 AJMP DL END
第二步:计算偏移量 ①rel1=1008H-100BH=-3H 以补码表示:rel=0FDH ②rel2=1005H-100EH=-9H 以补码表示:rel2=0F7H ③指令中AJMP DL中DL=1002H其低11为00000000010B,所 以该指令的代码为:01H,02H。 表4-2 第二步汇编结果 地址 指令代码 标号 助记符 1000H D2 91 1002H 75 30 03 1005H 75 31 F0 1008H D5 31 FD 100BH D5 30 F7 100EH B2 91 1010 H 01 02 ORG 1000H START: SETB P1.1 DL: MOV 30H,#03H DL0: MOV 31H,#0F0H DL1: DJNZ 31H,DL1 DJNZ 30H,DL0 CPL P1.1 AJMP DL END
4.1.3机器汇编 机器汇编是由计算机的汇编软件将汇编语言源程序自动 生成机器语言程序。汇编软件称汇编程序。 机器汇编可在单片机开发系统(如仿真器)上汇编软件 实现,称驻留汇编;也可在其它计算机(如PC机)上进 称交叉汇编
4.1.3 机器汇编 机器汇编是由计算机的汇编软件将汇编语言源程序自动 生成机器语言程序。汇编软件称汇编程序。 机器汇编可在单片机开发系统(如仿真器)上汇编软件 实现,称驻留汇编;也可在其它计算机(如PC机)上进行, 称交叉汇编
4.2汇编语言程序设计概述 4.21汇编语言语句格式 〔标号:〕<操作码助记符冮操作数;注释] 1标号 标号是语句地址的标志符号、代表该语句指令代码第 个字节的地址。 2操作码助记符 此为语句中唯一不可缸少的部分,也是语句的核心,表 示该语句进行何种操作。 3操作数 操作数是指令的操作对象。 4注释 注释是为方便程序的编写、理解、交流而书写的说明解 释性文字、符号
4.2 汇编语言程序设计概述 4.2.1 汇编语言语句格式 〔标号:〕[ 操作数][;注释] 1.标号 标号是语句地址的标志符号、代表该语句指令代码第一 个字节的地址。 2.操作码助记符 此为语句中唯一不可缸少的部分,也是语句的核心,表 示该语句进行何种操作。 3.操作数 操作数是指令的操作对象。 4.注释 注释是为方便程序的编写、理解、交流而书写的说明解 释性文字、符号
4.22伪指令 1汇编起始地址伪指令ORG( Origin) 格式:〔标号:〕ORG 功能:规定目标程序段式数据块的起始地址 说明:总放在源程序段的开头和数据块的开头 2汇编结束指令END 格式:[标号:〕END 功能:告诉汇编程序,源程序到此结果,汇编到此截止。 说明:一个程序只能有一条END命令,且位于程序的最后。汇 编程序对END语句以后的语句不进行汇编。 例如: ORG 2000H START: MOV A B INB ACC 7 DONE CPL A DONE MOV B.A END
4.2.2 伪指令 1.汇编起始地址伪指令ORG(Origin) 格式:〔标号:〕ORG 功能:规定目标程序段式数据块的起始地址。 说明:总放在源程序段的开头和数据块的开头 2.汇编结束指令END 格式:〔标号:〕END 功能:告诉汇编程序,源程序到此结果,汇编到此截止。 说明:一个程序只能有一条END命令,且位于程序的最后。汇 编程序对END语句以后的语句不进行汇编。 例如: ORG 2000H START:MOV A,B JNB ACC.7,DONE CPL A DONE:MOV B,A END
3字节定义伪指令 DEfine byte) 格式:〔标号:〕DB<字节数据 功能:从指定的地址单元开始,存入规定好的8位数(字节数 据) 说明:1)存贮地址单元可由前一条指令确定或由ORG命令 指定 2)当存贮多个数时,中间用 隔开 例如 ORG 8000H MOV A 40H TAB:DB40H,1101B,96… 表示从8002H单元开始分别存放40H,ODH,43H 例 ORG 1000H DB“ How are you” 则把字符串中的字符按ASCI码连续存放在1000H~100AH 个单元中(包括两个空格) 注意: DB OFA2H是非法的,因OFA2H不是字节数
格式:〔标号:〕DB 功能:从指定的地址单元开始,存入规定好的8位数(字节数 据)。 说明:1)存贮地址单元可由前一条指令确定或由ORG命令 指定; 2)当存贮多个数时,中间用“ , ”隔开。 例如: ORG 8000H MOV A, 40H TAB:DB 40H, 1101B, 96…… 表示从8002H单元开始分别存放40H,0DH,43H 例: ORG 1000H DB “How are you” 则把字符串中的字符按ASCII码连续存放在1000H~100AH 11 个单元中(包括两个空格)。 注意:DB 0FA2H 是非法的,因0FA2H不是字节数。 3.字节定义伪指令DB(Define Byte)