07章 微型计算机汇编语言及汇编程序
7 微型计算机汇编语言及汇编程序 郑学坚

第7章 微型计算机汇编语言及汇编程序(Ⅰ)教学目的与要求理解与回顾计算机中最基本的电路元件及最主要的数学知识,包括进制、计算机信息表示、主要编码和二进制加减法电路等内容,作为本书的基础。
(Ⅱ)重点、难点掌握:掌握汇编语言的格式、语句行的构成、 指示性语句、指令性语句、汇编语言程序设计的过程、程序设计;汇编语言程序的一般格式,源程序的分段结构;语句中标记,符号,表达式的要求和含义,指令性语句和指示性语句的意义和区别;指令性语句在程序设计中的应用,指令前缀的含义和操作;掌握输入单个字符,屏幕显示单个字符及字符串的功能调用及在程序设计中的正确应用。
理解:汇编语言中的表达式和运算符,运算符的优先级,DOS功能调用了解:常用的软中断,表的处理程序(Ⅲ)主要外语词汇1.SEGMENT:段2.OFFSET:段内偏移量3.MASM:宏汇编程序4.OBJ:Objective,目标代码文件5.Debug:调试程序(Ⅳ)授课内容1.宏汇编语言的基本语法2.伪指令3.宏指令*4.系统功能调用5.汇编程序的功能及汇编过程6.汇编语言程序设计(Ⅴ)辅助教学情况(多媒体课件、绘图、板书、标本、示教等)多媒体教学课件(POWERPOINT)、实验设备(Ⅵ)复习思考题、作业题1.课后作业:P194 7.1 7.2 7.3(Ⅶ)参考教材或资料1.郑学坚,周斌. 微型计算机原理及应用(第三版). 北京:清华大学出版社,20012.郑学坚,马力妮. 周斌微型计算机原理及应用试验指导. 北京:清华大学出版社,20013.吴向军,罗源明,刘光旋. 汇编语言程序设计. 北京:高等教育出版社,20024.王正智. 8086/8088宏汇编语言程序设计教程. 北京:电子工业出版社,19925.尹彦芝. IBM-PC宏汇编语言程序设计. 北京:水利电力出版社,19876.幸云辉. 16位微型计算机原理与应用. 北京:北京邮电学院出版社,19917.邹逢兴. 微型计算机接口原理与技术. 长沙:国防科技大学出版社,19938.周佩玲,彭虎,傅忠谦. 微机原理与接口技术. 北京:电子工业出版社,2005计算机程序设计语言1.机器语言(Machine Language)计算机能够直接识别的用二进制代码表示的机器指令,机器指令是在微处理器设计时所规定的,不同类型的CPU,其机器语言必定是不同的。
微型计算机汇编语言及汇编程序

变量通常以变量名的形式出现在程序中,它可 以认为是数据所在存储单元的符号地址。
宏汇编语言的基本语法
常数、变量和标号
变量
变量的定义与预置(1/2)
为变量分配存储单元,且对该单元命名,同时 变量的3个属性: 给该变量分配初值 •段属性(SEG):变量所在的段地址。取该变量 时,必须将该变量所在的段地址存放在DS中 变量定义伪指令DB、DW、DD •偏移量属性(OFFSET):变量在段中的相对位 例: 置(即变量在段内的偏移量) DATA1 DB 12H •类型属性(TYPE):变量占用内存单元的字节 DATA2 DW 2234H 数。DB为字节,DW为字,DD为双字 DATA3 DD 13572468H
宏汇编语言的基本语法
表达式与运算符 逻辑运算符
AND
OR XOR NOT
与运算符
或运算符 异或运算符 非运算符
例:24H AND 0FH=04H
例:24H OR 0FH=2FH
例:24H XOR 0FH=2BH 例:NOT 24H=0DBH
逻辑运算与逻辑运算指令的区别: 逻辑运算是在汇编时完成的,而逻辑运算指 令是在程序执行时完成的。
宏汇编语言的基本语法
表达式与运算符 分离运算符
取表达式的低字节LOW
例:MOV AL,LOW 3088H
MOV BL, HIGH SSY
;AL88H
;如SSY为2055H,执行后BL20H
宏汇编语言的基本语法
表达式与运算符 运算符的优先级
优先级别 高级 0 1 2 3 4 括号中的表达式 LENGTH、SIZE、WIDTH、MASK PTR、OFFSET、SEG、TYPE、THIS、段前缀 HIGH、LOW */ MOD SHL SHR 运算符
第7章 微型计算机汇编语言及汇编程序

伪指令语句格式: 伪指令语句格式:
常数、变量和标号: 常数、变量和标号:
常数、变量和标号是汇编语言能识别的数据项, 常数、变量和标号是汇编语言能识别的数据项,它是指令和 伪指令语句中操作数的基本组成部分。一个数据项往往包含 伪指令语句中操作数的基本组成部分。 数值和属性两部分, 数值和属性两部分,这两部分对于一条语句汇编成机器目标 代码都有直接本语法
常数: 常数:
常数是没有任何属性的纯数值,在汇编期间, 常数是没有任何属性的纯数值,在汇编期间,它的值已能完 全确定,且在程序运行中,它也不会发生变化。 全确定,且在程序运行中,它也不会发生变化。它有以下几 种类型: 种类型: 二进制数: 结尾, 组成的数字序列, (1)二进制数:以B结尾,由0、1组成的数字序列,如 01011010B。 01011010B。 八进制数: 结尾, 0~7组成的数字序列 组成的数字序列, (2)八进制数:以O或Q结尾,由0~7组成的数字序列,如 723Q,35O。 723Q,35O。 十进制数: 结尾(可以省略) 0~9组成的数字序列 组成的数字序列, (3)十进制数:以D结尾(可以省略),由0~9组成的数字序列, 129,129D。 如129,129D。 十六进制数: 结尾, 0~9、A~F(a~f)组成的序列 组成的序列, (4)十六进制数:以H结尾,由0~9、A~F(a~f)组成的序列,如 3A5BH,0A5FDH,0FB12H。 3A5BH,0A5FDH,0FB12H。 实数:由整数、小数和指数3部分组成, (5)实数:由整数、小数和指数3部分组成,一般用十进制数 给出,其格式如下: 给出,其格式如下: 整数部分.小数部分E 指数部分, 5.213E±整数部分.小数部分E±指数部分, 如:5.213E-4。
变量: 变量:
什么是汇编程序

什么是汇编程序
汇编程序是一种将汇编语言源代码转换成机器语言目标代码的程序。
汇编语言是一种低级语言,与特定计算机体系结构密切相关,使用助记符来代表计算机指令和数据,比直接使用机器语言更容易理解和编写。
汇编程序接收编写好的汇编语言源代码作为输入,然后将其转换成机器语言,即计算机可以直接执行的指令。
这个过程包括将汇编语言指令转换成二进制形式,并且可能还包括一些优化步骤以提高目标代码的效率。
与高级语言编译程序不同,汇编程序不会对源代码进行高级的语义分析或优化,它主要是负责将汇编语言指令转换成等效的机器语言指令。
使用汇编语言编写程序可以直接操作硬件和资源,通常用于对性能和资源利用率要求较高的应用,如嵌入式系统、驱动程序和性能关键的应用程序。
1/ 1。
微机原理及应用参考答案

