第4章 汇编语言程序设计
- 格式:doc
- 大小:219.00 KB
- 文档页数:29
汇编语⾔程序设计第4章汇编语⾔程序设计§4.1 汇编语⾔的模式⼀、汇编语⾔源程序的⼀般模式[Name 模块名][Title 标题][定义宏][定义数据段][定义附加段][定义堆栈段]定义代码段源程序结束中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。
⼆、8086汇编语⾔程序的⼀个例⼦Pg90。
§4.2 语句⾏的构成汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。
指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。
也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。
⼀、标记1.IBM宏汇编的字符集(1)字母(2)数字符(3)特殊字符2.界符⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。
3.常量出现在汇编语⾔源程序中的固定值称为常量。
(1)数值常量①⼆进制:以字母B结束。
②⼗进制:以字母D或⽆字母结束。
③⼋进制:以字母Q(或O)结束。
④⼗六进制:以字母H结束。
(2)字符常量指⽤单引号或双引号引起的字符或字符串。
4.标识符由程序员⾃⼰建⽴的字符序列(标号或名称)。
⼀个标识符不能超过31个字符,不能以数字开头。
5.保留字汇编语⾔中具有特殊意义的字符序列。
6.注释⼀⾏中分号以后的部分。
⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。
⼆、符号具有⼀定意义的字符序列。
1.寄存器名2.变量段属性、偏移属性、类型属性3.标号段属性、偏移属性、类型属性4.常数5.其它三、表达式由操作数和运算符组合⽽成的序列。
1.操作数(1)⽴即数(2)寄存器操作数(3)存储器操作数2.运算符(1)算术运算符+、-、*、/、MOD(求余)(2)逻辑运算符AND、OR、NOT、XOR(3)关系运算符EQ、NE、LT、LE、GT、GE结果为“假”时,返回0,结果为“真”时,返回⼆进制全1。
第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。
在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。
(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。
汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。
①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。
)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。
操作数:给指令的操作提供数据或地址。
注释:是对语句或程序段的解释说明。
(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。
冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。
第四章习题集一、判断(正确的在括号画“√”,错误的画“×”)1.汇编语言程序语言必须由四部分组成。
( )2.汇编语言源程序中所使用的变量,必须在代码段中先定义,后引用。
(错)3.在汇编语言中,一般伪指令语句放在代码段中(错)4.逻辑操作符AND、OR、XOR或NOT,只能用于数字表达式。
( 错)5.符号定义语句不占内存单元,变量定义语句占内存单元。
()6.汇编语言源程序中至少有一个代码段。
( 对)7. 伪指令是指示性语句,不产生机器目标代码。
( √)8. 伪指令BV AR:DB‘ABCD’,200 DUP(?)是合法伪指令。
9. 伪指令DAT1 DB 7,8,9,10 与DA T1 DW 07H,08H,09H,0AH所预置的数据是一样的。
10. 8086CPU的中断向量表共占有1024个字节(00000H-003FFH),所以共有1024个中断。
[ ]二、单项选择题1. 用高级语言编写的程序(C )。
A、只能在基本种计算机上运行B、无需经过编译或解释,即可被计算机直接执行C、具有通用性和可移植性D、几乎不占用内存空间2. 一般地,我们将计算机指令的集合称为(B )。
A.机器语言 B. 汇编语言 C. 模拟语言 D. 仿真语言3. 我们通常所说的“裸机”指的是(C )。
A. 只装备有操作系统的计算机B. 不带输入输出设备的计算机C. 未装备任何软件的计算机D. 计算机主机暴露在外4. 计算机的软件系统一般分为(C )两大部分。
A. 系统软件和应用软件B. 操作系统和计算机语言C. 程序和数据D. DOS和Windows5.计算机系统软件中的汇编程序是一种( C )。
A. 汇编语言程序B. 编辑程序C. 翻译程序D. 将高级语言转换成汇编程序的程序6. 假设V1和V2是用DW定义的变量,下列指令中正确的是:AA. MOV V1,20HB. MOV V1,V2C. MOV AL,V1D. MOV 2000H,V27. PC机所使用的标准键盘向主机发送的代码是AA . ASCII码B . 扫描码 C. BCD码 D. 格雷码8. 8086CPU中断号为8的中断矢量存放在( C )。
A. 0FFFFH:0008HB. 0000H:0008HC. 0000H:0020HD. 0020H:0000H9. 已知变量VAR为字型,则TYPE VAR=( B )。
A、1B、2C、3D、410. 交换寄存器SI、DI的内容,正确的程序段是(AC )。
A、PUSH SIB、PUSH SIPUSH DI PUSH DIPOP SI POP DIPOP DI POP SIC、MOV AX,SID、MOV AX,SIMOV SI,AX MOV BX,DIMOV DI,AX XCHG BX,AX11. 段定义语句以( B )语句结束。
A.ENDB.ENDSC.ENDPD.ENDM 12.若主程序段中数据段名为DA TA,对数据段的初始化操作应为 b 。
A. MOV AX,DATAB. MOV AX,DA TAMOV ES,AX MOV DS,AXC. PUSH DSD. MOV DS,DATA13..EXE文件产生在 d 之后。
A. 汇编B. 编辑C. 用软件转换D. 连接14.定义双字变量的定义符是 c 。
A. DWB. DQC. DDD. DT15.下列存储器操作数的跨段前缀可省略的是 ? 。
A. DS:[BP]B. SS:[BP]C. ES:[BX]D. ES:[SI]16.执行下列指令:STR1 DW ‘AB’STR2 DB 16 DUP(?)CONT EQU $-STR1MOV CX,CONTMOV AX,STR1HLT后寄存器CL的值是 c 。
A. 0FHB. 0EHC. 12HD. 10H17. 与MOV BX,OFFSET VAR指令完全等效的指令是( D)。
A. MOV BX,VARB. LDS BX,VARC. LES BX,VARD. LEA BX,VAR18. 在段定义时,如果定位类型用户未选择,就表示是隐含类型,其隐含类型是( D)。
A、WORDB、PAGEC、BYTED、PARA19. BUF DW 10H DUP(3 DUP(2,10H),3,5)上述语句汇编后,为变量BUF分配的存储单元字节数是(160? )。
A、80HB、100HC、124D、19220. 在汇编语言程序的开发过程中使用宏功能的顺序是(C )。
A、宏定义,宏调用B、宏定义,宏展开C、宏定义,宏调用,宏展开D、宏定义,宏展开,宏调用21. 汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中不可省略的项是( B)。
A、名字项B、操作项C、操作数项D、注释项22. 编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有( D )。
A、CMPB、SUBC、ANDD、MOV23. 为使CX=-1时,转至MINUS而编制了一指令序列,其中错误的序列是( D)。
A、INC CX JZ MINUSB、SUB CX,OFFFFH JZ MINUSC、AND CX,OFFFFH JZ MINUSD、XOR CX,OFFFFH JZ MINUS24. 假设V1和V2是用DW定义的变量,下列指令中正确的是( A ).A. MOV V1,20HB. MOV V1,V2C. MOV AL,V1D. MOV 2000H,V225.假设V AR为变量,指令MOV BX,OFFSET V AR的寻址方式是( C )。
A.直接寻址B.间接寻址C.立即寻址D.存储器寻址三. 多项选择题(每题有多个正确答案,选出所有正确答案,多选、少选均不得分)1.8086指令的操作数可能有。
A. 0B. 1C. 2D. 32.变量定义的伪指令助记符有: a,b,c,e,f 。
A. DBB. DWC. DDD. DFE. DQF. DT3.主程序与子程序之间传递参数可通过 a,c,e(参数表) 进行。
A. 堆栈B. 存储器单元C. 通用寄存器D. 指令队列E. 其他4.汇编语言源程序经MASM汇编后可直接生成的文件是 d 。
A. .LSTB. .CRFC. .EXED. .OBJE. .ASMF. .MAP5. 过程(子程序)调用的形式有(ABCD )。
A、段内直接B、段内间接C、段间直接D、段间间接四.填空题8.设当前的SP=0FFFH,执行PUSHF指令后,SP=(0FFD)H,若改为执行INT 20H 指令后,则SP=(0FF9 )H。
2.23.当要求段的首地址只能被16整除时,需选择的定位方式为__ PARA_ 。
2.二进制编码的十进制数称为BCD码,它用(5)位二进制表示一个十进制数码。
BCD码有(6)和(7)两种格式。
1.MOV AX,((V AR LT 6)AND 40)OR((V AR GE 6)AND 50),当V AR﹤6时,汇编结果源操作数为。
2.程序段V AR1 DB?V AR2 DW 20 DUP(58H,2 DUP(?))V AR3 DB‘ABCD’...MOV AX,TYPE V AR1MOV BX,TYPE V AR2MOV CX,LENGTH V AR2MOV DX,SIZE V AR2MOV SI,LENGTH V AR3AX= 1 ,BX= 2 ,CX= 60 ,DX= 120 ,SI= 1 。
3.段定义伪指令语句用 segment 语句表示开始,以 ends 语句表示结束。
4.ARRAY DW 10 DUP(5 DUP(4 DUP(20H,40H,60H)))语句执行后共占 1200 字节存储单元。
5.汇编语句中,一个过程有NEAR和FAR两种属性。
NEAR属性表示主程序和子程序段内转移,FAR属性表示主程序和子程序段间转移。
6.DOS系统功能号应放在 ah 寄存器中。
7.子程序又称过程,它可以由 proc 语句定义,由 ret 语句结束,属性可以是 near 或 far 。
8.与指令MOV BX,OFFSET BUF功能相同的指令是 lea bx, buf 。
10.设有伪指令 A DB 01H,23H ,则执行指令B DW 2 DUP(0)MOV AL,TYPE A后,(AL)= ;MOV BL,SIZE B后,(BL)= 。
.设有伪指令 A DB 01H,23H ,则执行指令B DW 2 DUP(0)MOV AL,TYPE A后,(AL)= ;MOV BL,SIZE B后,(BL)= 。
7. 根据下面的指令和伪指令序列,AX寄存器的内容。
TAB DB 1,2,3,4,5,6ENTRY EQU 3MOV BX,OFFSET TABADD BX,ENTRYMOV AX,WORD PTR [BX]8. 对于下面两个数据段,偏移地址为10H和11H的两个字节中的数据是一样的吗?为什么?DTSEG SEGMENT | DTSEG SEGMENTORG 10H | ORG 10HDATA1 DB 72H | DATA1 DW 7204HDB 04H | DTSEG ENDSDTSEG ENDS |()。
12.将下列文件类型填入空格:(1) .obj (2) .exe (3) .crf (4) .asm (5) .lst (6) .map编辑程序输出的文件有();汇编程序输出的文件有();连接程序输出的文件有()。
4.ORG 1000HX DB 12HY DW XZ DD Y(DS)=3800H, (BX)=1000H, (SI)=0002H求下列指令执行完后指定寄存器的内容MOV AX, [1000H] ; (AX)= HMOV AX, [BX]; (AX)= HMOV AX, [BX+SI]; (AX)= HMOV AX, [Y+1]; (AX)= HLEA DX, X; (DX)= HLDS SI,Y; (SI)= H (DS)= H6. 数据段中有以下定义:ARRAY1 EQU 16HARRAY2 DW 16H请指出下面两条指令的寻址方式:MOV AX,ARRAY1;寻址方式:立即寻址MOV AX,ARRAY2;寻址地址:直接寻址8. 内存单元初始化内容为:(2000H:2A00H)--(2000H:2A02H)分别为0FH、0EH、0DH,(2000H:2A10H)--(2000H:2A12H)分别为09H、08、07H。
执行下列程序后,请填写存储单元的内容:MOV AX,2000HMOV DS,AXMOV ES,AXMOV SI,2A10HMOV DI,2A00HCLDMOV CX,3L:MOV AL,[DI]MOVSBDEC SIMOV [SI],ALINC SILOOP LHLT(1)2000H:2A00H= 09H 。