第三章 8086汇编语言程序格式
汇编语言程序格式
汇编语言程序格式编程语言是计算机与人之间交流的桥梁,通过编写程序代码,我们可以指导计算机执行特定的任务。
汇编语言是一种底层的编程语言,它直接与计算机硬件进行交互,并提供了对机器指令的精细控制。
在编写汇编语言程序时,我们需要遵循一定的格式,以确保程序的正确性和可读性。
本文将介绍汇编语言程序的格式要求。
一、程序结构在编写汇编语言程序时,需要明确的程序结构是很重要的。
一个典型的汇编语言程序由如下几个部分组成:1. 数据段(.data):用于定义程序中使用的数据,如变量、常量等。
2. 代码段(.text):包含实际的机器指令,用于执行特定的任务。
3. 其他段(如堆栈段):根据需要定义的其他段。
二、指令格式每个汇编指令都有特定的格式,以便告诉计算机应该执行什么操作。
一个标准的汇编指令格式通常包含如下几个部分:1. 操作码(Opcode):用于指定要执行的操作,如“mov”用于将数据从一个位置移动到另一个位置。
2. 操作数(Operand):操作数描述了要对其进行操作的数据。
操作数可以是立即数、寄存器或内存地址等。
3. 注释(Comment):注释用于解释指令的作用和目的,提高程序的可读性。
三、指令的排列在编写汇编语言程序时,指令的排列很重要。
正确的指令排列可以提高程序执行效率和可读性。
一般而言,指令按照执行的顺序排列,具有逻辑关系的指令可以分组编写。
四、标签和跳转在程序中,我们常常需要使用标签和跳转指令来实现条件执行和循环等功能。
标签是程序中的一个标记,用于标识某个位置,而跳转指令则会根据一定的条件,跳转到指定的标签处继续执行。
在使用标签和跳转指令时,需要注意以下几点:1. 标签需要以冒号(:)结尾,以便与其他变量或指令进行区分。
2. 跳转指令一般以条件代码作为前缀,如“je”(等于跳转)、“jne”(不等于跳转)等。
五、宏定义宏定义是一种将一段常用代码片段定义为简单的符号表示的方式。
在汇编语言中使用宏定义可以提高代码的可读性和重用性。
微机原理8086汇编程序设计.ppt
MOV BL,05H OR 30H
;35H→BL
MOV CX,NOT 00FFH
;0FF00H→CX
MOV DX,789AH XOR 000FH
;7895H→DX
13/),不等(NE),小于(LT),大于(GT), 小于等于(LE)及大于等于(GE)。
•运算结果成立时逻辑值为真,用0FFFFH表示;
汇编程序不区分大小写
3/96
汇编语言语句统一格式规定
指令性语句、伪指令语句和宏指令语句的统一格式:
[名字项] 操作项 [操作数项] [;注释项]
1.名字项:最多由21个字符组成。可由下列字符组成。
①字母A~Z、a~z
②数字0~9
③特殊符号?、·、@ 、- 、$等
注意:
➢ 名字项的第一个字符不可以是数字,必须是字母或特殊字
符,但是问号本身不能单独作为名字;
➢ 如果用到特殊符号,则它必须是首字符。
➢ 汇编语言的专用保留字、寄存器名、8088/8086汇编语言中
的指令助记符、伪指令名、表达式中使用的运算符和属性
运算符等均不能作为名字项,否则汇编会给出错误信息;
➢ 名字项在程序中不能重复定义。
4/96
名字项属性
(1) 段属性:可用SIG伪指令求出 此属性用于定义标号和变量的段起始地址。标号通常在代码 段CS中定义,变量通常在DS、ES和SS段中定义。
2 DATA SEGMENT;
数据段
┇
3 DATA ENDS ;…………………………………堆栈段说明 4 STACK SEGMENT PARA STACK′STACK′;堆栈段
┇
5 STACK ENDS
;……………………………………………………………代码段说明
3-3 8086指令格式
9
微机原理与接口技术
Chapter 3 8086寻址方式和指令系统
3.2.3 指令系统的设计与编码
问题描述:给出指令字长(总位长)、指令条数(操作码位数)、可访问的主
存范围(地址码位长)、寻址方式种类(方式码位长)、寄存器数量 (寄存器编码位长)等要求,按照一定的指令格式设计出每条 指令的编码形式。
① 目的操作数与源操作数应有相同的类型。 ② 目的操作数不能是立即操作数。 ③ 操作结束后,运算结果送入目的地址,源操作数并不改变。 ④ 源操作数和目的操作数不能同时为存储器操作数。
18
微机原理与接口技术
Chapter 3 8086寻址方式和指令系统
3.3 8086的指令系统
(2)某些单操作数指令也有相同的语句格式和操作规 定, 格式:[标号:] 操作符 OPD [;注释] 指令:算术运算和位操作 操作规定: ① 操作对象为目的地址中的操作数,操作结束 后,将结果送入目的地址。 ② 单操作数的类型一定要明确。 ③ 操作数不能是立即操作数。
24
微机原理与接口技术
Chapter 3 8086寻址方式和指令系统
非法指令--两个操作数都是存储器
8086指令系统除串操作指令外,不允许两个操作数
都是存储单元(存储器操作数)
例:将字变量BUF0中的内容传送至字变量BUF1中,采用 指令:
MOV buf2, buf1 ;非法指令,修正: ;假设buf2和buf1是两个字变量 ;mov ax,buf1 ;mov buf2,ax ;假设buf2和buf1是两个字节变量 ;mov al,buf1 ;mov buf2,al
第三章 8086寻址方式和指令系统
——微机原理与接口技术 2010.春
emu8086汇编代格式
emu8086汇编代格式汇编语言是一种底层的编程语言,基于机器指令的表示形式,用来控制计算机硬件的运行。
emu8086是一个PC上的x86模拟器,可以在Windows 系统上运行,提供了一个很好的学习环境。
本文将一步一步回答关于emu8086汇编代格式的问题。
1. 什么是emu8086汇编代格式?emu8086汇编代格式是一种特定的语法形式,用来编写汇编语言程序。
它定义了代码的结构、指令的格式和操作数的使用方法。
2. emu8086汇编代格式的基本结构是什么?emu8086汇编代格式的基本结构包括标签、指令和注释。
一般情况下,一行代码只能包含一个标签或指令或注释,但可以使用分号“;”添加多个注释。
3. 标签在emu8086汇编代格式中有什么作用?标签是用来标识程序中的特定位置或指令的起始位置的。
它由一个冒号“:”后跟一个名称构成,名称可以是任意字符串,但通常使用有意义的名称。
标签可以用作跳转指令的目标。
4. 在emu8086汇编代格式中如何定义指令?指令描述了计算机硬件执行的操作。
在emu8086汇编代格式中,指令由操作码和操作数组成。
操作码是一个代表特定操作的关键字,而操作数指定操作的数据。
5. 指令的操作数在emu8086汇编代格式中有哪些类型?在emu8086汇编代格式中,操作数可以是寄存器、内存地址、立即数、偏移量或程序名。
每个操作数都有特定的表示形式和使用规则。
6. 如何使用寄存器作为操作数?在emu8086汇编代格式中,寄存器有8位和16位之分。
寄存器的名称由一个字母和一个数字构成,如AX、BX等。
要使用寄存器作为操作数,只需在指令中直接引用寄存器的名称即可。
7. 如何使用内存地址作为操作数?内存地址指的是计算机内存中的存储位置。
在emu8086汇编代格式中,使用方括号“[]”来表示内存地址。
例如,[BX]表示使用BX寄存器中的值作为内存地址。
8. 如何使用立即数作为操作数?立即数是指直接出现在指令中的数值。
第三节 80868088汇编语言
三、汇编语言语句格式汇编语言程序由若干语句组成。
汇编语言语句类型:指令语句—完成操作功能,能编排(比翻译简单)成机器语言代码(即80x86指令系统的指令);伪指令语句—为汇编程序在编排源程序时提供有关信息;宏指令语句—分为宏定义和宏调用语句,编排时用宏定义代替宏调用语句。
汇编语言语句通用格式:[名字项] 操作项[操作数项] [;注释项]1、名字项组成:可由字母、数字、特殊字符(?、.、@、_、$)组成,数字不能作首字符,.只能作首字符。
类型:标号、变量。
(1)标号组成:①语句标号--由名字+冒号(“:”)组成;②过程名、段名等—只由名字组成。
属性:段属性—标号(定义时)所在段的起始地址;偏移属性—标号与所在段起始地址间字节数;类型属性—表明引用它时的特性,段内引用为NEAR,段间引用为FAR。
(2)变量组成:在除代码段外的段中定义,只由名字组成。
属性:段属性—变量(定义时)所在段的起始地址;偏移属性—变量与所在段起始地址间字节数;类型属性—表明为它所保留的主存字节数,DB/DW/DD/DQ/DT对应1/2/4/8/10字节。
思考:标号与变量的主要区别?指令中变量的数据类型如何表示?2、操作项组成:可为指令、伪指令或宏指令的助记符。
说明:指令助记符可带指令前缀。
示例:D_SEG SEGMENTNUM1 DB 10 DUP(10) ;数据定义NUM2 DW 20 DUP(0, 4 DUP(2))NUM3 DB 10H, 5 DUP(?)NUM4 DB ‘STRING’D_SEG ENDS ;假设DS指向D_SEG段MOV AX, SEG NUM1 ;等价于AX←(DS)MOV BX, SEG NUM2 ;AX与BX值相同MOV SI, OFFSET NUM1 ;NUM1相对于段的偏移量→SI MOV DI, OFFSET NUM2 ;等价于LEA DI, NUM2MOV AH,TYPE NUM2 ;2→AHMOV BH,LENGTH NUM2 ;20→BH(指最外层参数)MOV AL,LENGTH NUM3 ;1→AL(指第一个参数)MOV CL, SIZE NUM2 ;20*2→CLMOV CH, SIZE NUM4 ;1*1→CH(4)属性运算符PTR格式:<类型> PTR表达式PTR功能:用新类型取代表达式默认的数据类型PTR说明:①表达式为MEM操作数或变量时,类型可为BYTE、WORD、DWORD,表达式为标号时,类型可为NEAR、FAR;②仅改变数据类型属性,且仅在本语句有效。
第三章 8086的指令系统
机器指令 B0 56 04 78 CB
操作码 操作数
计算机执行的指令是机器指令,是一串二进制代码。 MOV、ADD 是机器指令操作码 B0、04 的助记词。
2. 8086的机器指令格式
B1 OP D W MOD B2 B3 REG R/M B4 B5 B6
操作码 (6)
方 0-字节 寻址 向 1-字操作 方式
立即数→通用寄存器、内存单元
立即数→通用寄存器 MOV AX,2356H; MOV BH,33H; 立即数→内存单元 MOV [BX+SI],0F080H; MOV BYTE PTR [BX],12H; 源操作数、目的操作数的类型要匹配。 源操作数是单字节,目的操作数是间址、变址、基址+ 变址的内存操作数,后者必须用PTR说明是字节型。
三. 标志寄存器
1. 格式 2. 含义
1. 格式
记录当前指令执行后的特征信息,16位数据用9位
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 O D I T S Z A P C
溢出
8位无符号数相加大于255,有符号数相加大于127或小于 -128 16位无符号数相加大于65535,有符号数相加大于32767 或者 小于-32768; 判断 操作数是有符号数,运算后O标志为1表示溢出。
寄存 器号
寻址 方式
① ② ③ ④ ⑤ ⑥
8086 指令是 1~6字节的变字节指令格式。 指令的长度:最少一个字节,最多六个字节。 B1、B2为基本字节,B3-B6 根据指令取舍。 B1字节-称作操作码字节,必不可少的。 B2-操作数寻址方式。一条指令最多可用两个操作数。 B3~B6- 一般为存储器操作地址位移量或立即操作数。
汇编语言(微机)第三章
汇编语言源程序的格式
一般情况下,定位类型、组合类型和类别说明可以 不用。 注意:SEGMENT和ENDS语句必须成对使用。 例:定义一数据段DATA
DATA SEGMENT A DB '1234' B DW 12H
DATA ENDS
22
汇编语言源程序的格式
(2)偏移地址定位语句 ORG 格式:ORG 数值表达式 功能:指定在它之后的程序段或数据块所存放的起始地 址的偏移量。
SUB1: ?
RESU: ?
?
31
汇编语言源程序的格式
④ 用DUP重复因子初始化一个数据区
格式:N DUP (表达式)
?、数值、
数值表达式
重复次数 重复装入的内容
字符等
例1: DA1 DB 2 DUP(0) DA2 DB 2 DUP(‘AB’) DA3 DW 2 DUP(1)
DA1
00
00
DA2
41
LOP: ADD AL,[BX] ADC AH,0 INC BX LOOP LOP MOV [DI] ,AX MOV AH ,4CH INT 21H
CODE ENDS END START
9
汇编语言源程序的格式
汇编语言源程序的格式
二、指令性语句 [标号:] 操作码 [操作数] [;注释项]
操作码:指明操作的性质,说明计算机要执行的具体操 作。用助记符表示。
第三章:8086汇编语言程序设计
主讲教师:范新民
整理ppt
1
8086汇编语言程序设计
1 3.2.1 汇编语言源程序的格式 2 3.2.2 常量、标识符和表达式 3 3.2.3 指示性语句 4 3.2.4 指令性语句 5 3.2.5 宏指令
华中科技大学8086汇编讲义第三章宏汇编语言
第三章宏汇编语言每种计算机语言都规定了自己的字符、基本词汇、典型语句和语法规则。
同样,汇编语言也有自己的字符、基本词汇、典型语句和语法规则。
字符:ASCII字符基本词汇:符号指令(MOV、ADD)伪指令(DB、SEGMENT等)典型语句:●机器指令语句——对应机器指令的一种操作。
●伪指令语句——无机器语言与之对应,不生成机器指令。
●宏指令语句——一条宏指令对应多条机器指令,产生一组目标代码。
语法规则:基本语法单位(常量、变量、标号、表达式)前面的例子已介绍了源程序的基本结构、格式、名字的定义、语句格式,下面将更深入地介绍有关语法规则。
3.1表达式汇编程序的语句及程序格式都比较固定,语句中除正确选择操作符之外,主要问题在于正确表示操作数地址,这涉及到寻址方式,可以归结到地址表达式的使用。
表达式:由常数、寄存器、标号、变量加上运算符构成的式子。
3.1.1.常量与数值表达式一.常量常量:从源程序翻译成目标程序期间已经有确定数值的量。
用途:赋值、作立即数、位移量。
由常量与运算符组成的式子。
数值表达式在汇编期间进行运算,结果为常量。
汇编期间允许对常量进行3种运算:1.算术运算包括:+、–、*、/、模除(MOD,取余数)、右移、左移。
2.逻辑运算●逻辑乘:AND(与)●逻辑加:OR(或)●按位加:XOR(异或)●逻辑非:NOT(非)3.关系运算包括:相等(EQ)、不等(NE)、小于(L T)、大于(GT)、小于等于(LE)、大于等于(GE)。
运算结果:关系不成立,结果为0;关系成立,结果为–1(0FFFFH)。
如:N = 50M = (N EQ 50)该关系成立,M =–1。
3.1.2.变量、标号与地址表达式一.变量变量:数据存贮单元的名字。
(存放地址的符号表示)。
变量有三个属性:段、EA、类型。
其中类型由定义时的伪指令确定(DB、DW、DD、DT)。
变量的定义:格式:[变量名] 数据定义伪指令表达式[,…]数据定义伪指令:DB、DW、DD、DQ、DT等。
第三章 8086基本语法
(一)通用传送指令
1)最基本的传送指令 格式:MOV dest,src (B/W)
reg reg
sreg sreg
mem mem
data8/data16 功能: dest src 说明:
(1) dest,src类型要一致,不能同时为内 存单元或同为sreg,至少有一个为寄存器, 决定数据位数;
前缀指令指定可用CS、ES、SS)
串操作目的操作数 ES DI
3)寻址方式
对应不同寻址方式,由形式地址计算EA的 方法不同。16位段偏移量可以是8或16位位 移量(Disp8/Disp16)、寄存器值或位移 量加寄存器值。
1)直接寻址
指令直接提供16位EA ( EA= Disp16) 例:设(DS)=2100H,(CS)=1000H, MOV AL,[0158H] 物理地址=(DS)左移4位+Disp=21158H CS:MOV AX,[0158H] 物理地址=(CS)左移4位+Disp=10158H
FAR:段间转移;NEAR:
段内转移(不改变CS值)。
若转移范围在当前指令的-128~+127内,在 操作数前加SHORT。
例2:段间直接转移寻址
JMP FAR PTR START
2)段内寄存器寻址
指令中寄存器内容是转移地址,适用于段 内转移,寄存器可用通用寄存器。
例:JMP BX ;BX IP
2)物理地址的产生
物理地址:单元地址用20位二进制数表 示,CPU与存储器间数据交换用,唯一的。 范围:00000H~FFFFFH
逻辑地址:由段基值和段内偏移量构成, 以16位二进制数表示,编程时用,不唯 一。偏移量范围:0000H~FFFFH
8086汇编语言指令表(按字母顺序)
2. 示例: (AL)=18H,(BL)=06H
ADD AL,BL ; (AL)<--(AL)+(BL) ; (AL)=1EH
DAA ; (AL)
DAS
组合十进制减法调整指令 DAS(Decimal Adjust for Subtraction)
则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,
否则(AL)<--(AL) and 0FH
ADC
带进位加法指令 ADC(Addition Carry)
格式: ADC OPRD1,OPRD2
功能: OPRD1<--OPRD1 + OPRD2 + CF
DAA
组合的十进制加法调整指令 DAA(Decimal Adjust for Addition)
格式: DAA
功能: 对AL中的两个组合进制数相加的结果进行调整,调整结果仍放在AL中,进位标志放在CF中.
说明:
1. 调整操作如下
(1) 若(AL) and 0FH>9 或 AF=1,则(AL)<--(AL)+6,AF<--1,对低四位的调整.
格式: DAS
功能: 对两个组合十进制数相减后存于AL中的结果进行调整,调整后产生一个组合的十进制数且仍存于AL中.
说明:
调整操作
若(AL) and 0FH > 9 或 AF=1,则(AL)<--(AL)-6,AF=1
若(AL) and 0F0H > 90H 或 CF=1,则(AL)<--(AL)-60,CF=1
第3章汇编语言程序格式
17
Compact 紧凑模型适合于数据量大但代码量小的 程序。在该模型下,代码段被限制在一个不大于 64KB的段内;而数据段则可以有多个,超过64KB。 代码是近访问的,而数据则可为远访问的。 Medium 中型模型是与紧凑模型互补的模型,适 合于数据量小但代码量大的程序。中型模式的代 码段可以超过64KB,有多个;但数据段只能有一 个不大于64KB的段。数据是近访问,而代码可远 访问。 Large 大型模式允许的代码段和数据段都有多个, 都可以超过64KB;但全部的静态数据(不能改变 的数据)仍限制在64K字节内.数据和代码都可以 远访问。
24
3.2.2 程序开始和结束伪操作
程序开始可用Name和TITLE作为模块的名字。 NAME的格式:NAME 模块名 汇编语言将以给出的”模块名”作为模块的名 字。 TITLE的格式:TITLE 标题 TITLE伪操作可指定列表文件中的每一页上打 印的标题 END表源程序结束的伪操作,格式为:END [标号] 用来指示汇编程序MASM到此结束汇编过程。 源程序的最后必须有一条END语句。可选的标号用 于指定程序开始执行点,连接程序将据此设置CS : 25 IP值
(3)使用类型是支持32位段而设置的属性,用来 说明使用16位寻址方式还是32位寻址方式 对于16位x86 CPU来说,它默认是16位段, 即USE16 而对于汇编32位x86 CPU指令时,它默认 采用32位段,即USE32;但可以使用USE16指 定标准的16位段 编写运行于实地址方式(8086工作方式)的汇 编语言程序,必须采用16位段
DOS下编程可选择前六种模型,一般可以选用 SMALL模型,TINY模式产生COM程序,其他 模型产生EXE程序,FLAT模型只能用于32位程 序。
8086汇编语言语句的类型和格式
1) 名字
汇编语言语句的第一个组成部分是名字()。在指令存储地址(逻辑地址)。供、和等指令作操作数使用, 以寻找转移目标地址。并非每条指令语句必须有标号,但如果 一条指令前面有一标号,则程序中其它地方就可以引用这个标 号。在例5.1中,、就是标号。标号后面有一个冒号。
③ 变量的类型属性有(字节)、(字)、 (双字)、 (四 字)、(十字)等,表示数据区中存取操作对象的大小。
• 例 1编写一个两字相加的程序。
•
;定义数据段
• 1 1234H
;定义被加数
• 2 5678H
;定义加数
•
;数据段结束
•
;定义附加段
•
2 (?) ;定义存放结果区
•
;附加段结束
•
;定义代码段
表达式的意义
OFFSET 变量名或标号
取出变量名或标号所在段的偏移地址
SEG 变量名或标号
取出变量或标号所在段的段地址
TYPE 变量名或标号
取出变量或标号的类型
SIZE 变量名
取出变量的大小
LENGTH 变量名
取去出变量的长度
注意:=*
• 例2 逻辑运算符的应用 • , 10101010B • ,11110000B 10111101B • ,10100000B 00000101B • 例3 关系运算符的应用 • ,5 101B • ,10H 16
5.2.2 汇编语言语句的类型和格式 1.语句的类型
汇编语言源程序中的语句可以分为两种类型:指令语句,伪 指令语句, 宏指令语句。 (1) 指令语句:它是能产生目标代码, 可以执行的能完成特定功 能的语句。
(2) 伪指令语句:它是一种不产生目标代码的语句,它仅仅在汇 编过程中告诉汇编程序应如何汇编。例如,告诉汇编程序已写出 的汇编语言源程序有几个段,段的名字是什么;定义变量,定义 过程,给变量分配存储单元,给数字或表达式命名等。显然,伪 指令语句是汇编程序在汇编时使用的。
8086汇编基本语法
一、汇编语言概述汇编语言是一种面向机器的程序设计语言,与机器硬件密切相关,具有自己独特的编程优势和专门的应用领域。
汇编语言程序运行速度快、占用资源少,可以充分利用硬件资源,设计完成任意功能的程序。
但学习、编程较难,编程效率低,兼容性差。
因此,主要用于系统软件和控制软件的设计。
远不如高级语言应用广泛。
1. 汇编语言程序的执行步骤第一步:使用一种文本编辑软件编写汇编语言源程序,保存为文本文件。
第二步:使用系统软件“汇编程序”将汇编语言源程序汇编成目标程序,目标程序即为机器语言程序。
在汇编的过程中,汇编程序会发现程序中的语法错误,并指出在哪一行,是什么类型的错误。
如没有错误,汇编成功,但这时程序还不能执行。
注:机器语言程序即为二进制程序,所有高级语言和汇编语言都需要最后转换成二进制程序才能够被计算机系统执行。
第三步:使用系统软件“链接程序”将目标程序连接、装配形成可执行程序,在该链接过程中排查错误通过后,即可装入主存运行。
二、汇编语言的语句类型和格式2.1 汇编语言语句的类型:◆指令语句:包含在指令集中,每一个语句汇编后产生一组二进制数目标代码,可被CPU执行。
◆伪指令语句:汇编后不产生目标代码,用于定义段、子程序、常量、变量,以及给变量分配存储单元。
◆宏指令语句:用户定义的一个指令序列集合,汇编后在引用的地方展开成相应的指令序列。
用于提高编程效率2.2 汇编语言语句的格式汇编语言程序中每个语句可以由4项组成,格式如下:指令中的各项要用分隔符分开,名字项是标号时后面要有冒号作为分隔开,为增加查询可读性,对指令做解释时,要将指令和解释内容用分号分隔开,操作数之间用逗号分开,其他用空格分开。
(1) 名字项:用来标识段名、子程序名、宏指令名、标号、变量名和常量名等。
1.可用符号包括数字、字母和特殊符号“?”、“$”、“@”、“_”;2.数字不能作为名字(变量或标号)的第一个符号;3.名字长度不能超过31个字符;4.汇编语言中有特定含义的保留字,如操作码、寄存器名等,不能作为名字使用;5.汇编语言不区分字母的大小写。
8086汇编语言
8086汇编语言8086汇编语言是一种用于编写Intel 8086微处理器的程序的低级语言。
它是x86指令集的最早版本,是现代PC上使用的汇编语言的基础。
本文将介绍8086汇编语言的基本概念、指令系统、程序格式、程序设计方法和应用实例,以帮助读者掌握这门古老而强大的语言。
什么是8086汇编语言8086汇编语言是一种用助记符表示机器指令的语言,它可以直接操作CPU、寄存器、内存和端口等硬件资源。
8086汇编语言的优点是执行速度快、占用空间少、控制能力强,缺点是可读性差、可移植性差、编程难度大。
8086汇编语言的程序由三个部分组成:伪指令、指令和数据。
伪指令是用来告诉汇编程序如何处理源程序的命令,如定义变量、分配内存、设置段属性等。
指令是用来控制CPU执行操作的命令,如数据传送、算术运算、逻辑运算、控制转移等。
数据是用来存储或操作的信息,如常数、变量、字符串等。
8086汇编语言的程序需要经过汇编程序(如MASM)将源代码转换为机器代码,然后再由链接程序(如LINK)将多个目标模块连接成可执行文件,最后由加载程序(如DOS)将可执行文件加载到内存中运行。
8086微处理器8086微处理器是Intel公司于1978年推出的一款16位微处理器,它是x86系列微处理器的第一代产品,也是IBM PC机的原始CPU。
它具有以下特点:工作频率为5MHz~10MHz,每秒可执行约33万条指令内部结构由总线接口单元(BIU)和执行单元(EU)组成,实现了取指和执行的并行操作寄存器由四个16位通用寄存器(AX, BX, CX, DX)、四个16位段寄存器(CS, DS, SS, ES)、一个16位标志寄存器(FLAGS)和一个16位指令指针(IP)组成指令系统由100多条指令组成,分为数据传送类、算术运算类、位操作类、控制转移类和处理机控制类五大类存储器管理采用了分段机制,每个段最大为64KB,总容量为1MB支持两种工作模式:实地址模式和保护模式,实地址模式下可以直接访问物理地址,保护模式下可以实现多任务和内存保护8086汇编语言程序格式8086汇编语言程序一般采用以下格式:[段名] segment [段属性][伪指令][数据][子程序][段名] ends其中:段名是用来标识一个段的名称,可以自定义,但不能与伪指令或寄存器重名段属性是用来设置一个段的类型和特征,如代码段(code)、数据段(data)、堆栈段(stack)等伪指令是用来定义变量、分配内存、设置偏移量等功能的命令,如DB, DW, DD, ORG, ASSUME等数据是用来存储或操作的信息,如常数、变量、字符串等子程序是用来实现特定功能的代码段,如输入输出、排序、查找等一个典型的8086汇编语言程序由以下三个段组成:数据段(data segment):用来存放程序中用到的数据,如变量、常量、字符串等代码段(code segment):用来存放程序中的指令,如数据传送、算术运算、控制转移等堆栈段(stack segment):用来存放程序中的临时数据,如函数调用时的参数、返回地址、局部变量等一个简单的8086汇编语言程序示例如下:data segmentmsg db 'Hello, world!', '$' ;定义一个字符串变量data endscode segmentassume cs:code, ds:data ;告诉汇编程序代码段和数据段的名称start: ;程序入口标号mov ax, data ;将数据段地址加载到ax寄存器mov ds, ax ;将ax寄存器的值传送到ds寄存器,设置数据段寄存器mov dx, offset msg ;将字符串变量的偏移地址加载到dx寄存器mov ah, 9 ;设置ah寄存器为9,表示调用DOS中断的输出字符串功能int 21h ;调用DOS中断21h,输出字符串mov ah, 4ch ;设置ah寄存器为4ch,表示调用DOS中断的退出程序功能int 21h ;调用DOS中断21h,退出程序code endsend start ;告诉汇编程序程序结束的位置8086汇编语言指令系统8086汇编语言指令系统由100多条指令组成,分为五大类:数据传送类:用来实现数据在寄存器、内存和端口之间的传送,如MOV, PUSH, POP, XCHG等算术运算类:用来实现数据的加减乘除等运算,如ADD, SUB, MUL, DIV等位操作类:用来实现数据的位移、旋转、逻辑和测试等操作,如SHL, SHR, ROL, ROR, AND, OR, XOR, NOT, TEST等控制转移类:用来实现程序的顺序、条件和无条件跳转,如JMP, JZ, JNZ, JCXZ, CALL, RET等处理机控制类:用来实现处理机状态的设置和查询,如CLC, STC, CMC, CLD, STD, CLI, STI等每条指令由助记符和操作数组成,助记符表示指令的功能,操作数表示指令的对象。
汇编(三)——8086的寻址方式
汇编(三)——8086的寻址方式指令由操作码和操作数两部分组成。
操作码说明计算机要执行哪种操作,是指令中不可缺少的部分。
操作数是指令执行的参与者,即各种操作对象。
用助记符表达的指令格式通常为:操作码操作数1,操作数2 ;注释双操作数中,操作数2称为源操作数,操作数1称为目的操作数。
一、8086的机器代码格式8086的机器代码(Machine Code)格式,操作码占1个或2个字节,后面的各个字节知名操作数。
其中“mod reg r/m”字节表明殉职操作数的方式,“位移量”字节给出某些寻址方式需要的对基地址的偏移量,“立即数”字节给出立即寻址方式需要的数值本身。
如下图代码指令一般占用1~6个字节,细分如下:其详细的通用指令格式如图:其中第一字节称为操作码字节。
2~7位为操作码(OPCODE),第1位称为D位,指出操作数传输的方向,D=0时,表示第2字节REG字段(第2字节3~5位)给出的寄存器为源操作数寄存器。
D=1时,REG字段指出的寄存器为目标操作数。
第一字节第0位为W位,指出操作数是字节还是字。
W=0表示参加运算的数为字节,W=1表示参加运算的数为字。
8086指令的寻址方式字节编码:二、寻址方式1、立即数寻址方式——指令中的操作imm直接存放在极其代码中,紧跟在操作码之后。
例:MOV AL,05H2、寄存器寻址方式——操作数存放在CPU的内部寄存器reg中,可以是8位寄存器r8:AH/AL/BH/BL/CH/CL/DH/DL;也可以是16位寄存器r16:AX/BX/CX/DX/SI/DI/BP/SP,操作数还可以存放在4个段寄存器seg中:CS/DS/SS/ES。
例:MOV AX,1234H ;源操作数采用寄存器寻址,目的操作数为立即数寻址MOV BX,AX ;两个操作数均为寄存器寻址3、存储器寻址方式——寻址贮存中存储的操作数称为存储器寻址方式,也称为主存寻址方式。
在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章8086汇编语言程序格式练习题3.4.1 单项选择题1.下列选项中不能作为名字项的是()。
A.FH B.A3 C.3B D.FADC2.下列指令不正确的是()。
A.MOV AL,123 B.MOV AL,123QC.MOV AL,123D D.MOV AL,123H3.下列指令不正确的是()。
A.MOV BL,OFFSET A B.LEA BX,AC.MOV BX,OFFSET A D.MOV BX,A4.若定义“BUF DB 1,2,3,4”,执行MOV AL,TYPE BUF 后AL=()。
A.0 B.1 C.2 D.35.若定义“A EQU 100”,执行“MOV AX,A”后,AX=()。
A.A的偏移地址B.A单元中的内容C.100 D.A的段地址6.若定义“B DW 1,2,10 DUP(0)”,则该伪指令分配()字节单元。
A.10 B.20 C.22 D.247.若定义“C DD 2,4”,则该伪指令分配()个字节单元。
A.2 B.4 C.6 D.88、伪指令是()规定的汇编说明符,它在源程序汇编时进行说明。
A、DEBUGB、LINKC、MASMD、EDIT9.在上机操作过程中,MASM命令执行后,除了生成一个目标文件外,根据选择还可以生成一个()文件。
A..LST B..EXE C..MAP D..ASM10.LINK命令执行后可以生成一个以()为扩展名的文件。
A.ASM B.EXE C.OBJ D.COM11.一个段最大可定义()字节。
A.1M B.64K C.32K D.16K12.若要求一个段的起始位置能被256整除的单元开始,在定位方式选项中应选()。
A.BYTE B.WORD C.PARA D.PAGE13.宏指令与子程序相比,在多次调用时,宏指令调用的目标程序长度比子程序调用的()。
A.相同B.长C.短D.不定14.宏指令与子程序相比,子程序调用的执行速度比宏指令的()。
A.相同B.快C.慢D.不定15.ASSUME伪指令说明了汇编程序所定义段与段寄存器的关系,它只影响()的设定。
A.源程序B.目标程序C.汇编程序D.连接程序16.设A和B为字变量,C为标号,下列指令中不正确的是()。
A.MOV AX,A B.MOV AX,BC.JNE A D.JMP C17.代码段中的语句()表示该段结束。
A.ASSUME B.CODE ENDSC.START:MOV AX,DATA D.END START18.过程定义语句以“过程名PROC”开始,以过程名()结束。
A.ENDS B.ENDP C.ENDM D.END19.一个段可以放在内存的任何地方,但起始地址应该从一个能被()整除的单元地址开始。
A.16 B.32 C.64 D.12820.在数据定义语句中,下列描述不正确的是()。
A.存放存储单元的地址可以用字节表示B.存放存储单元的地址可以用字表示C.存放存储单元的地址可以用双字表示D.存放存储单元的地址可以用四字表示3.4.2 多项选择题1.在8086汇编语言中,语句的种类有()。
A.指令性语句B.指示性语句C.汇编语句D.说明语句2.在下列的选项中,不能作为名字的有()。
A.AX B.3MA C.ABCD D.MOV3.在下列的选项中,作为变量的类型有()。
A.字节B.字C.双字D.近程4.在下列的选项中,作为标号的类型有()。
A.DB B.DD C.NEAR D.FAR5.在运算符OFFSET后可以是()。
A.标号B.变量C.表达式D.数字6.在指令“LEA BX,X”中的X可以是()。
A.标号B.变量C.表达式D.数字7.不能分配内存单元的伪指令语句有()。
A.EQU B.DW C.= D.DD8.定义一个段的伪指令语句有()。
A.NAME SEGMENT B.NAME PROCC.NAME ENDP D.NAME ENDS9.定义一个过程的伪指令语句有()。
A.NAME SEGMENT B.NAME PROCC.NAME ENDP D.NAME ENDS10.宏指令与子程序的主要区别在于()。
A.完成的功能完全不同B.目标程序的长度不同C.执行程序的速度不同D.汇编时处理的方式不同3.4.3 填空题1.汇编语言的语句有指令语句和,宏指令是的另一种形式。
2.标号的三个属性是段地址、和类型。
3.变量的三个属性是段地址、和类型。
4.标号的类型有和。
5.变量的类型有、、、四字(八字节)和十字节。
6.等价语句不能重复定义、等号语句重复定义。
7.等价语句和等号语句内存单元。
8.语句“MOV BX,OFFSET A”可用一条指令代替。
9.若定义“A DW 1234H”,指令“MOV AL,BYTE PTR A”执行后,AL= 。
10.若定义“B DW 1,2,30 DUP(5)”,则B分配的内存单元数是字节。
11.若定义C DW ‘AB’,则“MOV AL,BYTE PTR C”执行后,AL= 。
12.在程序的操作数项中使用的段名、标号名、变量名和符号名都必须在源程序中先,否则汇编程序进行汇编时就会。
13.使用伪指令和定义一个段。
14.使用伪指令和定义一个过程。
利用过程定义语句可以把程序分成小段,以便于、、调试和修改。
15.伪指令表示整个程序结束。
16.宏展开就是用宏定义取代源程序中的宏指令。
若实元个数大于变元个数,则多余的实元。
若实元个数少于变元个数,则多余的变元用代替。
17.汇编语言源程序经产生目标文件,它直接在机器上运行,还必须经过后形成可执行文件。
18.在数据段中使用字符串时,该字符必须用括起来。
当定义含有多个字符的字符串时,只能使用伪指令。
19.用汇编语言编写的程序称为,其扩展名为。
20.在源程序中只要对某一独立功能的程序段进行一次宏定义,就可以次调用它。
3.4.4 简答题1.按照下列题目要求写出每小题的伪指令。
(1)将12H、34H、56H、78H存放在字节变量A的存储单元中。
(2)将12、1638H、0E52H存放在字变量B的存储单元中。
(3)将字符串COMPUTER存放在C变量的存储单元中。
(4)将D字节变量的100个单元设置为0。
(5)将D的偏移地址存放在E变量中。
2.设数据段定义如下:DATA SEGMENTBUF1 DB 2,3BUF2 DW 4,5,6BUF3 DB 2,100 DUP(0)BUF4 DB ‘ABCDE’BUF5 DW BUF3BUF6 EQU $-BUF3DATA ENDS请回答:(1)该数据段占用的内存有多少字节?(2)BUF5单元中的值是多少?(3)BUF6的值是多少?(4)执行“MOV AL,BUF4+2”指令后,AL= 。
(5)执行“MOV AX,WORD PTR BUF1”指令后,AX= 。
3.设数据段定义如下:DATA SEGMENTA DW 23,45B DW ‘EF’C = $+5D DB 10 DUP(?)E EQU $-DF DW DDATA ENDS请回答:(1)该数据段占用的内存有多少字节?(2)C的值为多少?(3)E的值为多少?(4)执行“MOV AX,F”指令后,AX= 。
(5)执行“MOV AL,BYTE PTR B”指令后,AL= 。
4.设数据段定义如下:DATA SEGMENTBUF1 DB 36H,3,2BUF2 DW 1364H,253HBUF3 DB 30 DUP(‘ABC’)BUF4 DW $—BUF3BUF5 DB 100 DUP(0)DATA ENDS请回答:(1)执行“MOV AX,WORD PTR BUF1”后,AX= 。
(2)执行“LEA BX,BUF3”后,BX= 。
(3)执行“MOV CX,BUF4”后,CX= 。
(4)执行“MOV AL,BUF3+2”后,AL= 。
(5)执行“MOV AX,BUF2+1”后,AH= 。
5.设数据段定义如下:DATA SEGMENTA1 DB 10 DUP(‘’)A2 DW 1234H,5678H,341HA3 DW $—A2A4 DW A2A5 DB 7,3,2DATA ENDS请回答:(1)用一条指令将A2的偏移地址送BX。
(2)将A1的第6个字节送字符‘A’的ASCII码(3)将A2的第3个字节的内容送AL。
(4)将A2的第3个单元开始的字内容送AX。
(5)用一条伪指令求出A1和A2所占字节数(设伪指令的变量为C)。
6.设数据段定义如下:DATA SEGMENTA DW 2,3B DB 100 DUP(0)C DD 12345678HD DB $—BE DW BDATA ENDS请回答:(1)用一条指令将C的第2个字节的内容取出并送AL。
(2)执行完“MOV AL,LENGTH B”后,AL= 。
(3)执行完“MOV AL,TYPE C”后,AL= 。
(4)执行完“MOV AL,LENGTH A”后,AL= 。
(5)执行完“MOV AL,SIZE B”后,AL= 。
(6)执行完“MOV AL,D”后,AL= 。
(7)执行完“MOV BX,E”后,BX= 。
(8)执行完“MOV AL,A+2”后,AL= 。
7.设数据段定义如下:DATA SEGMENTA DW 1,2,3B DB ‘ABCDEF’C DW ‘AB’D DB 12H,34H,56HE = $+5DATA ENDS请回答:(1)用一条指令将B字符串中的字符‘E’送AL。
(2)用一条指令将D变量中的第2个、第3个字节的内容送AX。
(3)用一条指令将A变量中的第3个字节送AL。
(4)“MOV AX,C”执行后,AX= 。
(5)“MOV AL,E”执行后,AL= 。
8.按下列要求写出数据段DA TA的相应内容。
(1)TAB是0~9的ASCII码表。
(2)STR是字符串变量,字符串为COMPUTER。
(3)BUF是100个空格的缓冲区。
(4)COUNT是计算BUF缓冲区中字节数的常量变量。
(5)AD是存放TAB的偏移地址变量。
(6)D是字节变量,数值为15H,2,39.按下列要求写出数据段DSEG的相应内容。
(1)STR是存放字符ABCDE的字符串变量。
(2)D是存放十进制BCD数据372,2673,6852的字变量。
(3)BUF是存放10个0的字节缓冲区。
(4)E是存放BUF偏移地址和段地址的双字变量。
(5)F是常量,其值为5。
10.简述宏指令与子程序的主要区别。
11.在操作系统状态下,执行MASM程序对某一汇编语言源程序进行汇编后,除产生目标文件外,通过对答方式还可以产生对应源程序的另外两个文件。
请指出:(1)这两个文件的扩展名是什么?(2)这两个文件的功能是什么?12.简述汇编程序对宏调用作宏展开的过程。
13.设数据段定义如下:DA TA SEGMENTA DW 1,2B DB 3,4C DB ‘ABCD’D = $—CE DB 3 DUP(0)DA TA ENDS请回答:(1)画出该数据段在内存中的分配示意图。