参考答案第一章计算机中的数制和码制第二章计算机概述一、填空题1.82. 23.10244.25.5、11001.1、00100101.0101B5.1000010B、42H、66H6.41.625、29.AH7.10001101B8.11001001、110010109.-128 ~ +12710.系统软件、应用软件11.电子管、超大规模集成电路二、单选题1. A 2. C 3. D4. C 5. A 6. C三、分析简答题1.8086 CPU的总线根据其中信息传送的类型可分为几种?哪几种?答:8086 CPU的总线根据其中信息传送的类型可分为三种种,分别是:数据总线、地址总线和控制总线2.写出-25的原码、反码、补码,并将补码转换成十六进制数(设机器字长为8位)。
答:X=-25=-11001BX原码:10011001BX反码:11100110BX补码:11100111B = E7H3.举例说明什么是机器数,什么是真值?答:将符号数值化了的数称为机器数。
如:-18=-10010B(真值);机器数为:10010010B第三章半导体存贮器一、填空题1.ROM、RAM2.6个3.8、4二、单选题1. A 2. B 3. D 4. B5. C 6. C 7. B三、分析简答题1.在对存储器芯片进行片选时,全译码方式、部分译码方式和线选方式各有何特点?答:①全译码方式:存储器芯片中的每一个存储单元对应一个唯一的地址。
译码需要的器件多;②部分译码方式:存储器芯片中的一个存储单元有多个地址。
译码简单;③线选:存储器芯片中的一个存储单元有多个地址。
地址有可能不连续。
不需要译码。
四、硬件接口设计题1.答:(1)(2) 存储器类型为RAM 总容量为4K×8地址范围: 0#2000H-27FFH1# 2800H-2FFFH2.答:(9分)(1)存储器类型:RAM该系统的存储器容量为:6K×8位(或:6K字节)(2)1#芯片的地址范围:1000H ~ 17FFH2#芯片的地址范围:0800H ~ 0FFFH3#芯片的地址范围:0000H ~ 07FFH3.1)1K×42)2K×8或2KB3)地址分配范围第一组:A19~ A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0最小地址0 ~ 0 0 0 0 0 0 0 0 0 0 0 00000H~ 最大地址0 ~ 0 1 1 1 1 1 1 1 1 1 1 003FFH 第二组:0 ~ 1 0 0 0 0 0 0 0 0 0 0 00400H~0 ~ 1 1 1 1 1 1 1 1 1 1 1 007FFH第四章微型计算机及微处理器的结构和组成一、填空题1.BIU、EU、指令的译码和指令执行2.4、16、16、6、203.8、164.1、2二、单选题1. B 2. B三、分析简答题1.8086/8088微处理器内部有那些寄存器,它们的主要作用是什么?答:执行部件有8个16位寄存器,AX、BX、CX、DX、SP、BP、DI、SI。
微机原理 第7章 微型计算机汇编语言及汇编程序

3) 操作数
汇编语言语句中的第三个组成部分是操作数。在指令语句中 是指令的操作数,可能有单操作数或双操作数,也可能无操作数; 而在伪指令中可能有更多个操作数。当操作数不止一个时,相互 之间应该用逗号隔开。
可以作为操作数的有常数、寄存器、标号、变量和表达式等。 (1) 常数。常数就是指令中出现的那些固定值,可以分为数值常 数和字符串常数两类。例如,立即数寻址时所有的立即数、直接 寻址时所有的地址、ASCII字符串等都是常数。常数是除了自身 的值以外,没有其他属性的数值。在源程序中,数值常数按其基 数的不同,可有二进制数、八进制数、十进制数、十六进制数等 几种不同表示形式。汇编语言用不同的后缀加以区别。
言语句来说,注释部分并不是必要的,但是加上适当的注释以后,
注释前面要求加上分号(;)。如果注释的内容较多,超过一行, 以表示对一个程序段的说明。 汇编程序对于注释不予理会,即注释对汇编后产生的目标程
则换行以后前面还要加上分号。注释也可以从一行的最前面开始,
序没有任何影响。
7.2 伪 指 令
一、 数据定义伪指令
② 变量的偏移量属性是该变量所在段的起始地址与变量的 地址之间的字节数。 ③ 变量的类型属性有BYTE(字节)、WORD(字)、 DWORD (双字)、 QWORD (四字)、TBYTE(十字)等,表示数据区中存取 操作对象的大小。 2) 助记符 汇编语言语句中的第二个组成部分是助记符(Memonic)。 在指令语句中的第二部分是CPU指令系统中指令的助记符, 如MOV、ADC等。助记符约有90多种,在第5章中已经进行了 详细的讨论。 在伪指令语句中的第二部分是伪指令的定义符。它们在程 序中的作用是定义变量的类型、定义段以及告诉汇编程序结束 汇编等。关于伪指令的作用和使用方法,将在之后讨论。
微机原理汇编语言程序设计ppt课件

烧伤病人的治疗通常是取烧伤病人的 健康皮 肤进行 自体移 植,但 对于大 面积烧 伤病人 来讲, 健康皮 肤很有 限,请 同学们 想一想 如何来 治疗该 病人
4.2.3.3 表达式—分析运算符
分析运算符包括:SEG、OFFSET SEG:取变量/标号的段地址 OFFSET:取变量/标号的偏移地址
烧伤病人的治疗通常是取烧伤病人的 健康皮 肤进行 自体移 植,但 对于大 面积烧 伤病人 来讲, 健康皮 肤很有 限,请 同学们 想一想 如何来 治疗该 病人
4.2.3.3 表达式
表达式由标号、常量、变量等加上必要的运算符构成 有数字表达式和地址表达式两种 汇编时按优先规则对表达式进行计算,计算出具体的数值
ASSUME DS:DATA, ES:EXTRA代码段 CODE ENDS
MAIN PROC FAR
; ----------------------------------------------
MOV AX, DATA
END MAIN
MOV DS, AX
烧伤病人的治疗通常是取烧伤病人的 健康皮 肤进行 自体移 植,但 对于大 面积烧 伤病人 来讲, 健康皮 肤很有 限,请 同学们 想一想 如何来 治疗该 病人
4.2.3.1 常量
常量操作数:
数值常数:11001000B,0FA21H,329D(329) 字符常数:‘ABCD’ (41H 42H 43H 44H)
例:
MOV AX, 0FA21H VAR DB 329 STR DB ‘ABCD’
烧伤病人的治疗通常是取烧伤病人的 健康皮 肤进行 自体移 植,但 对于大 面积烧 伤病人 来讲, 健康皮 肤很有 限,请 同学们 想一想 如何来 治疗该 病人
微机原理与接口技术第二版课后习题答案完整版

习题11.什么是汇编语言,汇编程序,和机器语言答:机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合;汇编语言是面向及其的程序设计语言;在汇编语言中,用助记符代替操作码,用地址符号或标号代替地址码;这种用符号代替机器语言的二进制码,就把机器语言编程了汇编语言;使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序;2.微型计算机系统有哪些特点具有这些特点的根本原因是什么答:微型计算机的特点:功能强,可靠性高,价格低廉,适应性强、系统设计灵活,周期短、见效快,体积小、重量轻、耗电省,维护方便;这些特点是由于微型计算机广泛采用了集成度相当高的器件和部件,建立在微细加工工艺基础之上;3.微型计算机系统由哪些功能部件组成试说明“存储程序控制”的概念;答:微型计算机系统的硬件主要由运算器、控制器、存储器、输入设备和输出设备组成;“存储程序控制”的概念可简要地概括为以下几点:①计算机指硬件应由运算器、存储器、控制器和输入/输出设备五大基本部件组成;②在计算机内部采用二进制来表示程序和数据;③将编好的程序和原始数据事先存入存储器中,然后再启动计算机工作,使计算机在不需要人工干预的情况下,自动、高速的从存储器中取出指令加以执行,这就是存储程序的基本含义;④五大部件以运算器为中心进行组织;4.请说明微型计算机系统的工作过程;答:微型计算机的基本工作过程是执行程序的过程,也就是CPU自动从程序存放的第1个存储单元起,逐步取出指令、分析指令,并根据指令规定的操作类型和操作对象,执行指令规定的相关操作;如此重复,周而复始,直至执行完程序的所有指令,从而实现程序的基本功能;5.试说明微处理器字长的意义;答:微型机的字长是指由微处理器内部一次可以并行处理二进制代码的位数;它决定着计算机内部寄存器、ALU和数据总线的位数,反映了一台计算机的计算精度,直接影响着机器的硬件规模和造价;计算机的字长越大,其性能越优越;在完成同样精度的运算时,字长较长的微处理器比字长较短的微处理器运算速度快;6.微机系统中采用的总线结构有几种类型各有什么特点答:微机主板常用总线有系统总线、I/O总线、ISA总线、IPCI总线、AGP总线、IEEE1394总线、USB总线等类型;7.将下列十进制数转换成二进制数、八进制数、十六进制数;① 4.7510=0100.112=4.68=4.C16② 2.2510=10.012=2.28=2.816③ 1.87510=1.1112=1.78=1.E168.将下列二进制数转换成十进制数;① 1011.0112=11.610② 1101.010112=13.5810③ 111.0012=7.2109.将下列十进制数转换成8421BCD码;① 2006=0010 0000 0000 0110BCD② 123.456=0001 0010 0011.0100 0101 0110BCD10.求下列带符号十进制数的8位基2码补码;① +127补= 01111111② -1= 11111111补③ -128= 10000000补= 00000001④+1补11.求下列带符号十进制数的16位基2码补码;① +655补= 0000001010001111② -1补=1111111111111110③ -3212补=1111011101011100④ +100=0000000001100100补习题 21.8086 CPU在内部结构上由哪几部分组成各部分的功能是什么答:8086 CPU内部由两大独立功能部件构成,分别是执行部件和总线接口部件;执行部件负责进行所有指令的解释和执行,同时管理有关的寄存器;总线接口部件是CPU在存储器和I/O设备之间的接口部件,负责对全部引脚的操作;2.简述8086 CPU的寄存器组织;答:8086 CPU内部共有14个16位寄存器,按用途可分为数据寄存器,段寄存器,地址指针与变址寄存器和控制寄存器;数据寄存器包括累加器,基址寄存器,计数器,和数据寄存器;段寄存器用来存放各分段的逻辑段基值,并指示当前正在使用的4个逻辑段;地址指针与变址寄存器一般用来存放主存地址的段内偏移地址,用于参与地址运算;控制寄存器包括指令寄存器和标识寄存器;3.试述8086 CPU标志寄存器各位的含义与作用;答:标志寄存器是16位的寄存器,但实际上8086只用到9位,其中的6位是状态标识位,3位是控制标识位;状态标志位分别是CF,PF,AF,ZF,SF,和OF;控制标志位包括DF,IF,TF;CF:进位标志位;算数运算指令执行后,若运算结果的最高位产生进位或借位,则CF=1,否则CF=0;PF:奇偶标志位;反应计算结果中1的个数是偶数还是奇数;若运算结果的低8位中含有偶数个1,则PF=1;否则PF=0.AF:辅助进位标志;算数运算指令执行后,若运算结果的低4位向高4位产生进位或借位,则AF=1;否则AF=0.ZF:零标志位;若指令运算结果为0,则ZF=1;否则ZF=0;SF:符号标志位;它与运算结果最高位相同;OF:溢出标志位;当补码运算有溢出时,OF=1;否则OF=0;DF:方向标志位;用于串操作指令,指令字符串处理时的方向;IF:中断允许标志位;用来控制8086是否允许接收外部中断请求;TF:单步标志位;它是为调试程序而设定的陷阱控制位;4.8086 CPU状态标志和控制标志有何不同程序中是怎样利用这两类标识的8086的状态标志和控制标识分别有哪些答:状态标志位反应了当前运算和操作结果的状态条件,可作为程序控制转移与否的依据;它们分别是CF,PF,AF,ZF,SF,和OF;控制标志位用来控制CPU的操作,由指令进行置位和复位,控制标志位包括DF,IF,TF;5.将1001 1100和1110 0101相加后,标识寄存器中CF, PF, AF, ZF, SF, OF各为何值答:CF=1,PF=1,AF=1,ZF=0,SF=1,OF=06.什么是存储器的物理地址和逻辑地址在8086系统中,如何由逻辑地址计算物理地址答:逻辑地址是思维性的表示,由段地址和偏移地址联合表示的地址类型叫逻辑地址;物理地址是真实存在的唯一地址,指的是存储器中各个单元的单元号;在8086系统中,物理地址=段地址×10H+偏移地址7.段寄存器CS=1200H,指令指针寄存器IP=4000H,此时,指令的物理地址为多少指向这一地址的CS指和IP值是唯一的吗答:此指令的物理地址=1200H×10H+4000H=16000H 并且指向这一物理地址的CS值和IP值并不是唯一的;8.在8086系统中,逻辑地址FFFF:0001,00A2:37F和B800:173F的物理地址分别是多少答:9.在8086系统中,从物理地址388H开始顺序存放下列3个双字节的数据651AH,D761H和007BH,请问物理地址388H,389H,38AH,38BH,38CH和38DH 6个单元中分别是什么数据答:388H=1AH,389H=65H,38AH=61H,38BH=DTH,38CH=7BH,38DH=00H10.8086微处理器有哪几种工作模式各有什么特点答:8086微处理器有最大和最小工作模式;在最小模式下:8086 CPU直接产生全部总线控制信号DT/R,DEN,ALE,M/IO和命令输出信号RD,WR,INTA并提出请求访问总线的逻辑信号HOLD,HLDA;在最大工作模式下,必须配置8288总线控制器,并且根据8086提供的状态信号S2,S1,S0,输出读写控制命令,可以提供灵活多变的系统配置,以实现最佳的系统性能;11.简述8086引脚信号中M/IO,DT/R,RD,WR,ALE,DEN和BHE的作用;答:M/IO:输出信号,高电平时,表示CPU与存储器之间数据传输;低电平时,表示CPU与I/O设备之间数据传输;DT/R:控制其数据传输方向的信号;DT/R=1时,进行数据发送;DT/R=0时,进行数据接收;RD:CPU的读信号,RD=0时,表示8086为存储口或I/O端口读操作;WR:CPU的写信号,WR =0时,表示8086为存储口或I/O端口写操作;ALE:地址存锁信号,在T1能时刻有效;DEN:数据选通信号,当DEN有效时,表示允许传输;BHE:数据总线允许信号,与A0组合使用,表示是否访问奇地址字节;12.简述8086读总线周期和写总线周期和引脚上的信号动尖态变化过程;8086的读周期时序和写周期时序的区别有哪些答:在8086读周期内,有关总线信号的变化如下:①M/IO:在整个读周期保持有效,当进行存储器读操作时,M/IO为高电平;当进行I/O端口读操作时,M/IO为低电平;②A19/S6~A16/S3:在T1期间,输出CPU要读取的存储单元或I/O端口的地址高4位;T2~T4期间输出状态信息S6-S3;③BHE/S7:在T1期间,输出BHE有效信号BHE为低电平,表示高8位数据总线上的信息可以使用,BHE信号通常作为奇地址存储体的体选信号偶地址存储体的体选信号是最低地址位A0;T2—T4期间输出高电平;④AD l5~AD0:在T1期间,输出CPU要读取的存储单元或I/O端口的地址A15~A0;T2期间为高阻态,T3~T4期间,存储单元或I/O端口将数据送上数据总线;CPU从AD l5~AD0上接收数据;⑤ALE:在T1期间地址锁存有效信号,为一正脉冲,系统中的地址锁存器正是利用该脉冲的下降沿来锁存A19/S6~A16/S3,AD l5~AD0中的20位地址信息以及BHE;⑥RD:T2期间输出低电平送到被选中的存储器或I/O接口,注意,只有被地址信号选中的存储单元或I/O端口,才会被RD信号从中读出数据数据送上数据总线AD l5~AD0;⑦DT/R:在整个总线周期内保持低电平,表示本总线周期为读周期,在接有数据总线收发器的系统中,用来控制数据传输方向;⑧DEN:在T2~T3期间输出有效低电平,表示数据有效,在接有数据总线收发器的系统中,用来实现数据的选通;总线写操作的时序与读操作时序相似,其不同处在于:①AD l5~AD0:在T2~T4期间送上欲输出的的数据,而无高阻态;②W R:从T2~T4,W R引脚输出有效低电平,该信号送到所有的存储器和I/O 接口;注意,只有被地址信号选中的存储单元或I/O端口才会被W R信号写入数据;③DT/R:在整个总线周期内保持高电平,表示本总线周期为写周期,在接有数据总线收发器的系统中,用来控制数据传输方向;习题31.假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据变量V AL的偏移地址为0050H,请指出下列指令原操作数是什么寻址方式,其物理地址是多少(1)MOV AX, 0ABH 2 MOV AX, 100H3 MOV AX, V AL4 MOV BX, SI5 MOV AL, V ALBX6 MOV CL, BXSI7 MOV V ALSI, BX 8 MOV BPSI, 100答:1 立即数寻址,无物理地址2 直接寻址,物理地址=2000H×10H+100H=20100H3 直接寻址,物理地址=2000H×10H+0050H=20050H4 寄存器间接寻址,物理地址=2000H×10H+00A0=200A0H5 相对寄存器寻址,物理地址=2000H×10H+0050+0100H=20150H6 基址加变寻址,物理地址=2000H×10H+0100H+00A0H=201A0H7 寄存器寻址,无物理地址8 立即数寻址,无物理地址2.已知SS=0FFA0H,SP=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图;答:“8057H”进栈,则SP自动从00B0H指向00B2H,“0F79H”进栈,则SP自动从00B2H指向00B4H;执行一条POP指令,“0F79H”被弹出栈,SP从00B4H指向00B2H;图略;3.设有关寄存器及存储单元的内容如下:DS=2000H, BX=0100H, AX=1200H, SI=0002H, 20100H=12H, 20101H=34H, 20102H=56H, 20103H=78H, 21200H=2AH, 21201H=4CH, 21202H=0B7H, 21203H=65H.试说明下列各条指令单独执行后相关寄存器或存储单元的内容;(1)MOV AX, 1800H 2 MOV AX, BX3 MOV BX, 1200H4 MOV DX, 1100BX5 MOV BXSI, AL6 MOV AX, 1100BXSI答:1 AX=1800H 2 AX=0100H 3 BX=4C2AH4 DX=4C2AH5 20102H=00H6 AX=65B7H4. 写出实现下列计算的指令序列;1 Z=W+X+Z2 Z=W-X+6-R+9答:1 MOV AX, ZADD AX, XADD AX, WMOV Z, AX2 MOV AX, WADD X, 6SUB AX, XADD R, 9SUB AX, RMOV Z, AX5. 若在数据段中从字节变量TABLE相应的单元开始存放了0~15的平方值,试写出包含XLAT指令的指令序列查找N0~15中的某个平方数;答:LEA BX, TABLEMOV AL, CLXLAT6. 写出实现下列计算的指令序列;1 Z=WX/R+62 Z=W-X/5Y2答:1 MOV AX, WIMUL XADD R, 6IDIV RMOV Z, AX2 MOV AX, WSUB AX, XMOV BL, 5IDIV BLCBWIMUL YMOV BX, 2IMUL BXMOV Z, AX7. 假定DX=1100100110111001B,CL=3,CF=1, 试确定下列各条指令单独执行后DX的值;1 SHR DX, 12 SHL DL, 13 SAL DH, 14 SAR DX, CL5 ROR DX, CL6 ROL DL, CL7 RCR DL, 18 RCL DX, CL答:1 DX=0110 0100 1101 1100B 2 DX=1100 1001 0111 0010B3 DX=1001 0010 1011 1001B4 DX= 1111 1001 0011 0111B5 DX= 0011 1001 0011 0111B 6DX= 0100 1101 1100 1110B7 DX= 1110 0100 1101 1100B 8 DX= 1001 0011 0111 0011B8. 已知程序段如下:MOV AX, 1234HMOV CL, 4ROL AX, CLDEC AXMOV CX, 4MUL CXINT 20H试问:1每条指令执行后,AX寄存器的内容是什么2每条指令执行后,CF,SF 及ZF的值分别是什么3程序运行结束后,AX及DX寄存器的值为多少答:MOV AX, 1234H AX=1234H, CF=0,SF=0,ZF=0MOV CL, 4ROL AX,CL AX=2341H,CF=1,SF=0,ZF=0DEC AX AX=2340H,CF=1,SF=0,ZF=0MOV CX,4MULL CX AX=8D00H, CF=0,SF=1,ZF=0INT 20H结束后,DX=0000H, AX=8000H9.试分析下列程序段:ADD AX, BXJNC L2SUB AX, BXJNC L3JMP SHORTL5如果AX,BX的内容给定如下:AX BX1 14C6H 80DCH2 B568H 54B7H问该程序在上述情况下执行后,程序转向何处;答:1转到L2处2转到L3处习题41.下列语句在存储器中分别为变量分配多少字节空间并画出存储空间的分配图;V AR1 DB 10,2V AR2 DW 5 DUP ,0V AR3 DB ‘HOW ARE YOU ’,3 DUP1,2V AR4 DD -1,1,0答:字节空间:V AR1:2;V AR2:12;V AR3:13;V AR4:8;存储空间的分配图:2.假定V AR1 和V AR2 为字变量,LAB 为标号,试指出下列指令的错误之处; 1ADD V AR1,V AR2 2SUB AL,V AR13JMP LABCX 4JNZ V AR15 MOV 1000H,100 6SHL AL, 4答:1 在算术运算指令中,两个操作数不能同时为存储器寻址方式2 AL 为字节,V AR1 为字变量,字长不相等;3 错误1:寄存器相对寻址方式,只能使用基址或变址寄存器,不能使用CX寄存器;错误2:汇编格式错误,无法判段是段内转移还是段间转移;4 转向地址应为标号,不能是变量;5 目的操作数的类型不确定;6 SHL 指令中,当所移位数超过1 时,必须用CL取代所移位数;3.对于下面的符号定义,指出下列指令的错误;A1 DBA2 DB 10K1 EQU 10241 MOV K1,AX 2MOV A1,AX3CMP A1,A2 4K1 EQU 2048答:1K1 为常量,不能用MOV 指令赋值;2A1 为字节,AX 为字变量,类型不一致;3A1 和A2同为存储器寻址方式,不符合语法规则;4K1 重新赋值前,必须用PURGE 释放;4.数据定义语句如下所示:FIRST DB 90H,5FH,6EH,69HSECOND DB 5 DUPTHIRD DB 5 DUPFORTH DB 4 DUP自FIRST 单元开始存放的是一个四字节的十六进制数低位字节在前,要求:编一段程序将这个数左移两位后存放到自SECOND 开始的单元,右移两位后存放到自THIRD 开始的单元,求补后放到FORTH开始的单元;注意保留移出部分答:DA TA SEGMENTFIRST DB 90H,5FH,6EH,69HSECOND DB 5 DUPTHIRD DB 5 DUPFORTH DB 4 DUPDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,FIRSTLEA DI,SECONDMOV CX,2CLC;左移2 位MOV AX,WORD PTR SI ;AX=5F90H 为低十六位数据INC SIINC SIMOV DX,WORD PTR SI ;DX=696EH 为高十六位数据PUSH DX ;保存原有的高十六位数据PUSH AX ;保存原有的低十六位数据ROL DX,CL;将高位数据不带进位循环左移两位,即高2 位数据在DL 的低2 位AND DL,03H ;让DL 中仅保存移出的高2 位数据MOV DI+4 ,DL;将移出的高2 位数据放入SECOND 中的最高单元中ROL AX,CL;将低位数据不带进位循环左移两位,即AX 的高2 位在AL 的低2 位AND AL,03H;让AL 中仅保存移出的AX 高2 位数据MOV BL ,AL;将AL 中的数据放入BL 中保存POP AX;弹出原有的低十六位数据POP DX;弹出原有的高十六位数据SHL DX,CL;将高位数据算术逻辑左移2 位SHL AX,CL;将低位数据算术逻辑左移2 位OR DL,BL;将AX 中移出的高2 位数据放入DX 的低2 位MOV WORD PTR DI ,AXMOV WORD PTR DI+2 ,DX;右移2 位LEA DI,THIRDMOV CX,2CLCMOV AX,WORD PTR SI ;AX=5F90H 为低十六位数据INC SIINC SIMOV DX,WORD PTR SI ;DX=696EH 为高十六位数据PUSH DX;保存原有的高十六位数据PUSH AX;保存原有的低十六位数据ROR AX,CL;将低位数据不带进位循环右移两位,即低2 位数据在AH 的高2 位AND AH,0C0H;让AH 中仅保存移出的低2 位数据PUSH CXMOV CX,6SHR AH,CLPOP CXMOV DI ,AH ;将移出的低2 位数据放入THIRD 中的最低单元中ROR DX, CL;将低位数据不带进位循环左移两位,即AX 的高2 位在AL 的低2 位AND DH,0C0H ;让DH 中仅保存移出的DX 低2 位数据MOV BL ,DH ;将DH 中的数据放入BL 中保存POP AX ;弹出原有的低十六位数据POP DX ;弹出原有的高十六位数据SHR DX,CL ;将高位数据算术逻辑左移2 位SHR AX,CL ;将低位数据算术逻辑左移2 位OR AH,BL ;将DX 中移出的低2 位数据放入AX 的高2 位MOV WORD PTR DI+1 , AXMOV WORD PTR DI+3 ,DX;求补LEA DI,FORTHMOV AX,WORD PTR SI ;AX=5F90H 为低十六位数据INC SIINC SIMOV DX,WORD PTR SI ;DX=696EH 为高十六位数据XOR AX, 0FFFFH ;将低十六位取反XOR DX, OFFFFH ;将高十六位按位取反CLCADD AX,01H ;低位加1,即可为原数的求补ADC DX,0 ;高位加低位加法时的进位MOV WORD PTR DI , AXMOV WORD PTR DI+2 ,DXMOV AH,4CHINT 21HCODE ENDSEND START5.试编程序将内存从40000H到4BFFFH的每个单元中均写入55H,并再逐个单元读出比较,看写入的与读出的是否一致;若全对,则将AL置7EH; 只要有错,则将AL置81H;答:DATA SEGMENTDA1 DB 55HCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,4000HMOV DS,AXMOV CX,0C000HMOV BX,0000HMOV AH,55HNEXT1: MOV byte ptrBX,AHINC BXLOOP NEXT1MOV BX,0000HMOV CX,0C000HMOV AL,81HNEXT2: MOV AH, BXCMP AH,55HJNZ EXITINC BXLOOP NEXT2MOV AL,7EHEXIT: MOV AH,4CHINT 21HCODE ENDSEND START6.在当前数据段4000H开始的128个单元中存放一组数据,试编程序将它们顺序搬移到A000H开始的顺序128个单元中,并将两个数据块逐个单元进行比较; 若有错将BL置00H; 全对则将BL置FFH,试编程序;答:DATA SEGMENTORG 400HDA1 DB 128 DUPORG 0A00HDA2 DB 128 DUPDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATAMOV DS,AXLEA SI,DA1LEA DI,DA2MOV CX,128AGAIN: MOV AL,SIINC SIINC DILOOP AGAINLEA SI, DA1LEA DI, DA2MOV CX,128NEXT: MOV AL,SIMOV BL,DICMP AL,BLJNZ ERRORINC SIINC DIMOV BL,0FFHLOOP NEXTJMP EXITERROR: MOV BL,00HEXIT: MOV AH,4CHINT 21HCODE ENDSEND START7. 设变量单元A、B、C存放有3个数,若3个数都不为零,则求3个数的和,存放在D中; 若有一个为零,则将其余两个也清零,试编写程序;答:DATA SEGMENTA DBB DBC DBDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXCMP A,00HJNZ LP1MOV B,0MOV C,0JMP LP4LP1: CMP B,00HJNZ LP2MOV A,0MOV C,0JMP LP4LP2: CMP C,00HJNZ LP3MOV A,0MOV B,0JMP LP4LP3: MOV AL,AADD AL,BADD AL,CMOV AH,4CHLP4: INT 21HCODE ENDSEND START8. 有一个100个字节的数据表,表内元素已按从大到小的顺序排列好,现给定一元素,试编程序在表内查找,若表内已有此元素,则结束; 否则,按顺序将此元素插入表中适当的位置,并修改表长;答:DATA SEGMENTBUFF DB 100 DUPDA1 DBLENGTH DB 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,0MOV AL,DA1MOV CX,100FIND0: CMP BUFFSI,ALJZ EXITINC SILOOP FIND0MOV DI,99MOV SI,0COMPARE: CMP BUFFDI,ALJG INSERTMOV BL,BUFFDIMOV BUFFDI+1,BLDEC DICMP DI,SIJNL COMPAREJMP EXITINSERT: MOV BUFFDI+1,ALMOV LENGTH , 101 EXIT: MOV AH,4CHINT 21HCODE ENDSEND START9. 内存中以FIRST和SECOND开始的单元中分别存放着两个16位组合的十进制BCD码数,低位在前;编程序求这两个数的组合的十进制和,并存到以THIRD 开始的单元;答:DATA SEGMENTFIRST DD 34341212HSECOND DD 78785656HTHIRD DB , , ,DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA SI,FIRSTLEA DI,SECONDLEA BX,THIRDMOV CX,4CLCAGAIN: MOV AL,BYTE PTRSIMOV DL,BYTE PTRDIADC AL,DLDAAMOV BYTE PTRBX,ALINC SIINC DIINC BXLOOP AGAINJC AAMOV BYTE PTRBX,0JMP EXITAA: MOV BYTE PTRBX,1EXIT: MOV AH,4CHINT 21HCODE ENDSEND START10. 编写一段程序,接收从键盘输入的10个数,输入回车符表示结束,然后将这些数加密后存于BUFF缓冲区中;加密表如下:输入数字: 0,1,2,3,4,5,6,7,8,9; 密码数字: 7,5,9,1,3,6,8,0,2,4;答:DATA SEGMENTMITAB DB '7591368024'CONT EQU $-MITABBUFF DB 10 DUP ,'$'YUANWEN DB 10 DUP ,'$'DATA ENDSCODE SEGMENTASSUME CS∶CODE,DS∶DATASTART:MOV AX,DATAMOV DS,AXMOV SI,0MOV CX,CONTINPUT: MOV AH,1INT 21HCMP AL,13JZ EXITAND AL,0FHMOV YUANWENSI ,ALINC SILOOP INPUTEXIT : LEA BX,MITABMOV CX,SIMOV SI,0JIAMI: MOV AL,YUANWENSIXLAT MITABMOV BUFFSI,ALINC SILOOP JIAMIMOV AH, 4CHINT 21HCODE ENDSEND START11.试编程序,统计由40000H开始的16K个单元中所存放的字符“A”的个数,并将结果存放在DX中;答:DATA SEGMENTDA1 DB 'A'BUFF DB 4000H DUPDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,4000HMOV DS,AXMOV BX,0MOV CX,4000HFIND: MOV AL,BXMOV BL,DA1CMP AL,BLJNZ NEXTNEXT: INC SILOOP FINDMOV AH,4CHINT 21HCODE ENDSEND START12. 在当前数据段DS,偏移地址为DATAB开始的顺序80个单元中,存放着某班80个同学某门考试成绩;按如下要求编写程序:1 编写程序统计≥90分; 80分~89分; 70分~79分; 60分~69分,<60分的人数各为多少,并将结果放在同一数据段、偏移地址为BTRX开始的顺序单元中;2 试编程序,求该班这门课的平均成绩为多少,并放在该数据段的A VER单元中; 答:DATA SEGMENTBUFF DW 80 DUPDA9 DB 0DA8 DB 0DA7 DB 0DA6 DB 0DA5 DB 0A VER DB 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV CX,80COMPARE: MOV BX,0CMP BUFFBX,90JB LP8JMP NEXTLP8: CMP BUFFBX,80JB LP7INC DA8JMP NEXTLP7: CMP BUFFBX,70JB LP6INC DA7JMP NEXTLP6: CMP BUFFBX,60JB LP5INC DA6JMP NEXTLP5: INC DA5JMP NEXT NEXT: INC BXLOOP COMPAREMOV CX,80XOR AX,AXMOV BX,00 SUM: ADD AX,BUFFBXINC BXLOOP LP1MOV CL,80DIV CLMOV A VER , ALMOV AH,4CHINT 21HCODE ENDSEND START13. 编写一个子程序,对AL中的数据进行偶校验,并将经过校验的结果放回AL 中;答:JIOU PROCPUSH CXPUSH BXXOR AH, AHPUSH AXMOV CL, 7LOOP1: SAR AL, 1ADC AH, 0LOOP LOOP1MOV AL, AHXOR AH, AHMOV BL, 2DIV BLMOV BL, AHPOP AXROR BL, 1OR AL, BLPOP BXPOP CXRETJIOU ENDP14. 利用上题的子程序,对80000H开始的256个单元的数据加上偶校验,试编程序;CODE SEGMENTASSUME CS: CODESTART : MOV AX, 8000HMOV DS, AXMOV SI, 0MOV CX, 256 LP: MOV AL, SICALL JIOUMOV SI, ALINC SILOOP LPMOV AH, 4CHINT 21HJIOU PROCPUSH CXPUSH BXXOR AH, AHPUSH AXMOV CL, 7 LOOP1: SAR AL, 1ADC AH, 0LOOP LOOP1MOV AL, AHXOR AH, AHMOV BL, 2DIV BLMOV BL, AHPOP AXROR BL, 1OR AL, BLPOP BXPOP CXRETJIOU ENDPCODE ENDSEND START习题51.试述DRAM的工作特点;与SRAM相比有什么长处和不足之处;说明它的使用场合;答:DRAM,动态随机存取存储器,需要不断的刷新,才能保存数据; 而且是行列地址复用的,许多都有页模式; SRAM,静态的随机存取存储器,加电情况下,不需要刷新,数据不会丢失,而且一般不是行列地址复用的;与SRAM相比,DRAM价格便宜、速度慢、容量大,主要用来做主存储器,存储程序和数据;而SRAM主要用在Cache等对速度要求高的情况;2.试述DRAM刷新过程和正常读/写过程的区别;答:刷新是以行为单位进行,且刷新过程中不能进行读写操作;3.设有一个具有20位地址和32位字长的存储器,问:(1)该存储器能存储多少个字节的信息(2)如果存储器由512K8位SRAM芯片组成,需要多少片(3)需要多少位作芯片选择答:1该存储器能存储4MB的信息;2 需要8片512K8位的芯片;3 需要1位做芯片选择;4.对于8K×8位RAM组成的存储器系统,若某组的起始地址为08000H,则其末地址为多少答:末地址为9FFF.5.在8088最大方式系统总线上扩充设计4K字节的SRAM存储器电路;SRAM芯片选用Intel 2114,起始地址从0000H;试画出此存储器电路与系统总线的连接图;答:系统容量为4K8bit,芯片容量为1K4bit,所以一共需要8片芯片连接图如下:6.在8088系统总线上扩充设计8K的字节的SRAM存储器电路;SRAM芯片选用Intel 6264,起始地址从04000H开始,译码器电路74LS138.(1)计算此RAM存储区的最高地址是多少;(2)画出此存储器电路与系统总线的连接图;答:1最高地址是05FFFH;27.在8086最小方式系统总线上扩充设计16K字节的SRAM存储器电路,SRAM芯片选用Intel 6264,起始地址从04000H开始,译码器电路采用74LS138. (1)计算此RAM存储区域的最高地址是多少(2)画出此存储器与总线的连接图;答:1 07FFFH2习题61.什么是接口接口的功能是什么答:位于主机与外设之间,用来协助完成数据传送和控制任务的逻辑电路称为接口电路,接口电路对输入/输出过程起缓冲和联络作用;接口的功能是有,数据缓冲功能,联络功能,寻址功能,预处理功能,中断管理功能;2.计算机对I/O端口编址时通常采用哪两种方法在8086系统中,用哪种方法进行编址答:I/O端口和存储器统一编址;I/O端口单独编址;8086系统采用I/O端口单独编址方式;3.CPU和输入/输出设备之间传送的信息有哪几类答: 数据信息,控制信息,与状态信息;4.简述CPU与外设进行数据交换的几种常用方式.答: 程序控制方式: 特点是依靠程序的控制来实现主机和外设的数据传送,可分为无条件传送方式和查询方式.中断控制方式: 每次输入和输出一个数据,CPU都要检查外设的状态;直接存储器存取控制方式:cpu不参加数据传送,而是由DMA控制器来实现内存与外设,外设与外设之间的直接传递;通道方式:可以实现对外围设备的统一管理和外围设备与内存之间的数据传送;外围处理机方式:由PPU独立于主机工作,减少了CPU控制外设的负担;5.无条件传送方式适用哪些场合查询方式原理怎样主要用在什么场合答:无条件传送适用于简单的输入/输出设备,CPU可以随时读取或接受状态;这些信号变化缓慢,当需要采集数据时,无需检查端口,就可以立即采集数据,直接用输入/输出指令完成;无条件传送方式主要用于控制CPU与低俗I/O接口之间的信息交换;6.现有一输入设备,其数据端口的地址为FFE0H,并于端口FFE2H提供状态,当其D0位为1时表明输入数据准备好;请编写采用查询方式进行数据传送的程序段,要求从该设备读取100B并输入到1000H:2000H开始的内存中;MOV DX, 0FFE2HL1:IN AL, DX 这是习题6的第6题的答案, TEST AL, 01H 这个程序写不出来,建议删这一问JZ L1MOV AX, 1000HMOV DS, AXMOV DX, 2000HMOV CX, 100MOV DX, 0FFE0HL2: IN AL, DXMOV DX, ALINC BXLOOPN L27.查询式传送方式有什么优缺点中断方式为什么能弥补查询方式的缺点答:查询传送方式CPU通过程序不断查询相应设备的状态,状态不符合要求,则CPU需要等待;只有当状态信号符合要求时,CPU才能进行相应的操作;中断方式提高了计算机系统中信息处理的并行和处理器效率,中断可以实现同步操作,实时处理等功能;8.8088/8086中断向量表的作用是什么答:中断向量表建立了不同的中断源与其相应的中断服务程序首地址之间的联系,它是CPU在响应中断时可以依据中断类型码自动转向中断服务程序;9.什么叫中断向量它放在哪里对于1CH的中断向量在哪里如果1CH的中断程序从5110H开始:2030H开始,则中断向量应该怎样存放答:中断向量即用来提供中断入口地址的一个指针;10.8259中IRR, IMR, ISR三个寄存器的作用是什么答:⑴中断请求寄存器IRR8259A有8条外部中断请求输入信号线IR0-IR7,每一条请求线上有一个相应的触发器来保存请求信号,它们形成了中断请求寄存器IRRInterrupt Request Register;⑵中断屏蔽寄存器IMRIMRInterrupt Mask Register用来存放屏蔽位信息,IMR的每一位可以禁止IRR 中对应位的中断请求输入信号进入;⑶中断服务寄存器ISRISRInterrupt Service Register存放当前正在进行服务的所有中断;ISR中相应位的置位是在中断响应的INTA脉冲期间,由优先权判决电路根据IRR中各请求位的优先权级别和IMR中屏蔽位的状态,将中断的最高优先级请求位选通到ISR中;11.类型号为20H的中断服务程序入口符号地址为INT-5,试写出中断向量的装入程序片段;答:MOV AX, 0MOV DS, AXMOV SF, 20H4LEA AX, IMSMOV IS, AXMOV AX, SEQ, INTSMOV SI+2, AX12.简述DMA控制器同一般接口芯片的区别;答:DMA控制器能给出访问内存所需要的地址信息,并能自动修改地址指针,也能设定和修改传送的字节数,还能向存储器和外设发出相应的读/写控制信号;在DMA传送结束后,它能释放总线,把对总线的控制权又交还给CPU;用DMA方式传输数据时,不需要进行保护和恢复断点及现场之类的额外操作;13.简述8237A3种基本传送类型的特点;答:单次传送方式:每次DMA操作只传送1B,然后就自动把总线控制权交给CPU,若还有通道请求信号,则DMAC则再重新向CPU发出总线请求,获得控。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3) TYPE
格式: TYPE 符号名
TYPE运算符可加在变量或标号的前面,所求出的 是这些存储器操作数的类型值。 ① TYPE加在变量前面返回的是这个变量的字节数。 对于前例中定义的数据段,则: TYPE VAR1=1 TYPE VAR2=2 TYPE VAR3=4 ② TYPE加在标号的前面, 返回该标号的属性(值)是-1(NEAR) 或是-2(FAR)。
④. 多个变量同时被定义, 则按源程序顺序依次分配单元. 例. DB 0 DW 135FH DB `AB` DB 0,1,3,`C` 汇编后:0000H~0008H单元依次为: 00,5F,13,42,41,00,01,03,43. ⑤. 变量的类型必须与指令的要求相符: 例. WDATA DW 12 DUP (?) MOV AX, WDATA MOV SI, [WDATA+2] 变量的另一种解释:是一个数据项的第一个字节相对应的标识符,它表 示该数据项第一个字节在现行段中的偏移量;以变量名所对应的地 址开始依次将表达式的各项值存入内存单元.
第七章
微型计算机汇编语言及汇编程序
(EDIT)
手写汇编语 编辑程序 言源程序 编辑 汇编语言 源文件 .ASM
(ASM)
汇编程序
(LINK)
机器语言 机器语言 连接程序 目标程序 执行程序 连接 .OBJ .EXE
汇编
1.用编缉程序(EDIT)建立与修改,形成属性为.ASM的汇编语言 源文件; 2.将源文件经过汇编程序(ASM)进行汇编,产生属性为.OBJ的目 标程序(文件)并存盘; 3.经过连接程序(LINK)把目标文件与库文件及其他目标文件连 接在一起,形成属性为.EXE的可执行文件,由DOS装入内存; 4.在DOS环境下,在机器上执行之. 必须按严格的语法规则和规定的格式来编写源程序,才能正确汇 编成可执行程序。
5.属性修改运算符(组合运算符) 这种运算符为存储器地址操作数(符号名)临时 指定一新的属性,而忽略当前的属性,故称为 属性修改运算符。 共有六个属性修改运算符: PTR、段超越(属性) 前缀、SHORT、THIS、HIGH和LOW。
(1) PTR (改变新类型) PTR用来将符号名改为新的类型.但不实际 分配存储单元。 格式: 类型 PTR 符号名
④
表达式为带 DUP 的式子: D-B1 DB 20H D-B2 DB 10H D-B3 DW 10H
DUP DUP DUP
(?) (`ABCD`) (4)
说明: ①. 表达式即给变量赋的初值; ②. 程序中以变量名出现, 访问数只需找到该数的变量 名即可; MOV AL, DA-DATA ③. 变量名与标号的区别: 变量名: 数据区的名字,其类型指字节的大小---数 的符号地址; 标号: 某条执行指令起始地址的符号, 其类型 指 指令间的距离远近(NEAR OR FAR)__ -----指令的符号地址.
3.标号 标号是可执行指令语句的地址的符号表示,它可 作为转移指令和调用指令CALL的目标操作数,以 确定程序转向的目标地址,它也具有三个属性: 段属性(SEGMENT) 标号所在段的段基址。标号 的段是它所出现的那个代码段,所以由CS指示。 偏移属性(OFFSET) 标号所在地址与所在段的段 首址之间的偏移地址字节数。 类型(TYPE) 标号的类型属性指在转移指令中标 号可转移的距离,也称距离属性。类型NEAR, 只能实现本代码段内转移或调用;类型FAR,可 以作为其它代码段中的目标地址,实现段间转 移或调用。
[例] DATA是从存储器实际地址02000H开始的一 个数据段如下: DATA SEGMENT VAR1 DB 20,30 VAR2 DW 2000H,3000H VAR3 DD 22002200H,33003300H DATA ENDS
① MOV ② MOV ③ MOV
BX,SEG VAR1 汇编成: MOV CX,SEG VAR2 汇编成: MOV DX,SEG VAR3 汇编成: MOV
附:保留字
保留字是一个汇编语言中预先保留下 来的具有特殊含义的符号,只能作为固定 的用途。凡是8086的指令、伪指令、寄 存器名等都是保留字。因此,标号、变量 名、段名、过程名、符号名等都不能使 用保留字。
三.
MASM中的表达式和运算符 表达式的格式: 操作数 运算符 操作数 表达式的值: 汇编时,由汇编程序计算出来. 1.算术运算符 算术运算符完成算术运算,它包括+(加法)、-(减 法)、*(乘法)、/(除)、MOD(求余)以及SHL(左移,左移 1位相当于乘2)和SHR(右移,右移1位相当于除2)共七种 运算。 以上七种运算可直接对数字进行运算,但对地址的 运算,只用加法和减法才具有实际意义,并且要求进行 加、减的两个地址应在同一段内,否则运算结果便不是 一个有效地址了,对地址乘是没有意义的。
2.逻辑运算符 逻辑运算符对其操作数进行按位操作。 逻辑运算符有: AND(与)、OR(或)、XOR(异 或)和NOT(非),其中NOT是单操作数运算符, 其它是双操作数运算符。 ① MOV AX,0FF00H AND 10AEH ;将两个数 相 相“与”的结果送AX. 汇编成: MOV AX,1000H
(4) LENGTH LENGTH运算符确定变量所含的数据元素的 个数,即以变量类型(字节、字或双字)为单位 的数据存储单元的个数。(数据项总数) 格式为: LENGTH 变量名
LENGTH的取值,根据定义变量时,数据定义 伪指令后面的表达式来确定。 表达式必须为重复子句“n DUP(简单表达 式)”,则取值为n.
4.数值返回运算符(分析运算符) 数值返回运算符是对存储器地址进行运算的。 它可以将存储器地址的三个重要属性,即段、偏 移量和类型分离出来。 数 值 返 回 运 算 符 共 有 五 个 : SEG 、 OFFSET 、 TYPE、SIZE和LENGTH,其中SIZE和LENGTH只对数 据存储器地址操作数有效。 (1) SEG 格式: SEG 符号名(变量名或标号名) SEG用来求取一个符号名的段基址。
所有的变量都具有三个属性: 段属性(SEGMENT) 指变量所在段的段基址,它 必须在一个段寄存器中。
偏移属性(OFFSET) 指变量所在地址与所在段 的段首地址之间的地址偏移字节数。 类型属性(TYPE) 变量的类型属性指变量中 每个元素所包含的字节数,类型包括字节变量 (BYTE)、字变量(WORD)及 双字变量(DWORD)等。
常数类型: 二,八,十,十六,实数,字符串常数.
`AB`,`CD`。
以ASCII码形式在M中存放
2. 变量 变量通常指存放在存储单元中的值,在程序运行中 是可以修改的。 (1).变量的定义与预臵: 定义: 给变量分配存储单元,并起名. 预臵: 给变量设初值. 采用指令: DB,DW, DD等.
例. VAR-DATA SEGMENT DATA1 DB 12H DATA2 DB 34H DATA3 DW 5678H VAR-DATA ENDS
(2).数据定义伪指令: 为数据项分配存储单元并赋初值. 格式: DB 变量名 DW 表达式1,表达式2,--DD 例. ① 表达式为常数: DA-B DB 50H, 50 DA-W DW 0A3FH, 4981H ②表达式为“?”: SIR DB ?, ? SIR DW ?, ? ③表达式为字符串: SIF DB `ABCDEF` SIF DW `AB`, `CD` SIF DD `AB`, `CD`
ቤተ መጻሕፍቲ ባይዱ
通常是在标号上加/减某一个数字量,例如DA1+2、K23各表示一个存储单元的地址。
例:MOV
的 MOV
MOV
MOV
确
AL,BUFFER+3 ; ;将BUFFER字节单元以后的第三单元 的内容送AL AH,3*2-5 MOD 3 ;将表达式3*2-5MOD 3的值送AH BH,010lB SHL 4 ;将二进制数0101B左移四次后送BH BL,01010000B SHR 4 ;将二进制数01010000B右移四次后 送BL
BX,0200H CX,0200H DX,0200H
(2) OFFSET 格式: OFFSET 符号名 OFFSET运算符返回一个变量或标号的段内偏移 地址值,是程序设计中常用的运算符。
[例]对上例中定义的数据段,用OFFSET可以求出 VAR2的段内偏移地址。 MOV BX,OFFSET VAR2 汇编成: MOV BX,2 ;变量VAR2的偏移量为2. 汇编程序将变量的偏移地址送到BX中,相当于指 令: LEA BX,VAR2
二. 数据项:
汇编语言中使用的操作数,可以是常数、寄存器、存储器、变量、标号 或表达式,其中常数、变量和标号是三种基本数据项。 1. 常数 常数在汇编时已有固定值,没有属性,是不能改的数据。 指令语句中: 立即数,位移量; 伪指令语句中: 给变量赋予的初值. 例. MOV AX, 0A5FH MOV BX, [SI+32H] DB 12H ;定义一个字节数据 DW 1234H ;定义一个字节数据
§7.1 汇编语言程序格式(基本语法) 一. 语句格式:
1.指令性语句 指令性语句与机器指令相对应,指令性语句格式为: [标号:] 指令助记符 操作数,操作数 ;[注释] 2.伪指令语句 伪指令语句没有对应的机器指令,汇编程序汇编源程序时对 伪指令进行处理,它可完成数据定义、存储器分配、段定义、 段设定、指示程序结束等功能。格式为: [标号名] 伪指令 操作数,操作数 ;[注释] 3.宏指令语句 宏指令语句由标号、宏指令和注释组成。宏指令是由编程者 按一定的规则来定义的一种较“宏大”(MACRO)的指令。一条 宏指令可包括多条指令或伪指令语句。使源程序书写精炼、可 读性好。
;10→AL ;8→BL ;5→CL
(5) SIZE SIZE确定变量所含的字节存储单元的总数。 格式为: SIZE 变量名 SIZE返回的值是LENGTH返回的值与TYPE返回的 值的乘积,即: SIZE =LENGTH * TYPE SIZE N1=LENGTH N1*TYPE N1=10*2=20 SIZE N2=8 * 1=8 SIZE N3=5 * 2=10